Увидев эту статью я таки решил опубликовать свою, но уже про World of Tanks (WoT). Для понимания, что такое подкрутки или открутки, нужно объяснить базовые механики игры. Перед каждым боем случайным образом формируются две команды из 15 игроков в зависимости от вида техники, которую они выбрали, и далее запускается сам бой. В бою каждая техника обладает определённым количеством хит поинтов, бронепробитием и разовым уроном, который наносится при пробитии, техника считается уничтоженной, если ее количество хит поинтов равно 0. И отличительной чертой WoT является то, что бронепробитие и наносимый урон являются нормально распределёнными случайными величинами. И тут на сцену выходят подкрутки или открутки. Например, игроки считают, что бронепробитие и урон не являются истинно случайными, а определяются по какому-то хитрому алгоритму, чтобы не дать сильным игрокам много побеждать (открутки) и наоборот помогать слабым игрокам делать хоть какие-то результаты, чтобы они не теряли интерес к игре (подкрутки). Вначале, я попытался составить список механизмов, через которые можно реализовать подкрутку и получил следующее: Урон за выстрел: собрать данные просто и следовательно проанализировать Пробитие при выстреле: тут увы возможности собрать данные нет, так как эта информация нигде не отображается Точность: снаряд можно отклонить от идеальной траектории случайным образом Балансировщик: ситуации когда более сильный игрок чаще попадает в заведомо слабые команды и наоборот Добивание противника: противник, который остался на один выстрел, его переживает Данные для проверки на наличие или отсутствие подкруток, я собрал со стримов двух сильных игроков (KorbenDallas - свидетель секты подкруток и the_barbarian - не особо в них верит), игравших на одном и том же танке (T95E6) довольно продолжительное время. Это позволило собрать довольно большие выборки для анализа. В этой статье я обсужу 1, 4 и 5 пункты. Для этого раздела данные были собраны с нескольких стримов и размер выборки примерно составил около 500 значений для каждого из игроков. Как видно на изображении выше, гистограммы для урона с выстрела довольно хорошо ложатся на кривую нормального распределения, что говорит о том, что урон с выстрела скорее всего распределён нормально. Также на основе этих выборок были вычислены среднее значение, среднеквадратичное отклонение. Они составили 400.3 и 32.39 для the_barbarian и 399.38 и 33.3 для KorbenDallas, что хорошо соответствует паспортному урону в 400 единиц. Используя эти данные я оценил доверительные интервалы в "три сигма" и получил следующее: 400.3±4.1 для the_barbarian и 399.38±4.9 для KorbenDallas. Эти интервалы хорошо перекрываются и говорить о том, что один игрок имеет преимущество перед другим не имеет оснований. Таким образом, средние значения скорее всего не являются объектом подкруток и это ожидаемо, так как такие отклонения заметить довольно просто. Теперь займемся подкрутками следующего рода: если много раз подряд выбить высокий урон за выстрел, то игрок попадет в открутку (т. е. последующие выстрелы будет иметь урон гораздо ниже среднего) или наоборот. Для проверки такого рода подкруток придется обратиться к анализу временных рядов. Для временных рядов необходимо построить функцию автокорреляции. Если будут присутствовать значения сильно отличные от соседних, то тогда подрутки существуют. Однако, автокорреляция может заметить только наличие линейной взаимосвязи, что может быть и неверным относительно анализируемых выборок. Поэтому я вычислил «авто взаимную информацию», т. е. взаимную информацию между оригинальным временным рядом и его сдвинутой копией. И получил следующее: Как видно при малой величине сдвига значение взаимной информации мало, но не нулевое. Это объясняется конечным размеров выборок. И по мере увеличения сдвига, размеры выборок уменьшаются (т. к. сдвиг не циклический) и взаимная информация растет за счет малости выборок. Но эти результаты опять говорят о том, что подкруток скорее всего нет. У читателей может возникнуть закономерный вопрос, а насколько чувствительна «авто взаимная информация» к наличию подкруток. Для этого был сгенерирован нечестный временной ряд по следующему принципу: если два раза подряд выпал урон меньше(больше) среднего, то следующий выстрел будет иметь урон больше(меньше) среднего. Как видно по рисунку ниже, даже такое небольшое вмешательство в генерацию случайных величин может быть замечено. Справедливости ради, стоит заметить, что нечестный ряд имеет значение, заметно выделяющееся в начале графика, примерно в 1 из 6 случаев. Как я отмечал ранее, еще одним способом реализации подкруток является балансировщик, т. е. алгоритм ответственный за создание команд. Тут основной тезис заключается в том, что слабых игроков кидает в заведомо более сильную команду, а сильных игроков в слабую. Причиной для появления такого мнения частично служит тот факт, что процент побед игроков находится примерно между 43% и 70%. Меньших значений процента побед можно достигнуть только занимаясь откровенным вредительством, а больших играя во взводе (т. е. всегда вместе и с голосовой связью) из трех сильных игроков. Однако причина кроется скорее в другом. Дело не в том, что балансировщик отслеживает процент побед игрока и старается его вытянуть вверх или наоборот опустить, а том, что все комьюнити танков это огромная взаимодействующая и самосогласованная система. Это будет проявляться, например, в том, что все одновременно проигрывать не могут, т.к. если есть проигравшие, то будут и победители (ничьими можно пренебречь, т.к. их очень мало). Да, есть очень плохие игроки, которые всегда будут команду тянуть на дно. Но, во-первых, танки играются 15 на 15 и их вклад может компенсироваться другими игроками. Во-вторых, против них могут попасться такие же плохие игроки, и кто-то из них должен будет победить, что увеличит их процент побед. И тут появляется замкнутый круг: чем больше будет плохих игроков (процент побед меньше 43%), тем чаще они будут встречаться друг против друга в боях, тогда их шансы на победу будут уже 50 на 50, а это неизбежно приведет к увеличению их процента побед, т.к. до этого он был вообще 43%. Для проверки моих рассуждений я использовал следующую модель. Я взял 1000 игроков (можно взять другое число, это не принципиально). Каждому игроку я присвоил случайное равномерно распределённое число от 0 до 1 (хотя можно взять и другое распределение), которое можно назвать скиллом. 0 означает, что игрок вообще ничего не понимает и будет всегда проигрывать, а 1 то, что игрок всегда будет побеждать. Затем я проводил бои для этих игроков по следующему принципу. Сначала я создавал команду случайных игроков и вычислял средний скилл команды. Ну и у кого скилл оказывался больше тот побеждал. И такие бои проводились много раз, чтобы каждый игрок наиграл около сотни боев. И после этого я построил следующие графики зависимости процента побед игрока от его скила. Как видно для боев 15 на 15, скилл отдельного игрока влияет слабо и очень плохой игрок может иметь процент побед как у хорошего игрока. В случае боев 3 на 3 сильный игрок может вытянуть команду, в то время как слабый потопить её. Также я попытался объяснить асимметрию между нижней и верхней границей на процент побед (43% гораздо ближе к 50%, чем 70%). Для этого предположим, что каждый танк имеет 2000 хит поинтов. Тогда чтобы иметь 50% побед надо наносить в среднем 2000 урона. Если игрок очень плохой, то его минимальный вклад будет 0 урона (и ниже он быть не может, т. к. иначе это уже целенаправленное вредительство). Хороший же игрок напротив не имеет таких ограничений и может наносить 5000 урона в среднем, тем самым покрывая вклад 2.5 игроков и приобретая процент побед отстоящий от 50% гораздо дальше, чем процент побед плохого игрока. Последний пункт, который я бы хотел обсудить, это добивание противника. Часто случается такая ситуация, что у противника 350 хит поинтов, средний урон при пробитии 400, но из-за того, что урон распределен случайно, проходит урон меньше чем 350. И пока я просматривал стримы для набора данных, я иногда обращал внимание на то, как стример реагировал на то, добил ли он противника или нет. И составил вот такую табличку.  добил не добил всего обратил внимание 2 6 8 не обратил внимание 3 2 5  5 8 13 Затем я применил точный тест Фишера для того, чтобы определить есть ли связь между этими событиями и реакцией на них. Вероятность получить такие результаты согласно тесту Фишера составляет 20%. Это говорит о некоторой предвзятости (игрок чаще замечает что он не добивает противника из-за открутки, чем то, что он их добивает), однако доверительная вероятность этого довольно мала и поэтому утверждать наверняка тут нельзя. Мне кажется, что открутки и подкрутки были придуманы из-за того, что случайные величины ведут себя не так как хочется игроку. К примеру, очень часто можно услышать жалобы, что урон три/четыре/пять раз подряд получился (выше)ниже среднего и это из-за (под)открутки. Одна вероятность этих событий не такая уж и маленькая (1 к 8/16/32). Отлично это иллюстрирует следующий пример. Если сравнить последовательность 0 и 1 с равной вероятностью созданной компьютером и человеком можно заметить разницу: в человеческой последовательности 0 и 1 чередуются гораздо чаще, в то время как в компьютерной можно встретить и пять 0 идущих подряд. Попробуйте в этом примере угадать где чья последовательность: 011000110100111010000111000110101001011010101111010 11011111111110110000111101110000000011110111101000 Правильный ответ: первая строка человеческая Вторая строка для игрока, если 1 считать за урон выше среднего, а 0 ниже среднего будет ощущаться так: 110111111111101 (ого подкрутили) 1000011110111 (пока все норм, но должны открутить) 00000000 (ааа, откручивают) 11110111101000 (все опять норм). Еще одно ментальное искажение заключается в том, что негативный опыт запоминается гораздо лучше чем позитивный. Поэтому игрок может не запомнить как у него вчера много раз подряд был урон выше среднего (или он попадал в сильные команды), но прекрасно запомнить как вчера он не смог кого-то добить из-за урона гораздо ниже среднего и проиграл бой. Собственно откурутки и подкрутки и придумываются подсознанием, чтобы оправдывать удачи и неудачи в игре. В этой статье я проверил наличие только некоторых механизмов открутки и пришёл к выводу, что оснований для того чтобы считать их существующими нет (по крайней мере в тех механизмах, что я смог проверить). Можно возразить, что там очень умные подкрутки, которые этими тестами нельзя заметить. Но тут приходит на ум такая аналогия. Кто-то у себя в гараже делает паленые мерседесы, и один раз этот человек продал мерседес, но покупатель заметил, что он паленый. За такое конечно побили, и чтобы в следующий раз не спалиться на этом месте, эта деталь либо заменяется на оригинал, либо делается полностью идентичной оригинальной. При следующей продаже замечают проблемы с другой деталью и её тоже приходится заменить, и так до тех пор пока этот кто-то не начнёт производить полный аналог мерседеса. И возникает вопрос, а зачем очень сильно мучать себя и делать мерседес в гараже, если можно пойти работать на завод мерседеса и получать те же деньги? И к подкруткам возникает такой же вопрос. Зачем возиться с этим, если честный рандом выдаёт аналогичные результаты?