Hearthstone

Беседа с разработчиками: достижения НАУКИ в балансировке арены

Беседа с разработчиками: достижения НАУКИ в балансировке арены

Привет! Меня зовут Тянь, я старший специалист по обработке данных из команды Hearthstone. Сегодня мы поговорим о математических методах балансирования арены.

На арене непрерывно идут бои, поэтому у нас всегда много данных, которые можно изучить, чтобы сбалансировать этот режим. Даже так — у нас очень, очень много данных! Если бы я попал в лабораторию доктора Бума, меня бы обязательно взяли в отдел математических исследований.

Балансирование игры

ABunchOfKnobs_option02.jpgБалансирование арены состоит из двух этапов. Сначала мы определяем, к каким блокам (т.е. одинаково эффективным на арене наборам карт) отнести каждую карту. Большая часть карт попадает сразу в два блока; кроме того, мы создали разные блоки для легендарных и обычных карт. То, к какому блоку (или блокам) принадлежит карта, зависит от того, как часто ее выбирают игроки, а также от процента побед колод с этой картой. Поэтому три карты, которые вам предлагают на выбор при составлении колоды, всегда более-менее равноценны.

Затем балансируется процент побед всех девяти классов. В идеале мы хотим добиться того, чтобы у каждого класса было 50% побед. Для этого мы присваиваем каждой карте определенный «вес». Вес карты — это множитель, изменяющий вероятность того, что карта будет предложена игроку при составлении колоды. Чем больше вес карты, тем выше вероятность ее появления на арене. При изменении веса карты также меняется вероятность появления блока, в котором она находится.

Для настройки этой системы требуется огромное количество данных, но благодаря многочисленным сражениям на арене у нас всегда много материала для работы.

ThreeSteps_EK_600x260.png

Чтобы использовать эти данные для балансирования игры, необходимо сделать три вещи. 

  1. Построить модель.
  2. Решить проблемы оптимизации с заданными ограничениями.
  3. Рассчитать вес карт.

Проделав все это, мы вносим изменения в игру в плановом порядке.

Построение модели

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

EN_SnowFlippaLichKing.png

Допустим, вы вытащили карту «Король-лич» во время игры. Вы начинаете думать: «Каковы теперь мои шансы на победу? 60 процентов? 50 процентов? А с учетом других факторов?» А на следующий ход вам приходит, скажем, «Ледяная преграда» — и вероятность опять изменилась.

Для всех этих вычислений мы создали модель машинного обучения. Компьютер получает огромное количество информации. Анализируя данные обо всех матчах на арене, он учится предсказывать вероятность победы по имеющимся сведениям. Таким образом мы «тренируем» созданную нами модель. По нашему запросу она может оценить вероятность победы игрока, который вытащил определенное количество карт.

Решение проблемы оптимизации с заданными ограничениями

ABunchOfKnobs_option03.jpgТеперь давайте представим, что наша модель — это ящик с множеством кнопок и регуляторов, которые можно настраивать. И каждый соответствует определенной карте. Поворачивая регулятор, мы изменяем присвоенные карте модификаторы.

Скажем, перед тем как мы начали крутить регулятор, наш ящик указал вероятность победы 40%. После изменения модификаторов вероятность победы стала равна 46%. Возникает интересный вопрос: можно ли подкрутить сразу несколько регуляторов и получить идеальную вероятность победы?

Для этого мы должны решить проблему оптимизации. Иными словами, найти лучшее из всех возможных решений. Наша задача — «подкрутить несколько регуляторов» и получить значение, максимально близкое к искомому. Говоря математическим языком, мы минимизируем целевую функцию от вектора большой размерности.

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

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

  • Новый модификатор должен быть в пределах +/-30% от некоего фиксированного значения. Слишком резкие изменения могут негативно сказаться на качестве игры.
  • Чтобы уменьшить силу класса на арене, надо сделать так, чтобы его самые сильные карты появлялись реже, а слабые чаще; и наоборот — если мы хотим сделать класс сильнее.
  • Кроме того, в рамках поставленной задачи необходимо соблюдать еще несколько физических ограничений. Скажем, повысив вероятность появления одной карты, надо точно так же снизить вероятность появления другой карты или карт: сумма всех модификаторов должна равняться нулю.

Расчет веса карт

HeavyLooking.pngПоследний шаг в использовании данных с арены для улучшения игрового баланса — изменение веса карт по результатам первых двух шагов. В среднем карты с весом 2.0 предлагаются к выбору в два раза чаще, чем карты с весом 1.0. Второй шаг — оптимизация с заданными ограничениями — подсказал нам, какие «регуляторы» надо крутить и насколько. Теперь мы привязываем каждый «регулятор» к нужной карте, изменяя ее вероятность появления при составлении колоды. Мы знаем, как именно надо изменить вес каждой карты и другие модификаторы, которые зависят от типа карты (для заклинаний, оружия, карт из разных дополнений и т.д. действуют дополнительные модификаторы).

Все готово для честного боя

На этом балансирование завершено: средний процент побед/поражений для всех девяти классов должен быть очень близок к 50%. Однако в редких случаях баланс может оставаться не идеальным даже после всех этапов балансирования. Это может произойти, если до всех изменений процент побед/поражений одного из классов был слишком высоким или слишком низким. Но даже в этом случае после балансирования ситуация значительно улучшается.

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

ABunchOfKnobs_option05.jpg

Надеемся, вам понравился рассказ о нашей системе микронастроек для арены! Мы ждем ваших отзывов. Если у вас остались вопросы, пожалуйста, задайте их в комментариях!

Следующая статья

Главные новости