В Blitz мы верим в то, что нужно тренировать и помогать нашим игрокам становиться лучше в играх, которые они любят. Понимание меты — важная часть авто-шахмат от Riot Games: Teamfight Tactics (TFT). TFT — это стратегическая игра с автобатлерами, основанная на раундах, в которой вы набираете команду, которая сражается против других игроков. Несмотря на то, что каждая игра TFT уникальна, понимание меты является важным шагом в изучении игры.

Проблема с текущими инструментами

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

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

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

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

Наше решение, Blitz Way

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

С помощью наших недавно проанализированных композиций мы преследуем следующие цели:

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

Мы даем представление о том, как мы придумываем наши композиции в остальной части статьи. Надеюсь, тебе понравится! https://blitz.gg/tft/comps/stats

Контекст

В Teamfight Tactics, когда мы говорим о композициях, мы обычно говорим о композиции поздней игры, к которой вы строите. Поле эндгейма обычно содержит 8 юнитов (9 для поздней игры). В каждом наборе около 60 чемпионов, то есть теоретически вы можете создать около 60⁸ различных композиций. Однако, поскольку между разными чемпионами существует синергия, наблюдаемый набор на самом деле намного меньше. Игроки на самом деле влияют на мету, влияя друг на друга, когда они взаимодействуют (напрямую или нет) через потоковую передачу, видео по запросу в социальных сетях, чаты и т. д., что влияет на мету в определенном направлении. Есть много примеров игр, в которых наблюдаемая мета на самом деле ограничена небольшим набором стратегий, которые может выбрать игрок. В наши дни все еще довольно часто можно увидеть, как в TFT некоторые композиции становятся вирусными после того, как стример видит это перед своими зрителями.

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

Наборы TFT короткие (всего на пару месяцев), и каждый набор представляет совершенно новый набор юнитов и синергий (а иногда и механики), которые заставляют игроков сбрасывать свои знания и исследовать синергии с нуля, что, скажем прямо, самая захватывающая часть TFT. Хотя опыт может помочь игрокам лучше понять, как играть, и принимать более взвешенные решения, игроки не могут накапливать знания о композиции сетов, что позволяет каждому, кто начинает играть в TFT, соревноваться с игроками, которые играют годами. Это не относится к другим играм, таким как League of Legends, где разрыв в знаниях между новыми игроками и 10-летними игроками огромен и его сложно закрыть.

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

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

Перейдем к самому интересному…

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

Мы храним и обрабатываем данные в AWS S3 и Databricks соответственно: от процесса ETL до обучения модели и вывода до предоставления данных для нашего приложения и веб-сайта. Мы также используем Airflow для запуска набора последовательных заданий, которые проходят все этапы, описанные ниже.

Шаг 1. Кластеризация

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

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

Идентификация этих композиций позволяет нам:

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

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

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

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

Каждый состав эндгейма определяется:
- списком юнитов (теоретически от 0 до 10+ юнитов), причем для каждого
— необязательный список предметов
— уровнем (от 1 до 3)
- Набор аугментов
- Набор метаданных, относящихся к игре, таких как
— место размещения (окончательное место в игре с 1 по 8)
— дата игры
— ранг (ранг игрока, например, Platinum 3 на момент игры)
— играемый сервер (Северная Америка, Корея, Западная Европа и т. д.)

Представление композиции потенциально может использовать все эти функции, если они имеют некоторый вес в кластеризации.

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

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

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

Шаг 2. Алгоритм композиции

Мы используем алгоритм K-средних для идентификации наших кластеров, и это метод, который дал нам наилучшие результаты. Поскольку расстояние между композициями равно количеству различных единиц, наши точки распределяются в сферической форме, где центр представляет собой ядро ​​данной композиции, что хорошо работает с алгоритмом K-средних. Он также хорошо подходит для кластеров одинакового размера, что в нашем случае способствует равномерному распределению композиции вокруг основных композиций, к чему мы и стремимся.

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

Еще один недостаток, с которым мы столкнулись, заключался в том, что сгенерированные центроиды не являются реалистичными композициями, поскольку они кодируют только небольшое количество чемпионов (от 2 до 3). Из-за высокой дисперсии некоторых композиций или слишком малого количества кластеров центроид мог быть расположен в середине нескольких композиций, фактически не представляя никаких воспроизводимых композиций. Например, мы наблюдали центроиды, включающие только двух чемпионов, таких как Уорвик + Мордекайзер или Леона + Экко, которые представляют собой две пары чемпионов, которые хорошо сочетаются друг с другом и могут быть центром нескольких композиций, но не представляют композиции как есть. Чтобы преодолеть это, мы перевели центроиды в ближайшую и наиболее представленную композицию вокруг центроида, чтобы у нас всегда были кластеры, сосредоточенные вокруг играбельной композиции. Хотя выбор можно считать произвольным, в конечном итоге мы также переобучаем нашу модель позже с новыми случайно сгенерированными центрами, чтобы при необходимости полностью покрыть пространство.

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

Шаг 3. Статистика и рекомендации

Дилемма процента побед

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

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

