Это калькулятор рейтинга ELO, специально настроенный для футбольных матчей.
Он может рассчитать данный рейтинг команды, основанный на истории матчей, распределенных в течение разных сезонов/лиг, дает вам вероятность того, что команда Beating Team B, импортные и экспортные данные DO DSON Files, персонализируют алгоритм и еще много функций.
Из Википедии:
Система рейтинга ELO-это метод расчета относительных уровней квалификации игроков в играх конкурентов и компетенторов, таких как шахматы. Он назван в честь своего создателя Арпада Эло, венгерского американского профессора физики.
Эта реализация имеет несколько изменений для адаптации к футбольным матчам, в частности, добавление переменной, которая изменяет точки, распространяющиеся в данном матче в соответствии с разницей в голах.
Для получения подробной информации о формулах и немного больше теории, пожалуйста, посетите страницу Википедии.
Первоначальное значение оценки составляет 1500 баллов, в то время как k по умолчанию составляет 20 (но оно легко изменяется).
Кроме того, после каждого сезона вы можете регрессировать очки всех команд на 1/3 до среднего значения, установив истинную переменную регресстомного . Это особенно полезно в соревновательных лигах, где есть много трансфер и новых игроков в ходе каждого нового сезона (по умолчанию верно).
Команды высшего ранга все равно получат преимущество, но это будет более конкурентоспособным.
EloCalculator calculator = new EloCalculator ();
try {
calculator = new EloCalculator . Builder ()
. setK ( 20 )
. setLeagues ( "C: \ Soccer \ Data.json" )
. setRegressTowardMean ( true )
. build ();
} catch ( IOException ex ) {
Logger . getLogger ( MainClass . class . getName ()). log ( Level . SEVERE , null , ex );
} calculator . calculateRatings ();Вы можете сохранить его (и загрузить позже, чтобы вам не нужно пересчитать).
try {
calculator . saveTeamsJSONFile ( "C: \ Soccer \ Ratings_Jan_2017.json" );
} catch ( IOException ex ) {
Logger . getLogger ( MainClass . class . getName ()). log ( Level . SEVERE , null , ex );
}Или вы можете получить свои данные напрямую. В этом примере мы печатаем только рейтинг в порядке убывания.
System . out . println ( "Ranking: " );
List < Team > teams = calculator . getTeams ( true );
for ( Team t : teams )
System . out . println ((( int ) t . getLastRating (). getRating ()) + " " + t . getName ()); [
{
"champion" : " Palmeiras " ,
"name" : " Campeonato Brasileiro 2016 " ,
"matches" : [
{
"home" : " Vitória " ,
"away" : " Palmeiras " ,
"homeGoals" : 1 ,
"awayGoals" : 2 ,
"date" : " Dec 11, 2016 12:00:00 AM "
},
{
"home" : " Palmeiras " ,
"away" : " Atlético-PR " ,
"homeGoals" : 4 ,
"awayGoals" : 0 ,
"date" : " May 14, 2016 12:00:00 AM "
}
],
"year" : 2016
}
]Несколько вещей, которые я имею в виду на будущее ...
The MIT License (MIT)
Copyright (c) 2016 Victor Santiago
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.