关于机器学习:使用神经网络模型创建一个龙与地下城怪物生成器

40次阅读

共计 2736 个字符,预计需要花费 7 分钟才能阅读完成。

龙与地下城(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 Actions’,‘Environment’,‘Attack_Bonus’,‘Spell_Bonus’,‘Spell_Save_DC’,‘WIS_SV’,‘INT_SV’,‘CHA_SV’,‘STR_SV’,‘DEX_SV’,‘CON_SV’,‘Arctic’,‘Coastal’,‘Desert’,‘Forest’,‘Grassland’,‘Hill’,‘Mountain’,‘NA’,‘Swamp’,‘Underdark’,‘Underwater’,‘Urban’,‘Average_Damage_per_Round’,‘Damage Resistances’,‘Damage Immunities’,‘Condition Immunities’,‘Damage Vulnerabilities’,‘Spellcaster’,‘Magic Resistance’,‘Legendary Resistance’,‘Regeneration’,‘Undead Fortitude’,‘Pack Tactics’,‘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://avoid.overfit.cn/post/0f490c24d6b54648b20e4cb421020881

作者:Andrew Ingalls

正文完
 0