Pull to refresh

Comments 29

А подробнее про правила, по которым идёт игра? Длительность матча? Забавные истории?
Для рейтинга важно лишь чтобы была возможно определить кто победил или ничью. Мы играем до 7 голов. Но можно играть и по времени. А вообще мы стараемся придерживаться вот этих правил — http://rbk.moy.su/rules/short-rules.pdf
И рейтинг, кстати, необязательно использовать для футбола. Отлично подойдут любые игры для двух: теннис, го.

Про забавные истории я подумаю :)
Мы играем до 7 голов
Вот мой взгляд как раз за число 7 и зацепился, потому и спросил.
И сколько же в итоге длится матч в среднем?
Не пробовали анализировать матчи разных игроков с одинаковым счётом по длительности? У кого сколько времени уходит на забитие гола? Понимаю, что это всё ситуационно, но может есть какая-то корреляция с уровнем игрока?
Глубокого анализа мы не делали. Хотя переодически возникает такое желание. Опишу свои ощущения по времени игры.
Матч в среднем 5-10 минут. Но если столкнутся два сильных игрока, играющих от обороны, и в воинственном настроении, то можно дотянуть до 15-20. Скорее всего время матча коррелирует со стилем игры. На превью, кстати, фотография нашего стола. И там видно, что игроки широкие. В результате, с первой линии в ворота забить непросто, потому что вратарь и защитники очень хорошо закрывают ворота. Нужно делать какую-нибудь комбинацию, разыгрывать мяч на первой линии, чтобы обмануть соперника. Либо очень популярно рандомом от борта из своей обороны.
Мы еще практикуем играть двое на двое. Тогда один игрок встает только на защиту, второй только на нападение. И такие матчи переваливали у сильных игроков за пол часа. И это было больше испытание на износ. Потому что слегка наклонившись(большинство парней высокие) простоять пол часа — физически сложно.
<совет>Шикарнейший повод выпить за счет компании.</совет>
Скорее всего время матча коррелирует со стилем игры.
А с алкоголем в крови? Во время турниров нет какой-то хитрой тактики, построенной на интригах и доливании?
На второй турнир я принес бутылку вискаря со словами «мне трезвые соперники не нужны». Но не прокатило. У нас к турнирам очень серьезно относятся и на такой слабый развод не ведутся. Разве что слегка снять напряжение. Кстати, да, во время турнира очень сильно меняется поведение. Из-за переживаний тяжело делать что-то натренированное и сводится все к удару посильнее. Алкоголь скорее после турнира или для зрителей.

Еще очень популярен способ выигрыша — вывести соперника из себя подколами, поддевками. Так что игра тренирует еще и стойкость к язвительным комментариям.
«Для рейтинга важно лишь чтобы была возможно определить кто победил или ничью.»
то есть 7:0 и 7:6 — это одинаково влияет на рейтинг? IMHO не совсем верно…
Ниже предложили модификацию — https://habrahabr.ru/post/308920/#comment_9785216. И она мне нравится
За теорию, спасибо конечно, но код…
Логика в контроллерах, станная структура проекта и можно продолжать дальше, если, конечно, вашей целью не было накидать небольшой прототип.
Про Unit тесты сто раз уже говорили, что вы фактически тестирутете функционал EntityFramework, у которой есть свои юнит-тесты.
Или вы ей не доверяете?
Я очень положительно отношусь к критике. Постараюсь использовать ее, чтобы стать лучше как специалист. Поэтому не могли бы вы более подробно расписать ваши претензии с объяснениями, чем это плохо? А то сейчас вы как-то необоснованно набросили. Спасибо :)

Про Unit тесты сто раз уже говорили, что вы фактически тестирутете функционал EntityFramework, у которой есть свои юнит-тесты.

