Введение

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

Да, вы можете изменить скин другого монстра из руководства, конечно, вы можете использовать уравнение рейтинга испытаний (CR), которое предоставляет руководство мастера подземелий, черт возьми, вы можете прямо делать что угодно… в конце концов, вы Мастер.

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

Теперь большая часть работы DM строится на лету. Нет Мастера, который провел всю кампанию, не подумав: «Ага, пора добавить этому монстру еще 100 ХП». При этом одним из моих любимых занятий всегда было создание новых сложных встреч.

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

Потому что спустя 15 лет я могу в значительной степени воспроизвести многие блоки статистики монстров по памяти.

Но именно поэтому «Подземелья и драконы» такие потрясающие. Спустя 15 лет я все еще могу играть в ту же игру. Все, что нужно, это немного настройки и мое собственное воображение.

Dungeons and Dragons — это свобода играть и создавать историю вместе с друзьями. Дело не в победе или поражении.

При всем сказанном мне все еще любопытно, есть ли для Dungeon Masters более простой способ создать блок статистики монстров на лету.

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

С этой целью этот проект сосредоточился на четырех основных вопросах:

  1. Насколько отличаются рейтинги испытаний монстров, созданных вручную, при расчете по уравнению CR?
  2. Как характеристики монстра соотносятся с системой оценки испытаний и с ними самими?
  3. Как не ориентированные на характеристики категории монстра (тип, окружение, размер, мировоззрение) влияют на его характеристики?
  4. Можем ли мы предсказать блок статистики монстра для неопытных Мастеров, который напоминает монстров SRC?

Часть 1: Уравнение рейтинга вызовов

Возможно, вы этого не знаете, но Wizards of the Coast предоставили серию диаграмм и общее уравнение для создания вашего собственного домашнего монстра. Я постараюсь не вдаваться в дискуссию о самом рейтинге вызовов.

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

Я хотел знать, насколько точным было это уравнение. Если бы я использовал его на монстрах из «Руководства монстров», получу ли я тот же рейтинг CR, что и у каждого из них?

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

Древний красный дракон

Очки здоровья: 546, что соответствует 24 CR
Легендарное сопротивлениеувеличивает здоровье на 90

Жизнеспособность:636, что равняется 26 CR

Класс защиты:22< br /> Иммунитет:1
Спасброски:4, это увеличивает КД на 2 = 24

Урон за раунд: 215, что соответствует 25 CR
Бонус атаки: + 17

Защитный CR: 26 CR (Hit Points) имеет AC 19, разница в 5 очков
от фактического дракона AC, увеличение CR на 2,5 = 28,5 CR


Наступательная CR: 25 CR (урон за раунд) имеет бонус атаки 12, у дракона фактический бонус атаки на 5 очков выше, увеличивая CR на 2,5 = 27,5

Что дает нам средний CR 28.Пособие монстров CR для Древнему Красному Дракону 24 года.

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

Итак, мне пора на работу. Я взял более 300 монстров из Системного справочного документа (SRD) Dungeons and Dragon и начал исследовать данные. К счастью для нас, Wizards of the Coast предоставили информацию в этом документе для свободного использования и изучения в наших интересах. Спасибо, WoTC!

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

Когда говорят, что 90% жизни Data Scientist тратится на очистку данных, они не шутят. Было много грязи, через которую нужно было тащиться, но я также смог получить некоторые удивительные идеи.

Вот все функции, которые мне удалось собрать/создать:

['Имя монстра', 'Размер', 'Тип', 'Мировоззрение', 'Черты', 'Реакции', 'Класс брони', 'Жизнеспособность', 'Скорость', 'Вызов', 'Бонус мастерства', ' STR», «DEX», «CON», «INT», «WIS», «CHA», «Действия», «Легендарные действия», «Окружающая среда», «Attack_Bonus», «Spell_Bonus», «Spell_Save_DC», «WIS_SV» ', 'INT_SV', 'CHA_SV', 'STR_SV', 'DEX_SV', 'CON_SV', 'Арктика', 'Прибрежный', 'Пустыня', 'Лес', 'Луга', 'Холм', 'Гора', «Нет данных», «Болото», «Подземье», «Под водой», «Город», «Средний_урон_за_раунд», «Сопротивление урону», «Иммунитет к урону», «Иммунитет к состояниям», «Уязвимость к урону», «Заклинатель», «Магия». Сопротивление», «Легендарное сопротивление», «Регенерация», «Стойкость нежити», «Тактика стаи», «Перенос урона», «Ангельское оружие», «Рывок»]

