时间:2024-04-09 21:02:52
温根编辑
量子比特出品| 公众号QbitAI
震惊!《Flappy Bird》已经流行了很多年,但它连中文名字都没有。
你还好吗。这并不妨碍各种AI玩家利用这款游戏来练习技能。例如,今天的HTML5 教程向您展示如何使用神经网络和遗传算法来构建可以与鸟类玩耍的AI。
需要说明的是,该AI 的代码可以在教程末尾下载。所有代码均通过使用Phaser 框架的HTML5 执行。此外,神经网络使用突触神经网络库,而不是从头开始构建。
演示
上面是演示截图,要查看该算法的实际效果,请访问以下URL:
http://www.askforgametask.com/html5/tutorials/flappy/
算法该系统的算法主要基于NeuroEvolution。这种机器学习方法使用遗传算法(GA) 等进化技术来训练人工神经网络(ANN)。
所以这个例子中的机器学习=遗传算法+神经网络
人工神经网络人工神经网络是受生物神经网络结构和功能启发的机器学习算法的子集,生物神经网络由大量相互发送信号的神经元组成。
神经网络由输入层、一个或多个隐藏层和输出层组成。每层都有一些神经元,输入层和输出层神经元直接与外部环境相连。
在这个项目中,每个智能体(即小鸟)都有自己的神经网络作为AI 大脑来克服关卡。这些大脑由三层组成,结构如下:
输入层,两个神经元代表小鸟到间隙的水平和垂直距离。
1 个隐藏层,6 个神经元
输出层(即神经元)执行以下操作: 如果输出为0.5,则它会飞。
上面的文字也可以用下图来表示。
遗传算法在这里,我们使用遗传算法来训练和改进神经网络。
顾名思义,遗传算法是基于搜索的优化技术,利用自然选择和遗传过程。该算法使用相同的选择、组合交叉和变异组合来进行初始随机进化。
遗传算法实现的主要步骤是:
使用随机神经网络创建10 只鸟的初始种群。
让您的小鸟在飞行或玩游戏时使用自己的神经网络
对于每只鸟,我们计算一个适应度函数来衡量飞行质量。
一旦所有的鸟都死了,我们就使用遗传算子来评估当前种群的下一代。
重复步骤2
适应度函数上面的步骤3 详细介绍了适应度函数及其定义方式。
由于我们想要使用最好的个体(鸟类)来进化种群,因此我们需要定义一个适应度函数。
通常,适应度函数用于衡量对象的质量。我们的团队测量每只鸟并选择合适的个体来产生下一代种群。
该项目根据鸟类飞行的距离来奖励它们。此外,它还会根据鸟儿与下一个间隙之间的距离施加惩罚。这样就可以区分飞过相同距离的鸟。
替代策略实现上述步骤4 中的遗传算法的步骤如下。本质上,最好的个体雏鸡能够生存下来,它们的后代会取代表现最差的雏鸡。
现有种群中的个体根据适应度进行分类
选择并奖励前四名,并将他们直接传给下一代人口。
两个最高等级的个体交配并结合产生后代。
前四名中的两名将被随机选择并交配以产生三个后代。
从前4 个个体中随机选择2 个个体,生成2 个直接复制个体。
对每个后代应用随机突变。
代码上述代码可以通过访问以下地址获取:
https://github.com/ssusnic/机器学习-Flappy-Bird
结论在本教程中,我们成功地教会了人工智能玩一款名为“Flappy Bird”的游戏。重复几次,你就会得到一只几乎无敌的鸟。为了实现这个目标,我们使用了两种机器学习算法:人工神经网络+遗传算法。
如果你对这个项目感兴趣,以后可以尝试改变代码中的一些参数,看看会发生什么。例如,您可以更改隐藏层中的神经元数量或每一代群体中的个体数量。当然,你也可以修改适应度函数,例如添加障碍物之间的距离或重力等因素。
您还可以尝试将类似的概念应用到其他游戏中。
祝你好运!
- 就这样-
诚信招聘
量子比特现招聘一名编辑/记者,驻地北京中关村。我们正在寻找有才华和热情的学生加入我们!详情请在量子位公众号(QbitAI)对话界面回复“招聘”。
量子比特QbitAI
追踪AI技术和产品新进展