使用神经网络模型创建一个龙与地下城怪物生成器

数据派THU

共 2974字,需浏览 6分钟

 ·

2022-07-01 02:45


来源:DeepHub IMBA

本文约2000字,建议阅读5分钟

本文中,我们查看了所有怪物统计数据,以及它们与CR以及彼此之间的关系程度。


龙与地下城(DND)于1974年发行第一版,现在所有RPG游戏都有它的影子,可以说它影响了全世界的RPG,对于RPG来说,最主要的一个特点就是有着不同类型的怪物,而我们可以通过《dungeon master guide》中提供的Challenge Rating(CR)公式来创建我们自己的怪物,因为我们也是地牢大师的一员,对吧。


《龙与地下城》让玩家能够自由地与好友一起游戏并创造故事。作为DM,我们还能根据自己的喜好创造属于自己的怪物。所以就有了本篇文章,本文中着重于四个主要问题:

  • 根据CR公式计算的手动怪物的挑战等级有何不同?
  • 怪物的属性如何与挑战评级系统及其本身相关联?
  • 怪物的非属性属性(类型,环境,大小,排列)如何影响它的属性?
  • 我们能预测一个没有经验的dm和SRC怪物相似的怪物属性块吗?


挑战等级(CR)公式


威世智(Wizards of the Coast)提供了一系列图表和一个通用公式,可以为玩家创建自己的自制怪物时作为参考。所以我们首先就是要验证这个公式的准确性。我我们从《怪物手册》中的怪物上应用它,看看是否会获得相同的等级评定?

因此,我从CR列表中获取了三个怪物,并使用公式计算结果,它们实际上非常接近,所以可以证明这个公式是有效的,我们下面可以使用它进行正式的工作了。

从《龙与地下城》的系统参考文件(SRD)中获得了300个怪物,并开始探索数据。幸运的是,威世智为我们提供了免费使用和探索本文档中的信息的服务。

我使用Selenium抓取这些数据感,然后进行了整理。数据科学家一生中90%的时间都在清理数据时,他们不是在开玩笑。

下面是我获取的所有数据的属性:

[‘Monster Name’, ‘Size’, ‘Type’, ‘Alignment’, ‘Traits’, ‘Reactions’, ‘Armor Class’, ‘Hit Points’, ‘Speed’, ‘Challenge’, ‘Proficiency Bonus ’, ‘STR’, ‘DEX’, ‘CON’, ‘INT’, ‘WIS’, ‘CHA’, ‘Actions’, ‘Legendary Ac tions’, ‘Environment’, ‘Attack_Bonus’, ‘Spell_Bonus’, ‘Spell_Save_DC’ , ‘WIS_SV’, ‘INT_SV’, ‘CHA_SV’, ‘STR_SV’, ‘DEX_SV’, ‘CON_SV’, ‘Arcti c’, ‘Coastal’, ‘Desert’, ‘Forest’, ‘Grassland’, ‘Hill’, ‘Mountain’, ‘ NA’, ‘Swamp’, ‘Underdark’, ‘Underwater’, ‘Urban’, ‘Average_Damage_per _Round’, ‘Damage Resistances’, ‘Damage Immunities’, ‘Condition Immun ities’, ‘Damage Vulnerabilities’, ‘Spellcaster’, ‘Magic Resistance’,  ‘Legendary Resistance’, ‘Regeneration’, ‘Undead Fortitude’, ‘Pack T  actics’, ‘Damage Transfer’, ‘Angelic Weapons’, ‘Charge’]

CR与怪物统计数据有关吗?

探索性数据分析的基础就是分布。这些统计数据的数据集是什么样的?我们有很多右偏的数据。考虑到挑战等级的偏右(大多数怪物等级较低),这是合理的。


大多数标准属性:力量、敏捷、智慧、智力和魅力的分布范围都在0到30之间。但是体质中几乎没有10以下的怪物。这应该是因为体质0的话就死了,毕竟在任何游戏中活着是第一位的。


绘制统计数据的联合分布可以得到更清晰的相关图。

熟练度的奖励与挑战评级相关,这是肯定的。所以在我们的模型中不使用熟练度奖励这个特征,因为它不会为我们提供更多信息。我们使用相关性的热图进行更详细的分析。


这里最大的一个发现是敏捷与其他任何统计数据的相关性几乎没有(是不是可以说敏捷是最没用的属性呢😂)。

但是也的确有一些非常强烈的相关属性,这意味着它们相互影响。


为了进一步探索所有怪物的主要统计数据,所以使用了一个简单的箱型图。

只有力量和体质与彼此没有显着差异。所有其他统计数据在平均值上均具有统计学上的显着差异。

这里可能和我们的认知类似一个人的强壮是力量和属性的合体,基本上不会出现,力量很大但是体质很差的人。


怪物的免疫和抗性与挑战等级之间明显缺乏相关性。有这么多的较弱的怪物都有免疫属性😂这个分析也让我更了解了怪物。

怪物类型,环境,大小和排列


上面已经将挑战等级与统计数据进行了比较,可以确定这将是模型的输入,但是其他类型的统计数据:类型,环境,大小和排列方式又是什么样呢?它们对统计有任何影响吗?他们可以用来帮助改善我们的预测吗?

雷达图表是我一直以来最喜欢的图表。他是我在《宠物小精灵》中发现的一个非常好的方法,通过这些图表将分类数据与统计数据进行比较会是一个很好的方法!


上面图中可以看到环境对怪物统计数据的影响很小,我感到非常惊讶/失望。但是我们可以在环境图(下)中看到两个非常不同的总体形状:一个具有高强壮的,但是其他属性低,和一个其他比较全面但智力比较低的形状。这可以算是个好消息,因为它表明环境与统计数据之间存在一些关系。

我们还注意到智力的平均数都比较低。这可能是因为许多“野兽"并不聪明。

创建一个模型来预测怪物数据


既然我已经了解了我们的输入和输出的关系,那么我可以开始创建模型了。基于问题,我们需要的结果是数值,所以回归模型是最好的选择。

在尝试了Scikit-Learn的几种基本算法(线性,K-Nearest,决策树,随机森林)之后。我没有得到令人满意结果,所以我决定选择一种更强大的算法,该算法可以从较弱的输入中学习,并使用相关的输出来构建更好的模型。

我们使用神经网络构建一个三层的mlp


进行了大约十次运行的微调,包括学习率,批大小,损失函数等。最终获得了85.64%的测试准确性,均方根误差为59.7。这是一个还不错的模型了,为了让用户使用就需要一个前端的界面获取用户的输入数据。我需要plotly 的Dash是很好的工具,效果如下:


总结


在本文中,我们查看了所有怪物统计数据,以及它们与CR以及彼此之间的关系程度。然后使用Keras API和TensorFlow构建和训练,创建了一个85.6%的精确模型和一个Dash UI进行发布,使用AWS Lightsail部署。


测试的地址如下:

https://dnd-monsters.b5171qf35pc3s.us-west-2.cs.amazonlightsail.com/

源代码在这里:

https://github.com/chabazite/DnD_Monsters


编辑:于腾凯

校对:林亦霖





浏览 22
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报