基于神经网络和遗传算法的飞鹦鹉机器学习

news2025/1/4 20:14:35

这是一个HTML5项目的源代码,该项目使用神经网络和遗传算法在Flappy Bird视频游戏中实现机器学习算法。该程序教一只小鸟如何以最佳方式拍打,以便尽可能长时间地安全地飞过障碍物。
在这里插入图片描述

所有代码都是用HTML5编写的,使用Phaser框架和Synaptic Neural Network库来实现神经网络。

项目运行

在此之前需要安装http-server用于启动服务

npm install -g http-server

安装完在项目根目录启动http-server

在这里插入图片描述
打开8080端口
在这里插入图片描述
点击source

在这里插入图片描述

神经网络架构

为了玩游戏,每个单元(鸟)都有自己的神经网络,由接下来的 3 层组成:

  1. 具有 2 个神经元的输入层,呈现鸟所看到的内容:

    1)鸟与鸟之间的水平距离最近的间隙
    2)鸟的高度差与最近的空隙
    
  2. 具有 6 个神经元的隐藏层

  3. 具有 1 个神经元的输出层,用于提供如下操作:

    if output > 0.5 then flap else do nothing
    

使用Synaptic神经网络库来实现整个人工神经网络,而不是从头开始创建一个新的神经网络。

机器学习的主要概念

该程序中实现的机器学习的主要概念是基于神经进化形式。它使用遗传算法等进化算法来训练人工神经网络。以下是主要步骤:

使用随机神经网络创建一个 10 个单位(鸟类)的新种群

让所有单位使用自己的神经网络同时玩游戏

对于每个单位,计算其适应度函数以衡量其质量,如下所示:

fitness = total travelled distance - distance to the closest gap

当所有单位都被杀死时,使用遗传算法运算符(选择、交叉和突变)评估当前种群到下一个种群,如下所示:

  1. 对当前人口的单位进行排序,按它们的适合度排名降序排列
  2. 选择前4个单位,并将其标记为当前人口的获胜者
    3.4个获胜者直接传递给下一个种群
  3. 为了填充下一个种群的剩余部分,创建6个后代,如下所示:
  • 1个后代由两个最佳优胜者交叉产生
  • 3个后代由两个随机获胜者交叉产生
  • 2个后代是两个随机获胜者的直接副本
  1. 为了增加一些变异,对每个后代应用随机突变。

实现要求

由于该程序是使用Phaser框架和Synaptic Neural Network库用HTML5编写的,因此需要这些文件:

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

gameplay.js

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

App.Main,具有以下基本功能的主要例程:

  • preload() 预加载所有资产

  • create() 创建所有对象并初始化新的遗传算法对象

  • update() 运行主循环,其中使用 AI 神经网络玩 Flappy Bird 游戏,并使用遗传算法进化种群

  • drawStatus() 显示所有单位的信息

  • TreeGroup Class,扩展了相位器组类以表示移动障碍。此组包含一个顶部和一个底部树精灵。

  • Tree Class,扩展相位器精灵类以表示树精灵。

  • Bird Class,扩展相位器精灵类以表示鸟精灵。

  • Text Class、用于绘制文本的扩展相位器位图文本类。

genetic.js

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

GeneticAlgorithm Class,处理所有遗传算法操作的主类。它需要两个参数:max_units设置人口中的单位总数,top_units设置用于进化人口的顶级单位(入选者)数量。以下是它的基本功能:

  • reset() 以重置遗传算法参数
  • createPopulation() 以创建新人口
  • 激活Brain()激活单元的AI神经网络,并根据输入获取其输出动作
  • evolvePopulation() 通过使用遗传运算符(选择、交叉和突变)进化种群
  • selection() 从当前人口中选择最佳单位
  • crossOver() 在两个父级之间执行单点交叉
  • 突变()对后代执行随机突变

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/118676.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ssh 命令

勿以恶小而为之,勿以善小而不为---- 刘备 简单说,SSH是一种网络协议,用于计算机之间的加密登录。 如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的&#xff0c…

SpringBoot 自动装配原理,一文掌握!|原创

本文详细讲解了 SpringBoot 自动装配原理,可以直接拉到最后看总结。由于 Spring 源码比较复杂,是需要一些基础的。如果有不懂的地方,欢迎提问!点击上方“后端开发技术”,选择“设为星标” ,优质资源及时送达…

【C语言】函数详解

🔥🔥 欢迎来到小林的博客!!       🛰️博客主页:✈️小林爱敲代码       🛰️专栏:✈️C语言快速入门       🛰️欢迎关注:👍点…

【Spring【IOC】】——17、@Resource注解和@Inject注解?

📫作者简介:zhz小白 公众号:小白的Java进阶之路 专业技能: 1、Java基础,并精通多线程的开发,熟悉JVM原理 2、熟悉Java基础,并精通多线程的开发,熟悉JVM原理,具备⼀定的线…

【算法题解】6.合并两个有序数组

文章目录题目解法一:双指针解题思路图解代码实现复杂度分析解法二:逆向双指针解题思路图解代码实现复杂度分析题目 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素…

Plaxis软件:Python命令流自动建模与应用

