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

数据派THU

共 2548字,需浏览 6分钟

 ·

2021-07-22 04:13

来源: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

编辑:王菁

校对:林亦霖


浏览 50
点赞
评论
收藏
分享

手机扫一扫分享

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

手机扫一扫分享

分享
举报