Anti-Daun0312 сказал(а):
↑ От нечего делать решил написать свой алгоритм поведения типичной рейтинговой системы с получением фиксированных очков рейтинга в качестве результата игры (как в доте +30 -30). Алгоритм легко можно поменять как и для ELO-системы, но не о ней сейчас речь.
1. На вход даем количество игроков (кратное 10, разумеется) и стартовый рейтинг. Например в доте он когда-то был 3500. Я же ввожу 3250 просто потому что хочется. Из этих данных формируется список игроков.
2. Начинают собираться игры среди игроков с максимально близким рейтингом. То есть за одну итерацию каждый игрок играет ровно 1 игру и получает за неё +30 или -30 (всё как в доте)
3. Для определения победившей в игре стороны у меня есть два алгортима:
а) чистейшие 50%: генерируется случайное из 2 чисел. выпало одно - победа первой пятерке, выпало второе - второй. (на видео 0:00-6:55)
б) более сложный алгоритм, в котором я пытался добавить значение "Личного скилла", которое как раз определялось заработанным рейтингом в предыдущих играх: я считал суммы рейтинга всех команд, в 10% случаев победу получала команда с более низким средним рейтингом, в 20% с более высоким и в 70% использовался алгоритм из пункта А. (на видео 7:12 - 8:19)
4. Меняем рейтинг всех игроков в зависимости от результата их игры.
5. Повторяем пункт 2 до бесконечности
Видео-демонстрация работы алгоритма
алгоритм 3.а 0:00-6:55, алгоритм 3.б 7:12 - 8:19
Код https://pastebin.com/PGbMPLqM
Итог: распределение рейтинга для людей знающих математику не стало сюрпризом, но некоторых, возможно, повергло в шок
ну или просто я не дописал подкрутку чтоб вычислять сильных игроков и специально им даже за победы давать -30 дабы удерживать на одном максимально низком рейтинге чтоб они наконец дропнули игру
на все вопросы отвечу ниже, готов провести дополнительные эксперименты с изменением/дополнением алгоритма, но результат, а именно распределение всё равно останется прежним как ни крути
не нужно переносить в раздел погромирования, она касается именно рейтинговой системы дота 2
Нажмите, чтобы раскрыть...
50% - когнитивное искажение, вызванное тем, что если психологический рейтинг человека 3к, то на 2500 он вынесет всех вперед ногами, а на 3500 вперед ногами вынесут его. Вот и все 50%, пока он не начнет потеть, искать гайды, тренироваться прям целенаправленно - его рейтинг так и будет колебаться то вверх то вниз.
Никому не нужно накручивать вам винрейт, потому что он накручивается естественным путем сам по себе, если вам кажется, что у вас работает 50% - это доказательство лишь того, что вы остановились в развитии скила в доте, не более того.
Ну а по сабжу: автор, напоминаешь меня на первом-втором курсах универа, по программированию. Круто, что ты это сел, написал, и даже получив от этого удовольствие решил похвастаться другим, тут конечно это не оценят, но раз тебе это принесло удовольствие - значит есть смысл продолжать тренить программирование и становиться успешным 
P.S.:
1. алгоритмы сортировки нафиг никому не нужны, только на собесе спросят, а на деле ты никогда даже рукописный не заюзаешь в 99% случаев
2. выражения типа
if (victoryIfSame == 1) {
return true;
} else {
return false;
}
сократи до
return victoryIfSame == 1; да и victoryIfSame можно сделать bool, а не int, просто при рандоме напиши var isSame = random.Next(1) == 1;
3. не злоупотребляй while циклами без необходимости, они могут привести к вечному циклу, а это неприятно.
В остальном всё еще впереди у тебя, будет ООП ещё, там много интересного ждёт). Удачи
