Основа ММО-игры "World of Tanks" - бои двух команд, состоящих из 15
боевых машин каждая. Машины поделены на классы (лёгкие, средние и
тяжёлые танки, противотанковые самоходные орудия и самоходная
гаубичная артиллерия), каждый класс включает в себя 10 уровней
"развития" техники. Чтобы "случайные бои" (основной игровой режим)
были интересными для игроков, необходимо выполнение трёх важных
условий автоматического подбора танков:
Равенство возможностей боевой техники двух противоборствующих
команд;
Разнообразие составов команд;
Непредсказуемость хода боя и его итогов.
Эту задачу и выполняет "балансировщик" - модуль серверной части
World of Tanks, который добавляет танки в команду, делает их
равными по "силе" и отправляет команды в бой. Балансировщик
появился в начале закрытого бета-тестирования игры (на альфа-тесте
его не было вообще). В самом первом его варианте уровней боёв было
всего два ("песок" с уровнями танков 1-2 и общие бои 3-10 уровней).
Затем ему на смену пришёл более сложный балансировщик, и появилась
первая таблица распределения танков по уровням боёв. В настоящее
время доступна таблица для обновления 0.8.3 (см. первое сообщение
темы).
Бои в World of Tanks поделены на двенадцать уровней, первые 10 из
которых примерно соответствуют уровням боевых машин в деревьях
прокачки. Например, тяжёлый танк 4 уровня, в соответствии с
вышеприведённой таблицей, может попасть только в бои 4 и 5 уровня.
Балансный вес - это скрытый численный параметр, определяющий боевую
эффективность каждой машины. Он связан с типом машины, её уровнем и
ролью в бою.
Работа балансировщика "случайных боёв" базируется на следующих
принципах:
Любая боевая машина может попасть в бои только своего уровня (см.
таблицу), за исключением взводов;
Место машины в списке команды определяется её балансным весом;
Составы команд подбираются на основе статистики за прошедшие
полчаса;
Суммарный балансный вес двух противоборствующих команд различается
не более, чем на 10%, за исключением особых случаев;
Суммарный балансный вес арт-САУ двух противоборствующих команд
различается не более, чем на 20%, количество - не более чем на 1,
число арт-САУ на команду - не более 5;
Чем больше конкретная машина ждёт своей очереди, тем более высоким
становится её приоритет, а если ожидание превышает 1 минуту,
балансировщик стремится отправить в бой именно её.
Если обе уже собранные команды не удовлетворяют условиям баланса,
они расформировываются и набираются заново.
Балансировщик работает с очередями боевых машин. Каждому уровню и
типу боёв соответствует своя очередь, всего очередей 36 (12 уровней
боя, 3 различных режима боя). Статистика боёв собирается по каждой
из очередей отдельно, причём для арт-САУ собирается своя
статистика. На основе собранной статистики для каждого из 15 мест в
команде рассчитывается примерный балансный вес и балансировщик
подбирает машины в команду, ориентируясь на него.
Рассмотрим работу балансировщика на примере. Был выбран
американский тяжёлый танк Т14, отличающийся тем, что он может
попадать в бои только 2 уровней - 5 и 6 уровень. Для простоты
отключим режимы боёв "Штурм" и "Встречный бой". После нажатия
кнопки "В бой" танк Т14 попадает в 2 очереди балансировщика, на
последнюю позицию в каждой:
Так как танк оказался в конце очереди, приоритет на отправку в бой
у него низкий. Однако, балансировщик при подборе машин в команду,
просматривает очередь на всю длину, поэтому, если в набираемой
команде не хватало именно танка с балансным весом, близким к весу
Т14, он может сразу оказаться в команде, направляемой в бой. Но
может быть придется и подождать. Балансировщик в каждой из
очередей, отправив пару команд в бой, тут же начинает набирать
следующую пару. Сначала в команды добавляются арт-САУ, в
соответствии с правилами из п.5, которые оказываются в командах на
местах, балансные веса которых максимально близки весам этих
арт-САУ. Затем балансировщик начинает подбор боевых машин на ещё не
занятые места. Сначала подбираются танки на места с большим
балансным весом, т.е. сначала в команду добавляются "топы" списка.
При добавлении взвода в команду балансировщик стремится к тому,
чтобы балансные веса всех танков взвода были близки к весам
свободных мест команды, при этом приоритет у танка с наибольшим
балансным весом.
Балансировщик следит за тем, чтобы суммарные балансные веса обеих
команд отличались не более, чем на 10%. Для каждого места в
командах очередь просматривается полностью, и из неё выбирается
боевая машина, балансный вес которой наиболее близок к балансному
весу этого места. Может сложиться такая ситуация (ведь состав
очередей на бой непредсказуем), что балансный вес выбранной машины
будет заметно отличаться от веса места. В этом случае балансировщик
изменяет балансные веса ещё незанятых мест, чтобы скорректировать
суммарные веса команд.
Когда пара команд собрана, обе команды проверяются на соответствие
текущим условиям баланса, и только если эти условия выполняются,
команды отправляются в бой. Иначе команды расформировываются и их
набор начинается заново. Может случиться и так, что балансировщик
не может завершить подбор боевых машин в команды (например, если в
очереди оказалось много однотипных машин, которые не подходят к уже
отобранным в команды). В этом случае очередь как бы "засыпает",
ожидая изменений (например, кто-то выйдет из неё, так как попал в
бой другого типа или уровня, либо кто-то добавится, нажав кнопку "В
бой!"). В этот момент очередь "просыпается" и балансировщик пробует
доукомплектовать команды снова.
На схеме показано, что Т14 был отобран в команду на бой 5 уровня,
формирование которой завершено, и одновременно с этим в команду на
бой 6 уровня, формирование которой продолжается. Так как пара
команд для боя 5 уровня удовлетворяет текущим условиям баланса, Т14
идёт в бой именно в этой паре:
Реклама | Adv