本文为约2823字,建议阅读6分钟
本文介绍了
游戏DND怪物统计数据,以及它们与CR以及彼此之间的关系程度.
龙与地下城(DND)于1974年发行第一版,现在所有RPG游戏都有它的影子,可以说它影响了全世界的RPG,对于RPG来说,最主要的一个特点就是有着不同类型的怪物,而我们可以通过《dungeon master guide》中提供的Challenge Rating(CR)公式来创建我们自己的怪物,因为我们也是地牢大师的一员,对吧。
《龙与地下城》让玩家能够自由地与好友一起游戏并创造故事。作为DM,我们还能根据自己的喜好创造属于自己的怪物。所以就有了本篇文章,本文中着重于四个主要问题:
挑战等级(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’]
探索性数据分析的基础就是分布。这些统计数据的数据集是什么样的?我们有很多右偏的数据。考虑到挑战等级的偏右(大多数怪物等级较低),这是合理的。
大多数标准属性:力量、敏捷、智慧、智力和魅力的分布范围都在0到30之间。但是体质中几乎没有10以下的怪物。这应该是因为体质0的话就死了,毕竟在任何游戏中活着是第一位的。
熟练度的奖励与挑战评级相关,这是肯定的。所以在我们的模型中不使用熟练度奖励这个特征,因为它不会为我们提供更多信息。我们使用相关性的热图进行更详细的分析。
这里最大的一个发现是敏捷与其他任何统计数据的相关性几乎没有(是不是可以说敏捷是最没用的属性呢😂)。
但是也的确有一些非常强烈的相关属性,这意味着它们相互影响。
为了进一步探索所有怪物的主要统计数据,所以使用了一个简单的箱型图。
只有力量和体质与彼此没有显着差异。所有其他统计数据在平均值上均具有统计学上的显着差异。
这里可能和我们的认知类似一个人的强壮是力量和属性的合体,基本上不会出现,力量很大但是体质很差的人。
怪物的免疫和抗性与挑战等级之间明显缺乏相关性。有这么多的较弱的怪物都有免疫属性😂这个分析也让我更了解了怪物。
怪物类型,环境,大小和排列
上面已经将挑战等级与统计数据进行了比较,可以确定这将是模型的输入,但是其他类型的统计数据:类型,环境,大小和排列方式又是什么样呢?它们对统计有任何影响吗?他们可以用来帮助改善我们的预测吗?
雷达图表是我一直以来最喜欢的图表。他是我在《宠物小精灵》中发现的一个非常好的方法,通过这些图表将分类数据与统计数据进行比较会是一个很好的方法!
上面图中可以看到环境对怪物统计数据的影响很小,我感到非常惊讶/失望。但是我们可以在环境图(下)中看到两个非常不同的总体形状:一个具有高强壮的,但是其他属性低,和一个其他比较全面但智力比较低的形状。这可以算是个好消息,因为它表明环境与统计数据之间存在一些关系。
我们还注意到智力的平均数都比较低。这可能是因为许多“野兽"并不聪明。
创建一个模型来预测怪物数据
既然我已经了解了我们的输入和输出的关系,那么我可以开始创建模型了。基于问题,我们需要的结果是数值,所以回归模型是最好的选择。
在尝试了Scikit-Learn的几种基本算法(线性,K-Nearest,决策树,随机森林)之后。我没有得到令人满意结果,所以我决定选择一种更强大的算法,该算法可以从较弱的输入中学习,并使用相关的输出来构建更好的模型。
进行了大约十次运行的微调,包括学习率,批大小,损失函数等。最终获得了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