1) Мне кажется вы невнимательно читали. Иначе бы у вас были более серьезные претензии ;)
2) Конкретно где там в юнит тестах тестируется EF
попробуйте параллельно внедрить glicko2 как эволюцию эло и первого глико.
Система отличается добавлением двух параметров — отклонением рейтинга и его волатильностью, за счет чего: а) мы можем сказать насколько рейтинг игрока реален на текущий момент (очевидно, что рейтинг игрока, сыгравшего менее 5 матчей еще не стабилизирован и не доверителен), б) рейтинг игрока намного быстрее стабилизируется, чем рейтинг по эло.
Мы пробовали glicko2. Не понравилось. Мне кажется, что в glicko2 очень важно, чтобы игроки играли примерно одинаковое количество матчей. Нам тяжело этого достичь.
как раз наоборот. глико менее важно кол-во матчей, чем эло. плюс он практически не подвержен такому https://habrahabr.ru/post/308920/#comment_9784950 чем меньше матчей сыграл игрок, тем сильнее будет колбасить его рейтинг, и тем быстрее он найдет именно свой рейтинг. Соответственно соперники получают разное кол-во баллов за игру (сумма не равна 0), что опять же более справедливо — по-разному оценивать соперников. В эло в расчет принимается только сила соперника (по факту разница в рейтингах), в глико же кол-во матчей с начала «карьеры» и стабильность. Если эло-игроку понадобиться матчей 10, чтобы добраться с 1400 (как я понял, ваш дефолт) до своих 2000 очков, на которых его рейтинг стабилизируется, то глико-игроку понадобиться матча 3. (цифры условные, примерные, следующие из многолетнего опыта увлечения подобными рейтингами).
Кому-то удалось забраться на пятое место, достойно проиграв (со счётом 3:7) всего в одном матче, забавно.
А вы внимательный :) Есть такой маленький недостаток у эло. Если игрок сыграл мало матчей, то он будет очень близок к стандартному рейтингу 1400. И его положение необоснованно. Теоретически можно прятать игроков, отыгравших мало матчей.
на самом деле это не маленький недостаток, а достаточно большой. Рейтингов существует очень много, и они все показывают похожую точность (на достаточной базе). Вся соль именно в «тюнингах» — как быстро рейтинг будет реагировать на сторонние обстоятельства (точный рейтинг со старта, временная инфляция, другие уточняющие показатели). Эло был одним из первых рейтингов, основанных не на фиксированных очках, и оттого самым «дубовым», хоть и на голову выше традиционных очковых рейтингов.
Подсчет очков получаемых/теряемых в случае победы/поражения при игре с конкретным игроком в следующем матче. Надо же как-то планировать с кем лучше сейчас играть;

Как лучше организовать вычисление шансов для каждого соперника, с учетом последних результатов. Чтобы при прочих равных играть с тем, против кого 000111, а не тем, против кого 111000? И потом шанс соотнести с получаемыми очками, для того чтобы получился ранкинг пригодный для накопления Эло. Есть идеи/решения?
Надеюсь, я правильно понял ваш вопрос.
На самом деле, каждый игрок интуитивно оценивает вероятность победы над конкретным игроком в данный момент времени. И может посмотреть сколько он очков получит/потеряет в случае победы/поражения и на основе этого принять решение.

Интуитивное представление можно вполне формализовать. Посчитав, например, количество побед/поражений за последние матчей 10. И на основе этого посчитать мат ожидание получаемых очков.
А когда 2х2 играете, как идет подсчет рейтинга для каждого игрока?
Сейчас рейтинг для двух не считаем. Раньше пробовали считать для команд. Но есть проблема, что команд получается очень много. Фактически, комбинация всех возможных вариантов 2х игроков из компании. То есть для маленькой компании еще ок, но как начинается рост количества игроков, то уже совсем неинтересно. И я согласен, что надо пытаться вводить рейтинг для каждого командного игрока, но удачного ничего придумать не получилось
По нашим — нет. Но система вполне допускает, что будут заноситься матчи с результатом — ничья. Вдруг, кто играет по времени, а не до конкретного счета.
Мы используем рейтинг Эло для подсчёта индивидуальных рейтингов игроков в реальном футболе (который бегать-мяч-поле-команда). Используем модификацию для футбола https://ru.wikipedia.org/wiki/Футбольный_рейтинг_Эло. В ней учитывается разница мячей, так что игра идёт не только за победу, но и буквально за каждый мяч.
забавно, как раз 2 года назад на ASP.NET MVC написали прилагу с рейтингом эло для кикера. Я аж сначала подумал, что кто-то из наших запостил, настолько похоже ))

Интересно, как изменится распределение рейтинга, если все константы в формуле


Ea = 1 / (1 + 10^((Rb - Ra)/400))

заменить на натуральные, а изначальный рейтинг игроков положить равным 0? Ну т.е. 10 заменить на e, а коэффициент 400 вообще убрать:


Ea = 1 / (1 + e^(Rb - Ra))
Ra’ = Ra + (Sa - Ea)
Вы описали логистическую кривую для Ea. Я думаю что ее как раз брали за основу. И идейно ничего не поменялось. И там и там для подсчета используется сигмоида.

Но все-таки совсем без коэффициентов не получится. Как я писал, для Эло коэффициенты подобраны таким образом, чтобы у игрока с преимуществом в 200 пунктов вероятность победы была приблизительно .75. Пример: игрок, одержавший 25 побед подряд над игроками его уровня, с вероятность .75 одержит победу над игроком среднего уровня.

В случае с предложенным подходом, если встречаются два игрока с одинаковым рейтингом и один из них выигрывает, то вероятность его победы в следующем матче с тем же игроком уже выходит приблизительно .75.
Как я писал, для Эло коэффициенты подобраны таким образом, чтобы у игрока с преимуществом в 200 пунктов вероятность победы была приблизительно .75.

А зачем эта искусственная информация? В "натуральной" формуле тоже будут какие-то пункты и вероятности, но надо считать.

Человекочитаемый формат.
Sign up to leave a comment.

Articles