2014-11-25 1 views
1

Недавно созданный турнирный кронштейн, где игроки могут зарегистрироваться и участвовать в шансе получить выигрышное место. Как вы можете видеть, здесь картина этого:Начальные значения для elo

enter image description here

После турнира кронштейн закончен, я планирую преобразовать эти выигрыши в рейтинг. Итак, в результате «Ахиллес» занял первое место, так как он сделал все возможное на турнире, тогда №2 будет «rjg 2» и так далее. Причина, по которой скобка турнира будет преобразована в ранжирование, заключается в том, что теперь я хочу дать игрокам возможность создавать матчи против других игроков. Это важно, потому что, хотя турнирная скобка работает, она не содержит результатов всех возможных совпадений между игроками. Это прекрасно, турнирная скобка только что дала другим базовое представление о том, кто лучший/худший. Однако, как только скобка турнира преобразуется в ранжирование, у новых пользователей также есть возможность зарегистрироваться, позволяя игрокам больше конкурировать друг с другом. Теперь, прежде чем я начну участвовать в рейтинге, я хочу попытаться использовать рейтинг Elo в матчах. Моя проблема заключается в том, что мне нужно назначить этих игроков в турнирных точках. Это сложно, потому что, если я не буду осторожен, то значение K может испортиться в порядке вещей. Вот мой стол:

#1 Achilles 
#2 rjg 2 
#3 gg 
#4 beta 1 
#5 dfgsdf 
#6 test2 
#7 rjgtest 
#8 rocket 

Мне нужно назначить каждому игроку «баллы», чтобы отразить рейтинг. Это означает, что № 1 Ахиллеса будет иметь наибольшее количество очков, а # 2 - rjg2 и т. Д. Однако, с тем, как работает Elo, я не знаю, сколько очков назначить. Если я сделаю это слишком, игроки не будут иметь шансов подняться в рейтинге, но если я сделаю это слишком маленьким, ряды будут постоянно меняться.

Например, если я изложу свою таблицу вверх так:

1 1000 
2 900 
3 800 
4 700 
5 600 
6 500 
7 400 
8 300 
9 200 
10 100 

Где # 1 будет иметь 1000 пунктов, # 2 будет иметь 900 баллов, и так далее. Если ранг №10 превосходит ранг №1, это, очевидно, очень маловероятно. Итак, когда я делаю математику с эло, вот что происходит:

Так что, если я так обойдусь (исходя из того, как это объясняется here), скажем, у меня есть ранг № 10, стоящий перед ранга № 1 , Согласно приведенному выше сайте, моя формула:

R' = R + K * (S - E) 

и рейтинг # 10 имеет только 100 точек, где # 1 имеет 1000. Так после выполнения математике ранг # 10 ожидается значение избивая # 1:

1/[ 1 + 10^([1000 - 100]/400) ] 
= 0.0055% 

0,55% является очень низким, и имеет смысл, ранг # 10 почти не имеет шансов бить кого-то так хорошо, как ранг # 1. Однако, если бы он был бить его, и вот результат:

100 + 32 * (1 - 0.0055) 
= 131.824 

Он только набрать 31 очко, когда избиение игрока оценивается как # 1. Это, очевидно, не сработает, но я могу либо уменьшить диапазон в точках, либо увеличить коэффициент K.

У кого-нибудь есть предложения, чтобы сделать эту работу? Или, может быть, я предлагаю другим игрокам по-другому?

+0

комплект 'K' немного выше. Если бы он смог победить # 1, он наверняка выиграет еще пару раз ... вам действительно не нужны огромные колебания только из-за одного матча. –

ответ

0

Боюсь, я мало знаю о рейтингах Эло, но я понимаю, что выбор подходящего значения K может быть проблематичным.

Я знаю, что часто значение K изменяется в зависимости от Сколько игр игрок сыграл.Игроку, который сыграл много игр, дается более низкое значение K, поэтому их рейтинг не меняется слишком сильно (потому что мы более уверены в их рейтинге, мы хотим, чтобы он оставался довольно постоянным). Точно так же игрок, который не сыграл много игр, получит более высокую ценность K (мы менее уверены в их рейтинге, поэтому мы не против, если он будет двигаться больше).

Один альтернативный подход - использовать системы рейтингов, которые пытаются измерить нашу неопределенность в отношении рейтинга игрока. Например, система рейтинга Glicko или алгоритм Microsoft TrueSkill. Эти системы создают собственные оценки изменчивости (или неопределенности) уровня навыка игрока, поэтому вам не нужно устанавливать значение K.

Существует очень хорошая реализация TrueSkill на Python по адресу http://trueskill.org, написанная Heungsub Lee, с большим количеством примеров использования библиотеки. Рейтинг игрока включает в себя среднее (представляющее их оценочное умение) и стандартное отклонение (представляющее нашу неопределенность в отношении их навыков).

TrueSkill используется Microsoft для установления партнерских отношений во многих играх Xbox, поэтому он должен соответствовать вашим намерениям сопоставлять игроков с подобными способностями.

+0

Я понимаю, что значение K очень важно для Elo. Тем не менее, я не думаю, что это очень важно в моей системе. Смысл, я не думаю, что я должен сделать его переменной для разных игроков, я думаю, что могу постоянно его менять. Но, я смотрю на любые возможные варианты. TrueSkill кажется большим, но не так просто реализовать, как Elo. Спасибо, что показывали мне это. –