前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >教遗传算法人工智能玩超级马里奥大陆

教遗传算法人工智能玩超级马里奥大陆

作者头像
数据派THU
发布2023-03-29 13:14:24
3910
发布2023-03-29 13:14:24
举报
文章被收录于专栏:数据派THU
代码语言:javascript
复制
来源:DeepHub IMBA
本文约1900字,建议阅读5分钟 本文将将向读者展示如何开发遗传算法 AI 以使用 Python 玩超级马里奥乐园。

这是教授 AI 为 GameBoy 玩超级马里奥乐园系列的第一篇文章,在这里我将向您展示如何开发遗传算法 AI 以使用 Python 玩超级马里奥乐园。(完整代码文末)

《超级马里奥大陆》是任天堂开发的一款平台游戏,它讲述了一个勇敢的水管工马里奥拯救公主的故事。

下面的 GIF 展示了为 GBA 制作《超级马里奥大陆》世界 1-1 第一部分的遗传算法。在下一节中,我将解释如何自己编写这个算法。

环境

第一步是 Python 和 Game Boy 模拟器之间的集成。对于这个,我找到了一个很好的 Python 库,叫做 PyBoy。

https://github.com/Baekalfen/PyBoy

按照 PyBoy 的说明,我能够将 Super Mario Land 游戏集成到 Python 中并开发所有控制交互。要创建环境的第一个工作版本,必须创建一个“init”函数来定义所有初始变量,如马里奥的生命、剩余时间、世界级别等。在此之后,您必须创建一个函数以在游戏结束时重置游戏,并创建一个“step”函数以允许 AI 代理与游戏交互并对其执行操作。

在创建允许任何人工智能程序与游戏交互并实际玩游戏的环境之后,让我们选择一种算法并开发 AI 代理。

遗传算法

遗传模型基于使用生物进化概念来优化其行为的算法。

“在生物学中,进化是物种特征经过几代的变化,依赖于自然选择的过程。” [1]

“生物进化理论基于所有物种都相关并随着时间逐渐变化的想法。该理论指出,种群中的遗传变异会影响物种的物理特征(表型),其中一些特征可能使个体比其他特征更具优势。” [1] 。

这些身体优势然后可以通过父母延续到后代。应用于 AI 的这一理论创建了自学习代理,这些代理会不断进化并探索环境以最大化结果。

这个想法很简单,我们为每一代创建一些物种并执行交叉和突变以优化和开发基因,然后在最后执行最佳物种的选择。

世代

世代是一组物种,每个物种都具有通过突变和交叉产生的特定特征,这些特征是从父母那里遗传的。

将这一概念应用于人工智能,每个物种在第一代出生时都有一组动作,然后根据它们的适应度选择最好的物种继续下一代。然后,下一代物种会经历一个交叉过程,以根据上一代和变异产生后代来产生变异性。这个过程不断迭代直到最后一代。

选择

算法的选择部分基于查尔斯达尔文的自然进化理论。

“具有最适合其环境特征的个体更有可能生存、寻找食物、躲避捕食者和抵抗疾病。这些人更有可能繁殖并将他们的基因传给他们的孩子。不适应环境的个体生存和繁殖的可能性较小。因此,他们的基因不太可能传给下一代。因此,最适合其环境的个体生存下来,如果有足够的时间,物种将逐渐进化。” [1]

将此概念应用于人工智能,当我们进入下一代时,我们只选择最适合“生存”并将其“基因”复制到未来的个体。

交叉

在父母将基因传给下一代的繁殖周期中,他们的基因会发生交叉。交叉过程从亲本 1 中取出一半基因,从亲本 2 中取出另一半基因,为下一代生成基因。

突变

突变是部分基因随机变化的过程。

这些变化可能只是不影响运动的微小变化,也可能导致全新的特征并完全改变物种的行为。对于人工智能,我们通过在模型生成期间随机改变代理动作来执行突变。

适应

遗传算法最重要的变量之一是适应度。

适应度是一个变量,它说明我们希望为我们的环境最大化什么。适应度公式的微小变化可能会导致代理行为的巨大变化。

对于超级马里奥大陆,我们希望马里奥向前走并杀死敌人以完成舞台。因此,当马里奥向前移动或杀死敌人时,我们会产生一个正值,并且我们每秒钟应用一个折扣,以鼓励马里奥向前快速移动。

有关遗传算法的文章可以参考我们以前发布的:

用N.E.A.T遗传算法玩FlappyBird

http://mp.weixin.qq.com/s?__biz=MzU5OTM2NjYwNg==&mid=2247489409&idx=1&sn=04d956b3dde2c471daca1cd82c3e552d&chksm=feb75920c9c0d036b3420fb41c876cd599f790b4a315627992c560cc17479c9616c11b98f6c4&scene=21#wechat_redirect

实验和结果

在对仿真环境进行编程并实现遗传算法后,我们可以开始运行仿真并评估模型性能。

出于研究目的,我运行了一个包含 30 代和 5 个物种的模型,以在第 1-1 阶段玩超级马里奥大陆。以下是第一代的结果:

马里奥能够向前走,但在第一个障碍,一个简单的 Goomba 中失败了。让我们看看代理在经过一些基因进化后是否能表现得更好……

30 代之后,我们注意到了巨大的进化!AI 代理发现的一些惊人动作是杀死一些 Goombas 并跳过小管道和高块。很高兴看到 AI 可以用动态编程做些什么。

我们可以通过下面的基准图表跟踪演变。在图表的第一部分,它是每一代的平均适应度(红线)和最大适应度(蓝线),我们可以清楚地看到随着代的发展,平均适应度和最大适应度的增加趋势。

第二部分显示了每次交互的适应度,我们可以看到每一代内部的变化,这是探索之旅的一部分,以及每一代最大适应度的增加。

如果您想实施此解决方案或了解有关遗传算法的更多信息,您可以在我的 GitHub 存储库上的以下链接中找到完整的 Python 代码:

https://github.com/octavio-santiago/Super-Mario-Land-AI

参考

[1] Your Genome, United States, accessed July 2021

作者:Octavio Bomfim Santiago

编辑:王菁

校对:林亦霖

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-07-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据派THU 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 环境
  • 遗传算法
  • 实验和结果
  • 参考
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档