company_banner

Как устроен балансировщик команд в World of Tanks Blitz



    WoT Blitz — это мобильный танковый шутер, в котором игроки сражаются в формате 7 на 7.
    Матчмейкер, или балансировщик это механизм, который на основе очереди игроков, желающих попасть в бой, формирует состав команд.

    У танков есть следующие важные для матчмейкинга параметры:

    • Уровень. В зависимости от уровня, у танков меняются различные характеристики (например, скорость, бронепробитие). На 1-ом уровне — самые слабые танки, на 10-ом — самые сильные.
    • Тип. В WoT Blitz существует 4 типа танков: лёгкий, средний, тяжёлый и ПТ-САУ (противотанковые самоходные артиллерийские установки)

    Самая простая реализация матчмейкера — закидывание игроков в команды случайным образом. Но в данном случае у игроков на низких уровнях не будет никаких шансов нанести хоть какой-то урон, и играть станет неинтересно.

    Требования


    Список требований к балансировщику был сформирован на основе фидбека от игрового сообщества и периодически обновляется по сей день.

    На момент написания статьи для обычных боёв список состоял из следующих пунктов:

    Список требований к балансировщику
    • Разница между максимальным и минимальным уровнем танка не должна превышать единицу, за исключением взводов (то есть если в бою встречаются 10-ки, то там не должно быть 5-ок или 7-ок, только 9-ки и 10-ки);
    • Команды должны быть 7x7, за исключением низкого онлайна (в этом случае можно создавать бои меньшего размера, например 5x5 или 3x3);
    • Команды должны быть зеркально сбалансированы по уровню техники (если в одной команде 3 танка десятого уровня и 4 девятого, то и в другой тоже должно быть 3 десятки и 4 девятки);
    • В обоих командах уровень техники взводов должен быть одинаковым;
    • В командах должно быть не больше 3 танков каждого типа (например, не более 3 тяжей, не более 3 ПТ). Правило работает, начиная с 5-го уровня и выше;
    • Различие числа танков одинакового типа у двух команд не должно быть больше единицы (например, если в одной команде 1 ПТ, то во второй может быть максимум 2 ПТ);
    • Команды должны быть сбалансированы по количеству одинаковых танков, с разницей не более чем в один танк (если в одной команде 1 ИС-7, то в другой — не более 2 ИС-7);
    • Игроки должны попадать только в выбранные ими режимы боя (если игрок включил только «Встречный бой», то он не должен попадать в «Превосходство»);
    • Если игрок купил новый танк, то в первых N боях на новом танке уровни других танков не превышают уровня нового танка игрока (то есть, если у игрока танк 5-го уровня, то в бою не должно встречаться танков 6-го уровня);
    • Игрок должен попадать на те карты, которые у него уже загружены. Часть контента у нас загружается уже после установки игры;
    • Если игрок включил опцию «Единый тип управления» то он должен играть только с игроками, у которых такой же тип управления как у него (если он играет на планшете / телефоне, то он не должен попадать к игрокам с мышками, и наоборот).


    Разработать матчмейкер, особенно с учётом такого количества ограничений, — очень интересная задача. И подходов к её решению может быть довольно много.

    Балансировщик формирующий пары игроков


    Изначально в мобильных танках использовался балансировщик, доставшийся ему от большого брата — танков десктопных. В целом он работал довольно хорошо, но у него было несколько проблем: во-первых, он не давал чётких гарантий по удовлетворению поставленных требований; во-вторых, добавить новые требования было довольно сложно.


    Начало боя

    Поэтому был написан другой балансировщик, который работал по следующему алгоритму:

    • Разбиваем игроков на группы по уровню и типу техники;
    • Из получившихся игроков формируем пары;
    • Раскидываем пары по разным командам: берём каждую пару, первого игрока кидаем в первую команду, второго — во вторую;
    • В полученных командах делаем финальный ребаланс: для удовлетворения большинства требований заменяем часть игроков из одной команды игроками из другой команды.

    Получившийся балансировщик работал быстрее прошлой версии в 5-10 раз и изначально собирал команды, которые соответствовали всем имеющимся на тот момент требованиям. Новые правила добавлялись путём написания дополнительных проходов перебалансировки.

    В начале всё работало хорошо. Но со временем, чем больше правил добавлялось, тем сложнее было написать перебалансировку. Новые перебалансировки должны были в результате своей работы не поломать работу предыдущих. Стало понятно, что это путь в никуда.


    Баг в матчмейкере — собралась команда 9 на 9

    Балансировщик на основе имитации отжига


    В конечном варианте мы остановились на балансировщике, который работает по следующему алгоритму. Все игроки, которые нажимают кнопку «В бой», попадают в общую очередь. Балансировщик в бесконечном цикле делает следующее:

    • Выбирает случайные параметры боя (случайный уровень боя (от 1 до 10), случайный режим, случайную карту);
    • Находит в очереди всех игроков, которые подходят по выбранным выше критериям (зашли в бой на танке подходящего уровня, имеют включённым выбранный режим, имеют загруженную выбранную карту);
    • Пытается сформировать команды, удовлетворяющие всем перечисленным выше требованиям (описание ниже);
    • Если удалось сформировать команду, выкидывает этих игроков из очереди ожидания и стартует бой.

    Для формирования команд из списка подходящих игроков используется метод имитации отжига. Подробнее про сам метод можно почитать тут.


    Поиск глобального максимума методом имитации отжига

    В контексте применения к формированию команд алгоритм следующий:

    • Стартует с двух пустых команд;
    • На каждой итерации случайным образом изменяет состояние команд. Для этого делает одну из следующих операций:

      • Добавляет случайного игрока из списка подходящих игроков в первую или вторую команду (команду тоже берём случайную);
      • Удаляет случайного игрока из случайной команды;
      • Заменяет случайного игрока из списка подходящих на одного из существующих в первой или второй команде;
      • Меняет случайного игрока из первой команды на случайного игрока из второй команды.

    • Получает оценку получившегося состояния. Для этого вызывает оценочную функцию. Функция проходит по списку требований и за нарушение каждого из пунктов увеличивает штраф. Чем сильнее нарушен пункт, тем выше штраф. Например, штраф за команду размером 2x2 будет выше, чем штраф за команду размером 6x6;
    • В зависимости от изменения значения оценочной функции и текущей температуры, определяем вероятность перехода в новое состояние;
    • Продолжаем процесс, пока либо температура не достигнет заданной минимальной, либо значение оценочной функции не достигнет нуля (в этом случае все требования удовлетворены и можно запускать бой).

    Основное преимущество данного подхода: для добавления новых требований достаточно модифицировать оценочную функцию. Нет необходимости писать код, который будет описывать, как именно получить то, что мы хотим. Достаточно добавить правило, которое смотрит на сформированную команду и говорит, хорошо ли она сбалансирована или нет.

    Хороший пример добавления таких правил — рейтинговые бои. В рейтинговых боях в матчмейкере появилось сразу несколько новых правил:
    • Команды должны быть сбалансированы по рейтингу (разница в суммарном рейтинге игроков между командами не должна превышать заданного значения);
    • Разница в рейтинге между игроками должна быть минимальна (игроки из бронзовой лиги не должны попадать в бои с игроками из бриллиантовой).


    Пример профиля игрока из бриллиантовой лиги

    Первое правило реализовано путём модификации оценочной функции: был добавлен штраф за превышение максимально допустимой разницы в рейтинге. Второе правило реализовано путём изменения функции, которая вытаскивает подходящих игроков из очереди.

    Недостаток данного подхода — медленная скорость работы. По сравнению с предыдущим вариантом, текущий стал работать приблизительно в 10 раз медленней, даже несмотря на ряд оптимизаций. Кстати, про оптимизации. Большая часть сервера (кроме сети и физики) для игры написана на Python. Балансировщик был переписан на C++ и распараллелен на много потоков. Из Python в плюсовый код прилетает запрос на формирования команды. Далее каждый из потоков независимо стартует метод отжига. Как только какой-то поток находит решение, остальные потоки останавливают процесс поиска, и найденное решение возвращается в Python.


    Время ожидания и размер очереди на RU сервере (5 секунд в обычных боях и 10 в рейтинговых)

    По мере роста онлайна росла и нагрузка на балансировщик. Этой осенью, когда онлайн на RU сервере добрался до 120 тысяч (во время ивента Mad Games), балансировщик перестал справляться. В качестве временной меры мы отключили часть правил, это позволило уменьшить нагрузку. Чтобы избежать подобных проблем в будущем мы сделали матчмейкер распределённым.

    Рейтинговая система



    Лучшие игроки в бриллиантовой лиге, 21 апреля 2019

    Во многих ММО играх, кроме случайных боёв, существуют также и рейтинговые / ранговые / etc. Основная идея данного режима: противники ищутся не случайные, а подходящие по скилу. Если ты скиловый игрок, ты будешь играть с такими-же скиловыми игроками, и наоборот, если ты не умеешь играть, ты будешь попадаться против таких же новичков.

    В начале сезона игрок проходит серию калибровочных боёв по результатам которых определяется его стартовая позиция. Затем, в зависимости от дальнейшей успешности игры, игрок либо поднимается, либо опускается в рейтинге. Рейтинговая система в Блице создавалась, в первую очередь, для правильной балансировки. Она заточена на скилл игроков и практически не зависит от количества сыгранных игр.

    Для реализации рейтинговых боёв понадобилось решить сразу две задачи. Во-первых, нужно было выбрать рейтинговую систему (по какому принципу начислять игрокам рейтинг). Во-вторых, нужно было доработать балансировщик, чтобы он собирал бои с учётом ограничений по рейтингу.

    Основное требование к рейтинговой системе — возможность максимально точно определить уровень игрока. Чтобы оценить, насколько точно работает та или иная рейтинговая система, был создан симулятор, на вход которому подавали историю боёв и выбранную рейтинговую систему, а на выходе получали точность работы системы.

    Точность считалась следующим образом:

    • Всем игрокам присваивался стартовый рейтинг;
    • По результатам каждого из боёв рейтинг игроков, участвовавших в этом бою, пересчитывался по выбранной системе;
    • Перед каждым боем система пыталась предсказать, какая из команд победит;
    • По итогу подсчитывался процент боёв, для которых система дала правильное предсказание.


    Наиболее популярные системы расчёта рейтинга: winrate, Elo, Glicko, TrueSkill. Winrate — обычный процент побед. Elo — система подсчёта рейтинга, изначально созданная для игр с участием двух человек (шахматы, etc). В этой системе игроку за победу / поражение даётся / отнимается некоторое количество очков в зависимости от рейтинга противника. Glicko в целом похожа на Elo, но кроме этого учитывает, сколько времени игрок был не активен. TrueSkill — запатентованная рейтинговая система от Microsoft, в которой у каждого игрока есть два параметра: рейтинг и уверенность системы в этом рейтинге.

    Во время разработки первой версии рейтинговых боёв мы рассматривали winrate и Elo (несколько вариантов, адаптированных к командной игре), а также простую систему Score (в которой игрокам всегда давалось фиксированное количество очков рейтинга за победу и отнималось за поражение).



    Наилучшие результаты показала система Elo, в которой Ra — рейтинг игрока, а Rb — разница между суммарным рейтингом команды противника и суммарным рейтингом команды игрока за исключением самого игрока.

    Основные трудности, с которыми мы столкнулись после запуска:

    • слишком большой разброс в рейтинге между игроками;
    • плохо предсказуемая скорость, с которой игроки набирают рейтинг (достигают лиги).

    Первую проблему полностью решить не удалось из-за того, что скиловых игроков слишком мало, им приходится долго ждать, пока начнётся бой, и очень часто видеть в своих командах игроков послабее. Для смягчения эффекта мы сделали доступными рейтинговые бои только в прайм-тайм (то есть в то время, когда на серверах играет максимальное количество людей).

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

    Также мы пробовали различными способами улучшить качество рейтинговой системы. В первых версиях для изменения рейтинга мы использовали только информацию о победе / поражении. Но у нас командная игра, и не всегда хорошие действия одного конкретного игрока приводят к победе всю команду. То есть даже в случае, если игрок хорошо играл, а команда проиграла, этот игрок получал такой же минус к рейтингу, как и все остальные игроки. Чтобы это предотвратить, мы стали пробовать учитывать индивидуальные действия игрока в бою.

    Для этих целей мы пробовали применить машинное обучение: собрали различные факторы и пытались обучить модель предсказывать победу / поражение команды по действиям игрока в бою, чтобы потом использовать эту модель для определения коэффициента бонуса к рейтингу (то есть если команда проиграла, но поведение игрока было похоже на поведение игроков-победителей, давать таким игрокам дополнительный бонус).


    Игрок из победившей команды который сыграл хорошо получил +40 к рейтингу. А который плохо всего +10

    Мы смогли построить хорошую модель, которая показывала результаты существенно лучше текущей, но возникла одна сложность (которая довольно часто всё портит в задачах машинного обучения). Модель была хорошая, но у неё иногда бывали ошибки, которые хорошо заметны людям. Периодически возникали ситуации, когда игрок, который с точки зрения человека показал хорошие результаты — с точки зрения модели получал низкий бонус, и наоборот.

    В итоге мы отказались от ML-модели и взяли более простую ручную формулу. Эта формула учитывает только боевой опыт без учёта бонусов за победу, x2 и прочих. Она даёт весьма достойный результат, хоть он и слегка ниже, чем у ML модели.

    Заключение


    • Балансировщик на основе метода имитации отжига позволил нам перейти от описания решения (как именно собирать команду) к описанию требований (какие условия не должны нарушаться);
    • В командных рейтинговых боях хорошо себя показала модифицированная система Эло, учитывающая индивидуальные действий игрока в бою;
    • Не всегда стоит применять сложные методы машинного обучения (особенно, когда важна интерпретируемость и понятность результата человеком).

    Мы продолжаем развивать и улучшать балансировщик. Мы практически победили негативные впечатления от несбалансированности по классам. Основные проблемы, на которые обращают внимание наши игроки, — это несбалансированность по скилу, турбосливы и афк игроки. Это серьёзный вызов, мы продолжаем работу над балансировщиком в этих направлениях.

    Если у вас есть какие-то вопросы / предложения по балансировщику в WoT Blitz, отписывайтесь в комментариях (или на нашем форуме).
    Wargaming
    Компания

    Комментарии 30

      +19
      Основные проблемы, на которые обращают внимание наши игроки, — это несбалансированность по скилу, турбосливы и афк игроки.

      А в десктопных танках, кораблях, и самолётах — этих проблем нет, и поэтому там никакой балансер по скиллу игрока мы вводить не будем (с) Wargaming.
        +7

        Иногда надо пострадывать. (с) Кто-то с Wargaming

          0
          Ну… Боты не жалуются )
          +4

          Про патент Кислого расскажите

            0
            Не расскажут да и не актуален он, теперь это называется режим угнетения игрока(но цель таже) и грузит балансировщик именно он и причина турбобоев в основном он и именно по этому с турбобоями Wargaming не борется. Именно из-за этой гадости я бросил играть в танки.
              +1
              А можно тем, кто не в теме «мира танков», совсем вкратце?
                0
                Совсем вкратце: патент о системе, которая периодически создаёт игрокам «льготные условия», давая им выиграть (даже если у них всё очень плохо с руками). Популярная теория заговора говорит о том, что именно такая система приводит к тому, что в некоторых боях у тебя «не летит», «не пробивает», и тому подобное, а тебя, наоборот, выносят одной левой, потому что система так решила.
                В объективной реальности, впрочем, это всё спокойно объясняется статистикой, потому что участия RNG в играх картошки действительно много — иногда тебе в любом случае не будет везти.

                Официальный ответ WG — «патент это патент, это не означает, что мы используем такую систему в наших играх».
                  +1
                  Но и не означает, что не используем
                +1
                турбобоев

                В контексте считал нецензурную версию, удивился, перечитал.
                  +1
                  Вранье. Не знаю, как в ВоТ, но у нас ничего подобного нет. И с турбосливами, как и турбовинами мы боремся. Просто это совсем не просто. Как только начинаешь исправлять данную проблему, обязательно начинает страдать какая-либо группа игроков.
                  Например, если пробовать собирать команды с похожим суммарным процентом побед, то у папок(65+%) резко их драгоценный процент начинает ползти к 50. И так во всем.
                  Не стоит думать, что это так просто исправить и мы ничего не пробуем.
                    +1
                    Существоване этого мифа связано с психологией. Есть такое понятие "Иллюзорное превосходство".
                    По простому: большинству «кажется» что они круче чем половина остальных игроков. 70% считает что они в топ 25%.
                    Но показатели статистики этому ощущению «противоречат», поэтому показатели статистики врут, а если статистика «не врет», то сами бои «подкручены» и только по этому Я имею не 70% винрейт а всего 48%.
                    Даже на Логику тут плевать:
                    Какая разница ВГ, выиграет команда один или команда два? Но каждому игроку проигравшей команды нужно переложить отвественность за слив на когото.
                    Кроме того наличие игроков с винрейтом выше например 70% только доказывает что угнетения хороших игроков нет. Хотя конечно так «хочется верить» что из 7 миллионов активных игроков выбрали именно тебя, чтобы угнетать.

                    Проблема быстрых(ака «Турбо») боев вообще из пальца высосана. На другом конце ее — 15 минутное стоялово и ничья (а это в контексте игры — поражение обеих команд). Среднее время боев не менялось кардинально.
                    Я вот лично ничего плохого не вижу в 2х быстрых победах вместо одного 15ти минтуного поражения. (но это лично мое мнение).
                      +1
                      Некоторые люди еше обладают наблюдательностью, особенно когда смотришь чужую запись.
                      И когда 10 — 20 — 30 раз видишь как за 2 первые минуты боя HP одной команды почти не меняются, а HP другой команды проседают на 1/3, закрадывается некоторые подозрения.
                      Еще более наблюдательные замечают, что выстрелы 1 команды чудным образом почти все дают пробития, а выстрелы 2 команды чудным образом почти все дают не попал/попал-непробил/рикошет, особенно «радуют» в одном бою несколько попаданий в пушку врага без урона.

                      Простая разница — рак пока играет донатит, что-бы рак не ушел ему должно быть интересно, если его постоянно будут убивать как в спортивных играх то он уйдет.
                        0
                        Чтобы не попадать в пушку врага, нужно не целиться в пушку врага.
                        Обычно это так работает.
                        А попадание в пушку, на сколько я помню, всегда идет без урона. Плюс там маска оридия, все дела.
                          +1
                          В ВоТ не работает, в ВоТ можно засунуть свою пушку во вражеский танк и не попасть(елка пока не покалечили), можно попасть в зад танку с броней 25 мм фугасом с минимальным пробитием 37 мм и не пробить(было лично у меня).
                          0
                          Все что вам кажется очевидным, в реальности может таким не являться. И лучше проверять и подкреплять наблюдения статистикой. Все-таки это айти ресурс, а не посиделки у бабушек.
                          Например:
                          Средний % побед 49% (с числом боев более 1000).
                          По вашей логике(угнетаем хороших игроков, создавая условия плохим), таких игроков просто не должно существовать:
                          MeanMachins и apojero

                          Давайте обсудим второй аспект, упомянутый вами: донат.
                          Премов 8го уровня(основной донат) у 47% (2% ниже среднего) игроков в среднем 5 (из числа тех у кого есть премы),
                          А у 51%(2% выше среднего) игрока премов 8го в среднем 15.

                          Важно понимать, что нельзя просто взять и поднять % побед какой-то группе игроков. Это можно сделать только за счет того, что у какой-то другой группы игроков надо будет этот % отобрать.
                          Но вы считаете что ВГ будет топить 51% игрока, ради того чтобы вытянуть 47%го в 48% и чтоб он там купил в среднем на 1.8 танка больше, а игрок упавший с 51% до 50% — не докупил 2.4 танка?
                          С этой позиции я просто не вижу Логики в вашем ощущении…
                            +1
                            От доната зависимости не видел, а вот от ситуации в бою есть(во всяком случае раньше было) и от цепочки действий(прокачка, эпичный бой и т.д.)

                            С тысячами боев статистики у меня нет, но есть статистика с 2мя одинаковыми танками разных веток и она примечательная:
                            Первым был советский Т-34 (первая моя ветка)
                            117 боев
                            53% побед(совпадает со средним по аккаунту)
                            коэффициент урона 0,92
                            коэффициент уничтожения 0,86
                            Вторым был китайский Type Т-34 (вторая моя ветка, играл чуть «лучше»)
                            285 боев
                            42,5% побед !!!???
                            коэффициент урона 0,93
                            коэффициент уничтожения 1,05

                            И мегапроизводительность(~10 боев/сек на сервер) балансировщика наводит на те же мысли.
                              0
                              Мне всегда казалось, что число боев в минуту зависит от количества игроков. Но если у вас другие мысли, то выскажете их. Я не могу залезть к вам в голову и что-то угадать.

                              Кроме того что статистика «замечательная» она еще и не репрезентативная.
                              1) Число боев. Доверительный интревал при всего ста боях (для % побед) очень большой. (Серия из нескольких побед/поражений исказит картину.)
                              2) Бои были проведены в скорее всего в разное время, и таким образом условия проведения были разные…
                              Далее: небольшой анализ вашей статистики
                              Судя по всему вы провели эти бои в 2013 году, в год своей регистрации, и у вас было мало опыта. Так что похоже что бои на китайце намного ближе к вашему тогдашнему уровню скила (по урону и фрагам вы делали 0.7 от ХП своего танка, тоесть не отрабатывали свой танк).
                              И вы, похоже, к моменту игры на китайской ст, научились играть на ПТ. И играли на ней как на пт — издалека постреливая. На советской же были на острие атаки. За счет этого у вас и выше % побед на советской ст (но весомый вклад, я считаю, внесла и случайная серия из n побед, но это мое личное мнение).
                              То что вы играли как пт, видно по: очень высокий % выживания в победных боях, малый % попадания, малое количество засвета, много очков защиты/захвата.
                              На советской же вы выживали намного реже, выше % попаданий и пробитий.

                              Что мы имеем в сухом остатке:
                              1) Вы утверждали, что хороших игроков угнетает, а плохих наоборот усиливает. Я вам показал 2 аккаунта с 70 и 30% и огромным числом боев на них, что ставит под сомнение какое-либо угнетение в таком формате.
                              Ваш аккаунт тому подтверждение номер два, в 1 год вас то якобы «угнетает» то якобы нет.
                              2) В качестве того, что ВГ выгодно так делать — вы предположили что донатят игроки больше(так и есть). Но рак на 2% хуже среднего донатит в 3 раза меньше того, кто играет на 2% выше среднего. Так что явно невыгодно добавлять победы раку за счет хороших игроков.
                              3) Ну и как я не зря привел "Иллюзорное превосходство". Ваши 53% набиты в песке на 4 уровне… С увеличением уровня боев у вас % резко падает, что заставляет вас думать, что вас стали «угнетать», хотя вы явно играете лучше большинства. Но дело просто в более высоким требованиям к личному скилу на высоких уровнях.
                                0
                                Ох уж эти «метеорологи» «Обнаружено машин противника» 1,13 у типа Т-34 и 1,1 у Т-34, на «Объект 268» имею 436 боев и 53,9 % побед, до очередной модификации «системы угнетения» было 56 % побед.
                                Играл без према и голды, специально не фармил.
                                Как и любой игрок WoT которому надоело кормить WG последние годы я играл мало и в основном на фановых танках — Ёлке, ФВ304, ИСУ-152, е-25, СУ-100 пока WG все не поломал.
                                Хорошие игроки вообще мало донатят им всего хватает с глобалки, рот и разных инвайтов WoT.
                    +2
                    Ахаха. А как же патент кислого?)
                      +3

                      Что мешает балансировщику закидывать в первую очередь игроков в бой не только по своему уровню техники но и на какой уровне развития эта техника находится сток или топ? Ведь там различия существенные...:( несмотря на один тот же уровень, а уж потом смотреть на "уровень" игрока.

                        +2
                        Хе, если не заставлять страдать на стоке, то кто будет покупать за золото перевод опыта, чтобы быстрее получить типовую технику? ;)
                        +1
                        Неиллюзорных картоха отхватила в комментах) Если серьезно, то было бы интересно в общем блоге почитать о механиках больших танков. А то уже полгода блог не обновлялся (деньги закончились)?
                          0
                          Спасибо за интересную статью! Есть несколько вопросов:
                          1. В статье не сказано про ослабление требований к качеству матча со временем (например, больше очков можно набрать) — применяется ли в каком-то виде или благодаря CCU нет необходимости?
                          2. Судя по графику у вас в очень большом промежутке CCU время сбора матча держится на уровне 5 секунд и только в момент минимального повышается до 10 секунд. Это могу объяснить только искусственным ограничением минимального времени сбора матча в 5 секунд (ну или гибкому изменению требований по качеству, но в это слабо верю), когда после 5 секунд ожидания матчи собираются обычно мгновенно для игроков. Но это приводило бы к увеличению очереди в момент пика CCU (каждый должен выждать 5 секунд — очередь линейно бы зависела от CCU). Т.е. не могу объяснить два этих графика одновременно — можете помочь? )
                          3. Длина очереди выходит на плато на уровне 300 игроков — это подозрительно много для игры 7х7. Это из-за очень сложных правил или есть какие-то банальные причины (несколько версий клиентов несовместимых на одном ММ, или входят разные режимы в эти 300 человек)?
                          4. Правильно ли понимаю, что стоимость сбора одного матча в таком вариант на несколько порядков выше, чем в предыдущем, поэтому пришлось так распараллеливать и во время пиковых значений ослаблять правила? Т.е. во время пикового CCU у вас начинала расти очередь И увеличиваться время ожидания игроков, т.к. ваш кластер ММ не мог подобрать грубо говоря больше 1 матча в секунду?
                            0
                            1. Ослаблений требований со временем нет. Требования завязаны исключительно на CCU — так проще разбираться с проблемами. Когда-то было отключение требований со временем и было сложно понять, то ли это баг в матчмейкере, то ли просто игрок долго ждет.
                            2. На графике показано среднее время, на самом деле время прыгает от почти моментального сбора до 15-30 секунд в худшем случае. Искусственного времени ожидания в 5 секунд нет.
                            3. Из за требований. Основное — то что по сути вся очередь разбита на 10 уровней, игроки пересекаются только с соседними. То есть если пришло 13 игроков 10го уровня и 13 игроков 8го уровня — бой мы запустить не сможем, нам надо 14 игроков и там и там. Ну и есть куча дополнительный требований. Благодаря высокому онлайну даже с учетом такой большой очереди время ожидания остается низким.
                            4. Да, всё верно. Такой подход довольно дорогой в плане производительности.
                              0
                              А честный балансировщик в игре есть? Ну что бы кто угодно мог сойтись с кем угодно?
                            +1
                            Разницу в рейтинге между игроками внутри команды можно как-то в лосс вытащить, например, внести туда дисперсию рейтинга в команде.

                            ML модель рейтинга тоже можно было бы довести до ума — добавить регуляризации, например.

                              0
                              А зачем это делать?
                              Любой баланс по скилу(неважно как вы его считаете) это отрицательная обратная связь и приведет всех к идентичным показателям (например винрейту в 49%, если за скилл взять %Побед).
                              И нечем будет меряться, а так — % отличный показатель скила в общем случае.
                              0

                              А теперь о действительно важном: когда будут выдавать крабовые береты?

                                0
                                del
                                  0
                                  когда будут выдавать крабовые береты?

                                  Самым заслуженным и выдающимся ракам?

                                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                Самое читаемое