С другой стороны, если бы мы основывались исключительно на рекомендациях по винрейту, некоторые результаты могли бы быть странными, поскольку всегда почти невозможно получить состав, который приводит к гарантированному попаданию в топ-1, но это происходит только в одной игре на тысячу игр. например, 3 звезды за 5 единиц стоимости или по 3 предмета на каждую единицу.

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

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

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

Рассмотрим приведенный выше пример, рекомендации по дополнению состава: Threat Aurelion Sol. В этом составе есть три основных чемпиона-керри, Аурелион Сол, Бел'Вет и Атрокс. Эта композиция предназначена для использования сильных юнитов угрозы, особенно Аурелиона Сола, который несет большую долю урона композиции.

Мы анализируем аугменты под тремя призмами, их среднее размещение, скорость выбора, а также улучшение скорости выбора. Улучшение скорости выбора — это разница между частотой выбора этого дополнения для данной композиции и средней скоростью выбора при игре этого дополнения с любой композицией. Мы видим, что частота выбора в целом сильных дополнений, таких как Portable Forge (12,4%), Thrill of the Hunt II (8,3%) и Jeweled Lotus (7,9%), действительно высока, но их улучшения относительно скромны. , что означает, что с этой композицией эти дополнения используются не чаще, чем с любой другой. Тем не менее, такие дополнения, как «Максимальный уровень угрозы» (коэффициент выбора 22,6%) с улучшенным коэффициентом выбора +21,1% (что означает, что его средний коэффициент выбора с любой композицией составляет всего 1,5%), почти исключительно используются с этой композицией. Напротив, улучшение скорости выбора портативной кузницы составляет всего +2,6%, а это означает, что это улучшение на самом деле не относится к этой композиции.

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

Рекомендации по стратегии

Прокачка и прокачка — два ключевых аспекта TFT, суть которых в том, чтобы тратить деньги с умом. Несмотря на то, что есть некоторые правила, применимые к каждому отдельному составу юнитов, которыми вы играете, есть и ключевые отличия. Направления к составу в конце игры, сосредоточив внимание только на юнитах и ​​предметах, обычно недостаточно для достижения более высоких рангов.

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

Производство — МЛ Инжиниринг

Жизненный цикл моделей

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

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

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

При разработке жизненного цикла модели можно пойти несколькими путями, каждый со своими плюсами и минусами:

  • Обучайте одну модель один раз за патч (через день или два данных), убедитесь, что композиции на 100 % согласованы во времени, но вообще не адаптируются к мета-изменениям во время патча.
  • Переобучение новой модели каждый день, что гарантирует ее адаптацию к мете с компромиссом в виде потенциального вывода совершенно разных композиций каждый день.
  • Переобучение одной модели каждый день на основе последних данных, чтобы убедиться, что она согласуется с ранее обученными моделями, и при этом оставить место для корректировки. Недостатком может быть застревание в каком-то локальном оптимуме для всего патча.

Мы выбрали последний подход, показанный ниже. В первый день патча мы обучаем модель с нуля, используя данные за первый день, мы используем эту модель, чтобы сделать вывод о наших данных за один день. На второй день мы повторно обучаем нашу модель (используя модель предыдущего дня), используя данные второго дня. Поскольку мета со временем меняется, мы ожидаем, что наши центроиды будут немного двигаться, чтобы лучше соответствовать вновь встречающимся точкам данных. Цель состоит в том, чтобы максимизировать количество выборок, которые у нас есть для каждого кластера, мы делаем повторный вывод, используя данные дня 1 + данные дня 2.

Поскольку центроиды движутся, один предполагаемый образец из 1-го дня может быть помечен как A в 1-й день, но B во 2-й день.

Мы повторяем один и тот же процесс каждый день, повышая нашу уверенность по сравнению с мета-овертаймом.

K-эволюция K-средних

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

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

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

Мониторинг модели

Дрифтинг

Чтобы отслеживать наше различное обучение, в целях разработки или для целей мониторинга производства, мы широко использовали отслеживание MLFlow в Databricks. (https://mlflow.org/docs/latest/tracking.html / https://docs.databricks.com/mlflow/tracking.html)

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

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

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

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

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

Использование ИИ-композиций, проанализированных Blitz

Благодаря совместной работе Blitz Data & App Team наши проанализированные композиции доступны через интуитивно понятный пользовательский интерфейс, который, мы надеемся, вам понравится. Мы уже работаем над новыми функциями, чтобы дать вам больше информации о том, как играть лучшие композиции, чтобы вы могли шлифовать эти LP!

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

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

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

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

Если у вас есть какие-либо отзывы, не стесняйтесь обращаться через наш Discord (или кнопку Отправить отзыв в приложении) — https://discord.gg/theblitzapp

Кредиты

Привет всей команде Blitz, которая очень усердно работала над этим проектом, Алану Цю (PM), Марселю Дольду (SWE), Теду Ли (наставник по ИИ/данным), Эдварду Гуану (эксперт по TFT, инженер по ИИ) и Рафаэлю. Картерет (энтузиаст TFT, инженер по искусственному интеллекту и данным).

Автор: Рафаэль Картенет (https://medium.com/@rafael.cartenet)

Подпишитесь на нас в социальных сетях:

Твиттер | Инстаграм | ТикТок | Фейсбук