Часть 2. Связан ли CR со статистикой наших монстров?

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

На самом деле я очень удивлен, увидев, что большинство стандартных характеристик: Сила, Ловкость, Мудрость, Интеллект и Харизма имеют распределение от почти 0 до 30. Однако Телосложение почти не имеет монстров ниже 10. Это связано с тот факт, что конституция 0 равна смерти.

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

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

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

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

Однако я вижу некоторые очень сильные корреляции со многими из этих статистических данных, что означает, что они оказывают влияние друг на друга.

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

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

Получается, что только сила и конституция существенно не отличаются друг от друга. Все остальные статистические данные имеют статистически значимую разницу в среднем значении.

Здесь есть что распаковать, но, по сути, статистика монстров повсюду, что действительно круто. Это также имеет смысл. Вероятно, очень редко какой-либо монстр имеет все высокие или низкие характеристики. Другое понимание здесь таково: сила и телосложение идут рука об руку. Если ты сильный, ты крепкий, если ты слабый, ты хрупкий. Опять же, это имеет смысл.

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

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

Похоже, я не так хорошо знаю характеристики монстров, как думал :D

Часть 3: Тип монстра, окружение, размер и мировоззрение

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

Влияют ли они на наши блоки статистики? Можно ли их использовать для уточнения наших прогнозов?

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

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

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

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

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

Часть 4: Создание модели для прогнозирования блока статистики монстров

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

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

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

Вставьте Keras API с помощью TensorFlow. Я построил и обучил последовательную модель, используя три слоя: входной, выходной и один скрытый слой.

Оптимизация заняла около десяти прогонов путем изменения функции активации, размера партии, эпох и скорости обучения. В конце концов, я добился точности теста 85,64% с низкой среднеквадратичной ошибкой 59,7. Я нащупал свой минимально жизнеспособный продукт, он был достаточно хорош для запуска и тестирования.

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

Конечный продукт должен быть более точным, если это обеспечит Dungeon Masters удобство и последовательность простого уравнения.

Однако нам нужен внешний интерфейс, если это сработает. Я не могу позволить людям вводить случайные 1 и 0, как будто они понимают, что происходит за кулисами. Мне нужно было что-то полезное, интерактивное и быстрое. Мне нужен был Dash от Plotly. Dash — замечательный инструмент, который я настоятельно рекомендую использовать другим.

Я быстро развернул панель инструментов и, прежде чем вы это узнаете, провел BOOM-тестирование на своем локальном компьютере.

Бонус: разверните приложение Dash на AWS!

Хотя локальность хороша, чтобы передать ее другим, мне нужно было развернуть ее в облаке. Я рекомендую AWS Lightsail всем, кто хочет быстро разместить приложение в Интернете.

Протестируйте приложение здесь.

Заключение

В этой статье мы рассмотрели, как предсказать блок статистики монстра, используя модель Keras Sequential.

  1. Мы обнаружили, что уравнение рейтинга опасности, предоставленное WotC, на самом деле приводит к разным CR при расчете монстров из Руководства монстров!
  2. Затем мы рассмотрели все характеристики монстров и то, насколько хорошо они коррелируют с CR, а также друг с другом. Оказывается, Ловкость — нет! Однако почти все остальные характеристики были коррелированы!
  3. Наше последнее исследование было с нашими категориальными данными. Мы увидели, что окружающая среда не оказала большого влияния на дифференциацию наших блоков статистики. Тип и размер, однако, играют огромную роль.
  4. Затем мы рассмотрели несколько различных алгоритмов регрессора и после оптимизации решили построить и обучить с помощью Keras API и TensorFlow. Мы создали модель с точностью 85,6 % и пользовательский интерфейс Dash для управления ею.
  5. Наконец, мы увидели, как легко было развернуть наше приложение для приборной панели с помощью AWS Lightsail, чтобы передать его в руки DM для тестирования.

Всем большое спасибо за чтение.

Если вам понравилось то, что вы прочитали, пожалуйста, аплодируйте, общайтесь с помощью комментариев или посетите мой GitHub, чтобы узнать больше об этом анализе.

Хорошего дня!