使用神经网络和遗传算法玩转 Flappy Bird

简介: 本文展示了针对Flappy Bird游戏设计的机器学习算法。本实验的目标是使用神经网络和遗传算法编写一个人工智能游戏控制器,打出游戏最高分,不服的来挑战!

我们创建一个人工智能机器人,它能够学习如何把Flappy Bird这个游戏玩出最高分。这样,我们的小鸟就能安全地飞过一些障碍物了。在最好的情况下,它永远不会死。

欢迎阅读这篇完整的HTML5教程,本文展示了针对Flappy Bird游戏设计的机器学习算法。本实验的目标是使用神经网络遗传算法编写一个人工智能游戏控制器。

因此,我们打算创建一个人工智能机器人,它能够学习如何把Flappy Bird这个游戏玩出最高分。这样,我们的小鸟就能安全地飞过一些障碍物了。在最好的情况下,它永远不会死。

在阅读项目背后原理的时候,你可以在本教程末尾下载源代码。所有的代码都是基于Phaser框架编写的。此外,我们还使用了Synaptic神经网络库来实现神经网络。

演示程序

首先,让我们从演示程序开始,看一下游戏过程中的算法:

1.png

点击此处进入全屏演示(需科学上网)

视频演示

除了上面的演示程序之外,你还可以观看这部简单展示了算法的视频短片。这对那些喜欢快进的人来说简直太棒了!

https://youtu.be/aeWmdojEJf0(需科学上网)

什么是机器学习算法

根据1959年亚瑟·塞缪尔(Arthur Samuel)的说法,机器学习是让计算机在不显式编程的情况下行动的科学。一般来说,这是一个循序渐进地改进初始随机系统的学习过程。

因此,实现人工智能的目标是通过对一个差的系统进行模型参数的微调来找到一个适当的解决方案。为此,机器学习算法使用了许多不同的方法。

对于本项目,机器学习算法(ML,Machine Learning)的主要方法是基于神经演化的。这种机器学习在形式上使用了遗传算法(GA,Genetic Algorithm)等进化算法来训练人工神经网络(ANN,Artificial Neural Network)。

所以,在这个例子中,我们可以说:机器学习 = 遗传算法 + 人工神经网络(ML = GA + ANN)。

人工神经网络

人工神经网络是机器学习算法的一个子集。它的诞生受到了生物神经网络结构和功能的启发。这些网络由许多发送信号的神经元组成。

因此,要创建一个人造大脑,我们需要模拟出神经元并将它们连接成一个神经网络。

通用人造神经网络是由输入层、一个或多个隐藏层,以及输出层组成。每一层都有一定数量的神经元。输入和输出神经元直接与外部环境相连,而隐藏的神经元则将以上两者连接起来。

在本项目中,每个单元(小鸟)都有自己的神经网络作为AI大脑来玩游戏。它由以下三层组成:

  1. 一个具有2个神经元的输入层,表示一只小鸟看到的东西:
       - 与最近间隙的水平距离

   - 与最近间隙的高度差

  1. 具有6个神经元的隐藏层
  2. 具有1个神经元的输出层,提供如下动作:
       - 如果 输出 > 0.5,则扇动翅膀,否则什么也不做

下图显示了本演示程序的神经网络架构:

2.png

遗传算法

在谈论到机器学习算法的时候,可以说,遗传算法可以用来训练和改进神经网络。

遗传算法是一种基于搜索的优化技术,其灵感来自于自然选择和遗传过程。它采用选择、交叉和变异相结合的方法来进化初始随机种群。

以下是遗传算法实现的主要步骤:

  1. 随机神经网络创建10个单元(小鸟)的初始鸟群
  2. 让所有的单元同时使用自己的神经网络进行游戏。
  3. 对于每个单元,计算其适应度函数来衡量其质量(详情请参阅下面的“适应度函数”章节)
  4. 当所有的单元都死亡时,使用遗传算子来评估当前鸟群以生成下一个鸟群(详情请参阅下面的“替换策略”章节)
  5. 返回到步骤2

适应度函数

除了遗传算法(步骤3)之外,下面我们将了解一下有关适应度函数的一些细节,例如,适应度函数是什么,如何定义。

因为我们希望通过使用最好的小鸟来进化鸟群,所以需要定义一个适应度函数。

通常来说,适应度函数是衡量对象质量的指标。我们会度量每只鸟的质量,然后选择最适合的小鸟,并用它来重新生成下一批小鸟。