有限单元法在岩土工程问题中应用非常广泛,很多商业软件如Plaxis/Abaqus/Comsol等都采用有限单元解法。在使用各大软件进行数值模拟建模的过程中,您是否发现GUI界面中重复性的点击输入工作太繁琐?从而拖慢了设计或方案必选进程?针对…

day30【代码随想录】回溯之分割回文串、复原IP地址、子集

文章目录前言一、分割回文串(力扣131)二、复原IP地址(力扣93)三、子集(力扣78)总结前言 1、分割回文串 2、复原IP地址 3、子集 一、分割回文串(力扣131) 给你一个字符串 s&#xf…

Win10如何显示文件后缀名?显示后缀名的简单方法

现在大多数用户使用的电脑都是Win10系统,有时我们重装电脑系统,会发现电脑出现一些问题,比如文件后缀名不显示出来。如何显示文件后缀名?方法很简单,跟着下面的详细操作步骤走,轻轻松松Get回消失的文件后缀…

Http和Https和SSL工作原理

相关概念 Http:超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上,是Web协议族中非常重要的一个协议。协议版本包含Http1.0、Http1.1 和Http2.0. Https&…

【3D游戏基础】蒙皮骨骼动画与骨架

效果目标!画出蒙皮动画的骨架。视频https://www.bilibili.com/video/BV1pM411m7YwPPThttps://zfxdvouj61.feishu.cn/file/boxcnwgESO6zdQetO7oNhKboNsd以下为PPT文字稿,建议还是看视频讲讲自己对蒙皮骨骼动画的理解,并在 Cocos Creator 3.6 中…

全志Tina Linux MPP (多媒体框架)开发指南支持百问网T113 D1-H哪吒DongshanPI-D1s V853-Pro等开发板

1 简述 整理 MPP sample 使用说明文档的目的是:使 MPP sample 更好用。 2 简介 MPP sample 一般存放在 MPP Middleware 的 sample 目录下。此外,MPP Framework 的 demo 目录下也有一些 sample。 本文档主要介绍 MPP Middleware 各 sample 的基本使用方…

【再学Tensorflow2】TensorFlow2的建模流程:疫情发展趋势分析

TensorFlow2的建模流程:疫情发展趋势分析时间序列简介基本概念平稳性白噪声随机游走(Random Walk)识别一个时间序列Augmented Dickey-Fuller Test(ADF)Kwiatkowski-Phillips-Schmidt-Shin Test(KPSS)时间序列模型预测准确度的衡量衡量预测准确…

舆情监测系统适用哪些行业,如何选择舆情监测系统?

当前,去网上搜索第三方舆情监测工具可以看到很多家不同公司的产品,比如TOOM舆情监测系统,那我们该如何选择舆情监测系统?舆情监测系统到底适用什么行业,带着这些疑问,接下来我们简单了解一下。 ​一、舆情监测系统适…

6.前端笔记-JS-流程控制

1、流程控制 通过控制代码的执行顺序实现我们要完成的功能。控制代码按照什么结构顺序执行 有三种结构:顺序结构、分支结构、循环结构 1.1 顺序流程控制 最简单、最基本的流程控制。程序按照代码的先后顺序,依次执行 1.2 分支流程控制 从上到下执行…

ArcGIS基础实验操作100例--实验8绘制中点连线

本实验专栏来自于汤国安教授《地理信息系统基础实验操作100例》一书 实验平台:ArcGIS 10.6 实验数据: 请访问实验1(传送门) 基础编辑篇--实验8 绘制中点连线 目录 一、实验背景 二、实验数据 三、实验步骤 (1&…

【操作系统】CPU平均负载和使用率

1.CPU的平均负载 (1)什么是CPU的平均负载 单位时间内系统处于【可运行状态】和【不可中断状态】的平均进程数,就是平均活跃进程数,和CPU使用率并没有直接关系 可运行状态 正在使用CPU或者正在等待CPU的进程用 ps aux命令看到的…

【OpenCV-Python】教程:9-1 级联分类器训练

OpenCV Python 级联分类器训练 【介绍】 使用增强的弱分类器级联包括两个主要阶段: 训练和检测阶段。使用基于HAAR或LBP模型的检测,在object detection tutorial中进行了描述。本文档概述了训练您自己的增强弱分类器级联所需的功能。当前的手册将走过所有不同的阶段: 收集训练…

机器学习-决策树算法原理及实现-附python代码

1.决策树-分类树 sklearn.tree.DecisionTreeClassifier官方地址: https://scikit-learn.org/stable/modules/generated/sklearn.tree.DecisionTreeClassifier.html#sklearn.tree.DecisionTreeClassifier 在机器学习中,决策树是最常用也是最强大的监督学…

用双因子认证2FA替换Google authenticator谷歌令牌,助力准上市公司实现等保安全审计

21世纪初,某人力资源科技公司试水HR SaaS赛道,以大客户为目标客群,持续深耕,稳扎稳打,如今已是一家专门为中大型企业提供一体化HR SaaS及人才管理产品/解决方案的头部企业。其产品覆盖了从员工招募、入职、管理到离职的…

Linux系统安装Mysql5.7(详解)

Linux系统上安装软件的3种方式: 本次使用二进制发布包安装方式安装Mysql5.7 (一)下载Mysql5.7的二进制包 这里可以选择去Mysql官网下载,但是由于服务在外国,下载速度实在是太慢了。这里我们可以选择去阿里云的镜像网…