使用神经网络和遗传算法玩转 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,译者:夏天,审校:主题曲哥哥。

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

相关文章
|
1月前
|
机器学习/深度学习 算法 数据挖掘
基于WOA鲸鱼优化的BiLSTM双向长短期记忆网络序列预测算法matlab仿真,对比BiLSTM和LSTM
本项目基于MATLAB 2022a/2024b实现,采用WOA优化的BiLSTM算法进行序列预测。核心代码包含完整中文注释与操作视频,展示从参数优化到模型训练、预测的全流程。BiLSTM通过前向与后向LSTM结合,有效捕捉序列前后文信息,解决传统RNN梯度消失问题。WOA优化超参数(如学习率、隐藏层神经元数),提升模型性能,避免局部最优解。附有运行效果图预览,最终输出预测值与实际值对比,RMSE评估精度。适合研究时序数据分析与深度学习优化的开发者参考。
|
1月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于GA遗传优化的BiLSTM双向长短期记忆网络序列预测算法matlab仿真,对比BiLSTM和LSTM
本内容包含基于BiLSTM与遗传算法(GA)的算法介绍及实现。算法通过MATLAB2022a/2024b运行,核心为优化BiLSTM超参数(如学习率、神经元数量),提升预测性能。LSTM解决传统RNN梯度问题,捕捉长期依赖;BiLSTM双向处理序列,融合前文后文信息,适合全局信息任务。附完整代码(含注释)、操作视频及无水印运行效果预览,适用于股票预测等场景,精度优于单向LSTM。
|
1月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于PSO粒子群优化TCN-LSTM时间卷积神经网络时间序列预测算法matlab仿真
本内容展示了一种基于粒子群优化(PSO)与时间卷积神经网络(TCN)的时间序列预测方法。通过 MATLAB2022a 实现,完整程序运行无水印,核心代码附详细中文注释及操作视频。算法利用 PSO 优化 TCN 的超参数(如卷积核大小、层数等),提升非线性时间序列预测性能。TCN 结构包含因果卷积层与残差连接,结合 LSTM 构建混合模型,经多次迭代选择最优超参数,最终实现更准确可靠的预测效果,适用于金融、气象等领域。
|
23天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于PSO粒子群优化的BiLSTM双向长短期记忆网络序列预测算法matlab仿真,对比BiLSTM和LSTM
本项目基于MATLAB2022a/2024b开发,结合粒子群优化(PSO)算法与双向长短期记忆网络(BiLSTM),用于优化序列预测任务中的模型参数。核心代码包含详细中文注释及操作视频,涵盖遗传算法优化过程、BiLSTM网络构建、训练及预测分析。通过PSO优化BiLSTM的超参数(如学习率、隐藏层神经元数等),显著提升模型捕捉长期依赖关系和上下文信息的能力,适用于气象、交通流量等场景。附有运行效果图预览,展示适应度值、RMSE变化及预测结果对比,验证方法有效性。
|
23天前
|
机器学习/深度学习 算法
基于遗传优化ELM网络的时间序列预测算法matlab仿真
本项目实现了一种基于遗传算法优化的极限学习机(GA-ELM)网络时间序列预测方法。通过对比传统ELM与GA-ELM,验证了参数优化对非线性时间序列预测精度的提升效果。核心程序利用MATLAB 2022A完成,采用遗传算法全局搜索最优权重与偏置,结合ELM快速训练特性,显著提高模型稳定性与准确性。实验结果展示了GA-ELM在复杂数据中的优越表现,误差明显降低。此方法适用于金融、气象等领域的时间序列预测任务。
|
2月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于PSO粒子群优化TCN时间卷积神经网络时间序列预测算法matlab仿真
本内容介绍了一种基于PSO(粒子群优化)改进TCN(时间卷积神经网络)的时间序列预测方法。使用Matlab2022a运行,完整程序无水印,附带核心代码中文注释及操作视频。TCN通过因果卷积层与残差连接处理序列数据,PSO优化其卷积核权重等参数以降低预测误差。算法中,粒子根据个体与全局最优位置更新速度和位置,逐步逼近最佳参数组合,提升预测性能。
|
2月前
|
传感器 算法 数据安全/隐私保护
基于GA遗传优化的三维空间WSN网络最优节点部署算法matlab仿真
本程序基于遗传算法(GA)优化三维空间无线传感网络(WSN)的节点部署,通过MATLAB2022A实现仿真。算法旨在以最少的节点实现最大覆盖度,综合考虑空间覆盖、连通性、能耗管理及成本控制等关键问题。核心思想包括染色体编码节点位置、适应度函数评估性能,并采用网格填充法近似计算覆盖率。该方法可显著提升WSN在三维空间中的部署效率与经济性,为实际应用提供有力支持。
|
1月前
|
机器学习/深度学习 数据采集 监控
基于CNN卷积神经网络和GEI步态能量提取的步态识别算法matlab仿真,对比不同角度下的步态识别性能
本项目基于CNN卷积神经网络与GEI步态能量提取技术,实现高效步态识别。算法使用不同角度(0°、45°、90°)的步态数据库进行训练与测试,评估模型在多角度下的识别性能。核心流程包括步态图像采集、GEI特征提取、数据预处理及CNN模型训练与评估。通过ReLU等激活函数引入非线性,提升模型表达能力。项目代码兼容Matlab2022a/2024b,提供完整中文注释与操作视频,助力研究与应用开发。
|
2月前
|
监控 算法 JavaScript
基于 JavaScript 图算法的局域网网络访问控制模型构建及局域网禁止上网软件的技术实现路径研究
本文探讨局域网网络访问控制软件的技术框架,将其核心功能映射为图论模型,通过节点与边表示终端设备及访问关系。以JavaScript实现DFS算法,模拟访问权限判断,优化动态策略更新与多层级访问控制。结合流量监控数据,提升网络安全响应能力,为企业自主研发提供理论支持,推动智能化演进,助力数字化管理。
69 4
|
1月前
|
机器学习/深度学习 数据采集 算法
基于GWO灰狼优化的BiLSTM双向长短期记忆网络序列预测算法matlab仿真,对比BiLSTM和LSTM
本项目基于Matlab 2022a/2024b实现,结合灰狼优化(GWO)算法与双向长短期记忆网络(BiLSTM),用于序列预测任务。核心代码包含数据预处理、种群初始化、适应度计算及参数优化等步骤,完整版附带中文注释与操作视频。BiLSTM通过前向与后向处理捕捉序列上下文信息,GWO优化其参数以提升预测性能。效果图展示训练过程与预测结果,适用于气象、交通等领域。LSTM结构含输入门、遗忘门与输出门,解决传统RNN梯度问题,而BiLSTM进一步增强上下文理解能力。

热门文章

最新文章