在本项目中,我们会根据小鸟飞行的距离来进行奖励。同时,根据小鸟当前到最近间隙的距离进行惩罚。所以,在这过程中,飞行了相同距离的小鸟之间就会产生差别。

因此,适应度函数是“小鸟飞行的总距离”和“与最近间隙的距离”之间的差。

3.png

替代策略

除了遗传算法(步骤4)之外,以下是将自然进化应用于小鸟死亡的步骤。最好的小鸟生存下来,然后他们的孩子就以下面这种方式来替代最糟糕的小鸟:

  1. 按照适应度对当前所有的小鸟进行排序
  2. 选择前4名(胜利者),并将他们直接传递给下一个鸟群
  3. 创建一个后代作为两个最佳胜利者的交叉产品
  4. 创建3个后代作为两个随机胜利者的交叉产品
  5. 创建2个后代作为两个随机胜利者的直接副本
  6. 对每个后代应用随机突变,以增加一些变异

源代码

这是源代码下载链接: https://github.com/ssusnic/Machine-Learning-Flappy-Bird

要求

由于程序是使用HTML5基于Phaser框架Synaptic神经网络库编写的,因此需要这些文件:

  • phaser.min.js
  • synaptic.min.js

gameplay.js

整个游戏逻辑在gameplay.js文件中实现。它由以下类组成:

  • App.Main,主程序,包含以下基本功能:

    • _preload()_ 预加载所有资源
    • _create()_ 创建所有对象并初始化一个新的遗传算法对象
    • _update()_ 运行游戏的主循环,并使用遗传算法进化鸟群
    • _drawStatus()_ 显示所有小鸟的信息
  • TreeGroup 类,扩展了Phaser Group类,用于移动障碍物,包含顶部和底部的树。
  • Tree 类,扩展了Phaser Sprite类,用来表示一棵树。
  • Bird 类,扩展了Phaser Sprite类,用来表示一只鸟。
  • Text 类,用于绘制文本的Phaser BitmapText类。

genetic.js

遗传算法在genetic.js文件中实现,该文件由以下类组成:

  • GeneticAlgorithm 类,处理所有遗传算法操作的主类。它需要两个参数:max_units用于设置小鸟的总数量,top_units用于设置获胜者的数量。以下是其基本函数:
        - _reset()_ 重置遗传算法参数

    - _createPopulation()_ 创建新的鸟群
    - _activateBrain()_ 激活小鸟的AI神经网络,并根据输入获取其输出动作
    - _evolvePopulation()_ 通过使用遗传算子(选择、交叉和突变)来让鸟群进化
    - _selection()_ 从当前鸟群中选择最佳小鸟
    - _crossOver()_ 执行在两个父节点之间的单点交叉
    - _mutation()_ 对后代进行随机突变

结论

在本教程中,我们成功实现了一个会学习如何玩Flappy Bird游戏的AI机器人。经过几次迭代,可以得到一个几乎无敌的玩家。为了达到这一目标,采用了两种机器学习算法:人工神经网络和遗传算法。

你可以尝试更改代码中的一些参数,看看会发生什么。例如,你可以更改隐藏层中的神经元数量或小鸟的数量。此外,你还可以尝试以某种方式修改适应度函数,修改一些物理参数,比如障碍物之间的距离、重力等等!

试着将这里的进化理念应用到其他游戏中去吧!

文章原标题《Machine Learning Algorithm for Flappy Bird using Neural Network and Genetic Algorithm》,作者:SRDJAN,译者:夏天,审校:主题曲哥哥。

文章为简译,更为详细的你容,请查看原文

