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

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

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

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

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

演示程序

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

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

视频演示

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

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

什么是机器学习算法

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

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

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

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

人工神经网络

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

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

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

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

  1. 一个具有2个神经元的输入层,表示一只小鸟看到的东西:
       - 与最近间隙的水平距离
       - 与最近间隙的高度差
  2. 具有6个神经元的隐藏层
  3. 具有1个神经元的输出层,提供如下动作:
       - 如果 输出 > 0.5,则扇动翅膀,否则什么也不做

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

遗传算法

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

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

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

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

适应度函数

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

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

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

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

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

替代策略

除了遗传算法(步骤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,译者:夏天,审校:主题曲哥哥。

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

时间: 2024-12-23 05:38:50

使用神经网络和遗传算法玩转 Flappy Bird的相关文章

flappy bird怎么玩?flappy bird新手攻略

flappy bird新手攻略 游戏玩法:在游戏开始后,点击屏幕,要记住是有间断性的点击屏幕,不要让小鸟掉下来. 游戏过程:让小鸟不要撞到柱子,安全穿过,穿过一个柱子得1分. 小编心得:一定要保持平和愉快的心情,点的时候不要用力太重,尽量注视着小鸟的高度,不要让其他的事情分了心. 新手注意事项: 1.建议强迫症患者.处女座朋友远离这款游戏,所谓珍爱生命,远离笨鸟: 2.玩本游戏之前确定自己的心情愉悦,因为你很快就会被这个游戏激怒,而且根本停不下来啊: 3.千万别想着一次就可以得个100多分,别想

教你从头到尾利用DQN自动玩flappy bird(全程命令提示,GPU+CPU版)【转】

转自:http://blog.csdn.net/v_JULY_v/article/details/52810219?locationNum=3&fps=1 目录(?)[-]     教你从头到尾利用DQN自动玩flappy bird全程命令提示GPUCPU 前言 第一部分GPU版教程 1NVIDIA驱动CUDAcudnn安装 下载相应文件后续 使用下载地址   11 Install NVIDIA Driver 安装NVIDIA驱动 12 Install CUDA 安装CUDA 13 Instal

Android 5.0 开发者预览版隐藏Flappy Bird克隆

在发布Android 5.0 Lollipop之后, Google发布了开发者预览版更新,加入了一些用户以后将会在正式版本中使用到的新功能,它还隐藏了一个至今最大的Android彩蛋--一个可玩的Flappy Bird克隆,用机器人和棒棒糖替换了Flappy Bird中的鸟和水管.彩蛋隐藏在设置下的"关于"选项内,游戏相比其它Flappy Bird克隆要简单,主要的区别是当玩家死掉重生后游戏偶尔会相反的方向滚入. 文章转载自 开源中国社区 [http://www.oschina.net

还记得 Flappy Bird 么?这篇文章教你如何用神经网络破朋友圈纪录!

以下内容来源于一次部门内部的分享,主要针对AI初学者,介绍包括CNN.Deep Q Network以及TensorFlow平台等内容.由于笔者并非深度学习算法研究者,因此以下更多从应用的角度对整个系统进行介绍,而不会进行详细的公式推导. 关于Flappy Bird  Flappy Bird(非官方译名:笨鸟先飞)是一款2013年鸟飞类游戏,由越南河内独立游戏开发者阮哈东(Dong Nguyen)开发,另一个独立游戏开发商GEARS Studios发布.-- 以上内来自<维基百科> Flappy

Android Wear也能玩Flappy Bird

腾讯数码讯(编译:ExyPnos)凭借着简单的操作和极易上瘾的游戏方式,http://www.aliyun.com/zixun/aggregation/2482.html">Flappy Bird在前段时间可谓红极一时.而在Flappy Bird成功之后,市面上也出现了很多仿制版Flappy Bird,Flospy Droid便是其中之一. 从游戏画面中可以看出Flospy Droid几乎就是Flappy Bird的翻版,一键式的操作以及粗糙的图形轮廓都让人马上想到Flappy Bird,

智能手表也能玩Flappy Bird啦

腾讯数码讯(编译:ExyPnos)凭借着简单的操作和极易上瘾的游戏方式,http://www.aliyun.com/zixun/aggregation/2482.html">Flappy Bird在前段时间可谓红极一时.而在Flappy Bird成功之后,市面上也出现了很多仿制版Flappy Bird,Flospy Droid便是其中之一. 从游戏画面中可以看出Flospy Droid几乎就是Flappy Bird的翻版,一键式的操作以及粗糙的图形轮廓都让人马上想到Flappy Bird,

谷歌眼镜新玩法 眨眼版Flappy Bird

[手机中国软件]越南大咖阮哈东所带来的Flappy Bird可谓是风靡全球,该游戏在全世界一时间培养了不少爱上自虐游戏的人.也正是由于此等游戏市场的存在,使得部分开发者极力想要打造出第二款Flappy Bird来.不久前,一款名为Blinky Bird的游戏问世了,看似是一款山寨版的Flappy Bird,但它却必须依靠Google Glass(谷歌眼镜)才能玩.谷歌眼镜版的Blinky Bird与触屏版Flappy Bird的游戏规则一样,玩家要控制小鸟不断地跳动并从重重障碍物中穿过.游戏的方

国内技术宅逆袭 - 发明机器人玩 Flappy Bird 轻松过百

class="post_content" itemprop="articleBody"> 两位西安的技术宅,通过识别系统+摄像头确定水管位置,控制系统+机械臂设计了一个机器人!这机器人不一般,玩起著名砸手机游戏轻松破百!技术宅果断拯救了世界!再也不用砸手机了-- 机器人玩 Flappy Bird

纯JavaScript 实现flappy bird小游戏实例代码_javascript技巧

前言: <flappy bird>是一款由来自越南的独立游戏开发者Dong Nguyen所开发的作品,游戏于2013年5月24日上线,并在2014年2月突然暴红.2014年2月,<Flappy Bird>被开发者本人从苹果及谷歌应用商店撤下.2014年8月份正式回归APP STORE,正式加入Flappy迷们期待已久的多人对战模式.游戏中玩家必须控制一只小鸟,跨越由各种不同长度水管所组成的障碍. 正文: 接下来就是一步一步来实现它 步骤1:页面布局,这儿就不多说了,页面内容如下: