使用神经网络+遗传算法玩转Flappy Bird | 教程

简介:
本文来自AI新媒体量子位(QbitAI)

640?wx_fmt=png&wxfrom=5&wx_lazy=1

震惊!《Flappy Bird》火了这么多年,竟然没有中文名字。

没事。这不妨碍各路AI大触用这款游戏练手。比方说今天这个HTML5教程,就是教你使用神经网络+遗传算法,搭建一个玩转小鸟的AI。

提前说一下,教程最后有这个AI的代码下载。所有的代码都是使用Phaser框架使用HTML5完成的。另外,神经网络使用了突触神经网络(Synaptic Neural Network)库,而不是从零开始搭建。

Demo

640?wx_fmt=png&wxfrom=5&wx_lazy=1

上面是Demo演示的截图,访问下面这个网址,能够看到这套算法的实际效果。

http://www.askforgametask.com/html5/tutorials/flappy/

不方便观看上面在线Demo,或者没有耐心的同学,可以选择观看下面这个视频演示短片,中间有几倍速度的画面快进。


算法

这套系统的算法,主要是基于NeuroEvolution(神经进化)。这种机器学习方法,使用遗传算法(GA)等进化方法来训练人工神经网络(ANN)。

也就是说,这个例子中的机器学习=遗传算法+神经网络

人工神经网络

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

一个神经网络由输入层,一个或多个隐藏层,以及输出层组成。每层都有一些神经元,输入和输出层的神经元直接与外部环境相连。

在这个项目中,每个智能体(也就是小鸟)都有自己的神经网络作为闯关的AI大脑。这些大脑由三层组成,结构如下:

  1. 一个输入层,两个神经元,代表小鸟到豁口的水平距离和垂直距离
  2. 一个隐藏层,六个神经元
  3. 一个输出层,一个神经元,执行如下动作:如果输出>0.5就飞一下

上述文字,也可以用下面这张图表示:

640?wx_fmt=png&wxfrom=5&wx_lazy=1

遗传算法

我们在这里使用遗传算法,来训练和改进神经网络。

遗传算法顾名思义,是一种借鉴了自然选择和遗传过程的基于搜索的优化技术。这种算法使用相同的选择、组合交叉和变异的组合,来进行初始的随机演化。

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

  1. 使用随机神经网络创建10个初始的小鸟(种群)
  2. 让小鸟使用他们自己的神经网络,同时起飞玩游戏
  3. 对于每个小鸟,计算适应度函数来衡量飞行质量
  4. 当所有小鸟死亡时,使用遗传算子把当前种群评估到下一代
  5. 重复步骤2

适应度函数

对于上面的第3步,我们深入谈一下适应度函数的细节,以及如何定义。

由于我们想要使用最好的个体(小鸟)来进化种群,所以需要定义一个适应度函数。

一般来说,适应度函数用来衡量对象的质量。我们队每一只小鸟都进行测量,并从中选择合适的个体,用以生成下一代种群。

在这个项目中,我们按照小鸟的飞行距离给予奖励。另外,我们会根据小鸟和下一个豁口的距离给予惩罚。按照这种方式,就可以区别哪些飞行了同样距离的小鸟。

640?wx_fmt=png&wxfrom=5&wx_lazy=1

替代策略

对于上面第4步中遗传算法,下面是实现的步骤。基本上,最好的小鸟个体会生存下来,它们的后代会取代表现最差的那些。

  1. 现有种群的个体按照适应度进行排序
  2. 选择前四名给予奖励,直接把它们传给下一代种群
  3. 排名最高的两个个体,进行交叉组合,生成一个后代
  4. 前四名中随机选择两个个体,交叉组合产生三个后代
  5. 前四名中随机选择两个个体,生成两个直接复制的后代
  6. 对于每个后代,施加一些随机变异

代码

上述代码,可以访问如下地址获取:

https://github.com/ssusnic/Machine-Learning-Flappy-Bird

结论

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

如果你对这个项目感兴趣,未来可以尝试改变代码中的一些参数,看看会发生什么。例如,可以改变隐藏层中的神经元数量或者每一代种群的个体数量。当然还可以对适应度函数进行修改,比方加入障碍物之间的距离、重力等等因素。

以及,你可以尝试把类似的理念应用到其他游戏中去!

祝好运~

本文作者:问耕
原文发布时间:2017-08-21
相关文章
|
17天前
|
机器学习/深度学习 算法 TensorFlow
动物识别系统Python+卷积神经网络算法+TensorFlow+人工智能+图像识别+计算机毕业设计项目
动物识别系统。本项目以Python作为主要编程语言,并基于TensorFlow搭建ResNet50卷积神经网络算法模型,通过收集4种常见的动物图像数据集(猫、狗、鸡、马)然后进行模型训练,得到一个识别精度较高的模型文件,然后保存为本地格式的H5格式文件。再基于Django开发Web网页端操作界面,实现用户上传一张动物图片,识别其名称。
47 1
动物识别系统Python+卷积神经网络算法+TensorFlow+人工智能+图像识别+计算机毕业设计项目
|
15天前
|
机器学习/深度学习 人工智能 算法
深度学习入门:理解神经网络与反向传播算法
【9月更文挑战第20天】本文将深入浅出地介绍深度学习中的基石—神经网络,以及背后的魔法—反向传播算法。我们将通过直观的例子和简单的数学公式,带你领略这一技术的魅力。无论你是编程新手,还是有一定基础的开发者,这篇文章都将为你打开深度学习的大门,让你对神经网络的工作原理有一个清晰的认识。
|
16天前
|
机器学习/深度学习 人工智能 算法
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
植物病害识别系统。本系统使用Python作为主要编程语言,通过收集水稻常见的四种叶片病害图片('细菌性叶枯病', '稻瘟病', '褐斑病', '稻瘟条纹病毒病')作为后面模型训练用到的数据集。然后使用TensorFlow搭建卷积神经网络算法模型,并进行多轮迭代训练,最后得到一个识别精度较高的算法模型,然后将其保存为h5格式的本地模型文件。再使用Django搭建Web网页平台操作界面,实现用户上传一张测试图片识别其名称。
66 21
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
|
16天前
|
机器学习/深度学习 人工智能 算法
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
鸟类识别系统。本系统采用Python作为主要开发语言,通过使用加利福利亚大学开源的200种鸟类图像作为数据集。使用TensorFlow搭建ResNet50卷积神经网络算法模型,然后进行模型的迭代训练,得到一个识别精度较高的模型,然后在保存为本地的H5格式文件。在使用Django开发Web网页端操作界面,实现用户上传一张鸟类图像,识别其名称。
60 12
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
|
15天前
|
机器学习/深度学习 算法 TensorFlow
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
交通标志识别系统。本系统使用Python作为主要编程语言,在交通标志图像识别功能实现中,基于TensorFlow搭建卷积神经网络算法模型,通过对收集到的58种常见的交通标志图像作为数据集,进行迭代训练最后得到一个识别精度较高的模型文件,然后保存为本地的h5格式文件。再使用Django开发Web网页端操作界面,实现用户上传一张交通标志图片,识别其名称。
44 6
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
|
11天前
|
机器学习/深度学习 人工智能 算法
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
文本分类识别系统。本系统使用Python作为主要开发语言,首先收集了10种中文文本数据集("体育类", "财经类", "房产类", "家居类", "教育类", "科技类", "时尚类", "时政类", "游戏类", "娱乐类"),然后基于TensorFlow搭建CNN卷积神经网络算法模型。通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型,并保存为本地的h5格式。然后使用Django开发Web网页端操作界面,实现用户上传一段文本识别其所属的类别。
24 1
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
|
3天前
|
传感器 算法 C语言
基于无线传感器网络的节点分簇算法matlab仿真
该程序对传感器网络进行分簇,考虑节点能量状态、拓扑位置及孤立节点等因素。相较于LEACH算法,本程序评估网络持续时间、节点死亡趋势及能量消耗。使用MATLAB 2022a版本运行,展示了节点能量管理优化及网络生命周期延长的效果。通过簇头管理和数据融合,实现了能量高效和网络可扩展性。
|
8天前
|
人工智能 算法 安全
深度讲解-互联网算法备案指南和教程
随着人工智能和大数据技术的发展,互联网算法在内容推荐、用户画像等领域日益重要,但也带来了安全风险和合规挑战。国家互联网信息办公室为此发布了《互联网算法备案管理规定》,要求具有舆论属性或社会动员能力的互联网信息服务提供者进行算法备案,以确保算法透明性和合规性,维护网络健康秩序。唯安创远AI合规专家将解析备案的必要性、流程及其对企业的影响,帮助企业顺利完成备案。
38 3
|
12天前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习还不如浅层网络?RL教父Sutton持续反向传播算法登Nature
【9月更文挑战第24天】近年来,深度学习在人工智能领域取得巨大成功,但在连续学习任务中面临“损失可塑性”问题,尤其在深度强化学习中更为突出。加拿大阿尔伯塔大学的研究人员提出了一种名为“持续反向传播”的算法,通过选择性地重新初始化网络中的低效用单元,保持模型的可塑性。该算法通过评估每个连接和权重的贡献效用来决定是否重新初始化隐藏单元,并引入成熟度阈值保护新单元。实验表明,该算法能显著提升连续学习任务的表现,尤其在深度强化学习领域效果明显。然而,算法也存在计算复杂性和成熟度阈值设置等问题。
25 2
|
11天前
|
机器学习/深度学习 人工智能 算法
【果蔬识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
【果蔬识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台。果蔬识别系统,本系统使用Python作为主要开发语言,通过收集了12种常见的水果和蔬菜('土豆', '圣女果', '大白菜', '大葱', '梨', '胡萝卜', '芒果', '苹果', '西红柿', '韭菜', '香蕉', '黄瓜'),然后基于TensorFlow库搭建CNN卷积神经网络算法模型,然后对数据集进行训练,最后得到一个识别精度较高的算法模型,然后将其保存为h5格式的本地文件方便后期调用。再使用Django框架搭建Web网页平台操作界面,实现用户上传一张果蔬图片识别其名称。
31 0
【果蔬识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台

热门文章

最新文章

下一篇
无影云桌面