相关文章
|
15天前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的眼疾识别系统实现~人工智能+卷积网络算法
眼疾识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了4种常见的眼疾图像数据集(白内障、糖尿病性视网膜病变、青光眼和正常眼睛) 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Django框架搭建了一个Web网页平台可视化操作界面,实现用户上传一张眼疾图片识别其名称。
74 4
基于Python深度学习的眼疾识别系统实现~人工智能+卷积网络算法
|
1月前
|
机器学习/深度学习 人工智能 算法
猫狗宠物识别系统Python+TensorFlow+人工智能+深度学习+卷积网络算法
宠物识别系统使用Python和TensorFlow搭建卷积神经网络,基于37种常见猫狗数据集训练高精度模型,并保存为h5格式。通过Django框架搭建Web平台,用户上传宠物图片即可识别其名称,提供便捷的宠物识别服务。
288 55
|
28天前
|
机器学习/深度学习 算法
基于改进遗传优化的BP神经网络金融序列预测算法matlab仿真
本项目基于改进遗传优化的BP神经网络进行金融序列预测,使用MATLAB2022A实现。通过对比BP神经网络、遗传优化BP神经网络及改进遗传优化BP神经网络,展示了三者的误差和预测曲线差异。核心程序结合遗传算法(GA)与BP神经网络,利用GA优化BP网络的初始权重和阈值,提高预测精度。GA通过选择、交叉、变异操作迭代优化,防止局部收敛,增强模型对金融市场复杂性和不确定性的适应能力。
167 80
|
16天前
|
机器学习/深度学习 数据采集 算法
基于GA遗传优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
本项目基于MATLAB2022a实现时间序列预测,采用CNN-GRU-SAM网络结构。卷积层提取局部特征,GRU层处理长期依赖,自注意力机制捕捉全局特征。完整代码含中文注释和操作视频,运行效果无水印展示。算法通过数据归一化、种群初始化、适应度计算、个体更新等步骤优化网络参数,最终输出预测结果。适用于金融市场、气象预报等领域。
基于GA遗传优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
|
1月前
|
机器学习/深度学习 人工智能 算法
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
宠物识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了37种常见的猫狗宠物种类数据集【'阿比西尼亚猫(Abyssinian)', '孟加拉猫(Bengal)', '暹罗猫(Birman)', '孟买猫(Bombay)', '英国短毛猫(British Shorthair)', '埃及猫(Egyptian Mau)', '缅因猫(Maine Coon)', '波斯猫(Persian)', '布偶猫(Ragdoll)', '俄罗斯蓝猫(Russian Blue)', '暹罗猫(Siamese)', '斯芬克斯猫(Sphynx)', '美国斗牛犬
193 29
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
|
15天前
|
存储 监控 算法
局域网网络管控里 Node.js 红黑树算法的绝妙运用
在数字化办公中,局域网网络管控至关重要。红黑树作为一种自平衡二叉搜索树,凭借其高效的数据管理和平衡机制,在局域网设备状态管理中大放异彩。通过Node.js实现红黑树算法,可快速插入、查找和更新设备信息(如IP地址、带宽等),确保网络管理员实时监控和优化网络资源,提升局域网的稳定性和安全性。未来,随着技术融合,红黑树将在网络管控中持续进化,助力构建高效、安全的局域网络生态。
39 9
|
21天前
|
机器学习/深度学习 算法
基于遗传优化的双BP神经网络金融序列预测算法matlab仿真
本项目基于遗传优化的双BP神经网络实现金融序列预测,使用MATLAB2022A进行仿真。算法通过两个初始学习率不同的BP神经网络(e1, e2)协同工作,结合遗传算法优化,提高预测精度。实验展示了三个算法的误差对比结果,验证了该方法的有效性。
|
24天前
|
机器学习/深度学习 数据采集 算法
基于PSO粒子群优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
本项目展示了基于PSO优化的CNN-GRU-SAM网络在时间序列预测中的应用。算法通过卷积层、GRU层、自注意力机制层提取特征,结合粒子群优化提升预测准确性。完整程序运行效果无水印,提供Matlab2022a版本代码,含详细中文注释和操作视频。适用于金融市场、气象预报等领域,有效处理非线性数据,提高预测稳定性和效率。
|
22天前
|
算法 网络协议 Python
探秘Win11共享文件夹之Python网络通信算法实现
本文探讨了Win11共享文件夹背后的网络通信算法,重点介绍基于TCP的文件传输机制,并提供Python代码示例。Win11共享文件夹利用SMB协议实现局域网内的文件共享,通过TCP协议确保文件传输的完整性和可靠性。服务器端监听客户端连接请求,接收文件请求并分块发送文件内容;客户端则连接服务器、接收数据并保存为本地文件。文中通过Python代码详细展示了这一过程,帮助读者理解并优化文件共享系统。
|
1月前
|
机器学习/深度学习 人工智能 算法
深入解析图神经网络:Graph Transformer的算法基础与工程实践
Graph Transformer是一种结合了Transformer自注意力机制与图神经网络(GNNs)特点的神经网络模型,专为处理图结构数据而设计。它通过改进的数据表示方法、自注意力机制、拉普拉斯位置编码、消息传递与聚合机制等核心技术,实现了对图中节点间关系信息的高效处理及长程依赖关系的捕捉,显著提升了图相关任务的性能。本文详细解析了Graph Transformer的技术原理、实现细节及应用场景,并通过图书推荐系统的实例,展示了其在实际问题解决中的强大能力。
230 30

热门文章

最新文章