Балансировщик в 9.18

28.04.2017    1 949
Балансировщик в 9.18


Сегодня мы подробно поговорим о том, как работает улучшенный балансировщик, и рассмотрим каждый этап формирования команд. Поехали!

Как это работает

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

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

Балансировщик начинает свою работу с попытки создать трёхуровневый бой с использованием шаблона 3/5/7 (три машины в верхней, пять машин в средней и семь машин в нижней части списка) или другого его варианта (например, 3/4/8, 3/3/9 и т. д.). Выбранный балансировщиком вариант зависит от состава очереди. В любом случае не будет боёв, где количество машин в верхней части списка превышает количество машин в середине. Руководствуясь тем же принципом, балансировщик не создаёт боёв, где количество машин в середине превышает количество машин внизу списка. Всегда будут соблюдаться следующие правила:
- машин вверху списка не может быть больше, чем в середине;
- машин в середине списка не может быть больше, чем в нижней части.

Таким образом, балансировщик гарантирует, что, независимо от позиции игрока в списке команды, для него всегда будет достаточное количество машин противника аналогичного уровня, и влияние такого игрока на исход боя увеличивается.

Балансировщик в 9.18
Балансировщик в 9.18
Балансировщик в 9.18


Если сбор команд по шаблону 3/5/7 заставит игроков ждать в очереди слишком долго, балансировщик ослабляет требования, чтобы создать бой быстрее. В таком случае могут создаваться двух- и одноуровневые бои. Основная часть сражений при этом будет трёхуровневыми.

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

Создание боя

Этап 1: определение диапазона уровней техники в бою и типа боя. Сначала балансировщик определяет количество игроков и взводов, подходящее для каждого уровня боя, а также тип боя. Далее система анализирует режимы, указанные игроками, выбранную ими технику, её уровни, а также стандартный или льготный уровень боёв.

Этап 2: создание двух равноценных команд. Определив диапазон уровней техники в бою и тип боя, система пытается распределить игроков по командам, учитывая балансные требования и ограничения:
- Шаблоны: обе команды должны соответствовать шаблону: количество техники вверху, в середине и внизу списка должно быть одинаковым.
- САУ: количество САУ ограничено тремя машинами в команде.
- Взводы: в случайных боях разрешены только одноуровневые взводы. Разница в количестве взводных игроков должна быть не более трёх.
- Типы техники: разница в количестве САУ, лёгких танков и ПТ-САУ в пределах каждой части списка команды должна быть не более одной машины.

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

Добавление статистики игрока в уравнение обесценивает саму идею случайных боев. Хотя в режиме и есть правила, элемент случайности должен присутствовать в каждом сражении. Этот элемент — именно то, что все мы все любим в случайных боях. У каждого есть шанс стать героем, доказать, что он способен победить любого противника. Сбор команд с учётом статистики сделает всё это невозможным. Если вы хотите играть против равных по силе игроков, скоро у вас появится возможность испытать себя в абсолютно новых ранговых боях.


Если вы участвовали в общем тесте версии 9.18, то могли попадать в бои со стандартным диапазоном уровней техники, где в верхней части списка команд была САУ. Технически такой состав команд не нарушает требования к балансу, и такие бои будут создаваться. Однако гарантируем, что это будет случаться редко. Балансировщик будет стараться помещать САУ в середину или нижнюю часть списка команды. Даже если САУ окажется в верхней части в связи с длительным временем ожидания в очереди, вы можете быть уверены, что в команде противника в верхней части также играет САУ.

Этап 3: выбор карты. Как только балансировщик подбирает шаблон, который соответствует требованиям, он собирает команды, выбирает карту и создаёт бой. Карты для низкоуровневой техники выбираются случайным образом из ограниченного набора. В остальных случаях балансировщик определяет набор карт, которые соответствуют типу боя и диапазону уровней техники в командах. Далее программа анализирует, на каких картах игроки воевали в последних нескольких боях, и выбирает ту, на которой побывало меньше всего танкистов.

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