神经网络+遗传算法+游戏=?
liebian365 2024-11-19 06:33 20 浏览 0 评论
这就是我创建AI的方式 彻底击败了这个游戏!
游戏:规则与动作
首先,让我描述一下游戏。 正如您可能从gif中猜到的那样,该游戏的目标是避免红色横条并将绿色生物向前移动。 您走得越远,您的分数就会越高。 为了使游戏逼真,我实现了重力,这意味着如果生物向上移动,它必须以给定的加速度下降。 但是它如何/何时跳跃? 为了能够跳跃,它必须在地面上。 在此位置,生物可以在地面上施加作用力,地面将在其上施加反作用力。 这种反应将帮助它跳跃(就像我们跳跃一样)。 该力的x分量将在x方向上产生加速度,并且在y方向上也是如此。
注意:为简单起见,我没有实现动作-反应机制,而是仅使用加速功能。 当生物在地面上时,可以确定它的x和y加速度!
面临的挑战是找到这些加速度的值,以便它可以安全地跳过下一个红色条! 请注意,该生物在空中时无法改变其速度(为什么?留给读者看)。 与地面的碰撞是无弹性的,因此不会自动反弹。
建立人工智能
有许多方法可以解决这类问题。 在这里,我将应用称为神经进化的东西,它是神经网络和遗传算法的结合。
I.神经网络(NN)
为了能够"思考"(何时以及如何跳跃)生物,需要某种决策模型。 在我的方法中,我将神经网络用作小朋友的大脑。 我使用了一个小nn,在输入层包含6个节点,在隐藏层包含8个节点,在输出层包含2个节点。 但是在这6个输入节点中发生了什么,在2个输出节点中发生了什么? 我们首先来看一下输出节点。 2个节点决定两个方向上的加速度值。 正如我之前所说,该生物只需确定其x加速度和y加速度即可。
对于输入节点,可以有许多可能的功能集。 目的是向大脑提供有关该生物当前状态及其周围环境的尽可能多的信息。 我正在使用这6条信息(您能提供一套更好的功能吗?)
二。 遗传算法(GA)
顾名思义,它与遗传学有关。 这是一种进化算法,我们试图模仿生物进化来找到给定问题的最佳解决方案。 我们从一组解决方案开始,然后从中选择最佳解决方案,并让它们不断发展。 宽松地说,每种遗传算法都遵循5个步骤。
· 初始人口:初始解决方案。 每个解决方案都有确定其行为的某些基因(一组参数)。 基因在个体之间变化,这被称为变异。
注意:如果初始种群没有变化,那么每个解决方案都会以完全相同的方式发展,我们将无法探索其他解决方案!
· 适应度函数:一种数学函数,通过为每个解决方案分配适应性得分来确定解决方案的适合度(最佳)。 这将对下一步有所帮助。
· 选择:在这一步中,我们选择最适合的个体,并允许他们将其遗传信息传递给下一代。
· 交叉:将两个(或多个)父母的基因结合起来,产生一个下一代。
· 变异:在将遗传信息从当前一代转移到下一代遗传信息时,很少一部分信息会随机更改。
注意:由于突变,将引入一些新的特征(属性),以"希望"使我们的解决方案更加优化。 "希望如此",因为诱变是随机的,也可能产生负面影响!
三, 结合NN和GA
现在是大展示的时候了。 您将如何结合这两种完全不同的算法? 主要思想是将nn(大脑)的权重视为基因。 最初,我们从250个生物组成,每个生物都有其独立的大脑。 为了改变总体,我们随机初始化这些神经网络的权重。 我们将最好的权重传递给下一代。 您将如何确定哪个球更好? 我们将使用健身得分。 就我而言,适应度得分是该生物覆盖的距离的线性函数。 因此,距离最大的生物产生后代的可能性更大。 因此,他们的nn的权重将被转移到下一代。 现在,让我在这里提及一些细节…
i)我没有使用交叉的概念,因此一个生物可以在不与另一个生物交配的情况下创造其后代。
ii)创建后代(在这种情况下)是指复制一个生物的nn的权重,并在添加一些突变后使用先前生物的权重制作一个新的nn。
iii)突变不过是随机改变一小部分重量(通常小于2%)的重量而已。
一遍又一遍地执行此过程,以模仿生物进化,并经过许多代人,我们希望获得一些具有最佳权重的生物。 换句话说,经过几代人之后,我们将有一些小家伙可以决定x和y加速度的值,以便它可以跳过下一个红色条。 在机器学习方面,我们已经成功地训练了我们的模型:D
但是我们从未使用过反向传播!
在传统的深度学习中,我们使用基于梯度的优化技术(aka反向传播)来训练神经网络。 在这种情况下,我们采用最后一层的错误并传播其反向词,然后在每一层中计算梯度,并根据此值更改相应层的权重。 但是在这种情况下(GA + NN),我们无法执行反向传播。 为什么? 因为我们无法从最后一层计算误差(因为我们不了解基本事实)。 我们完全依赖于学习的选择和变异。
想看人工智能 学习? 这是视频…
访问网络应用…
https://suji04.github.io/jumpingameAI/
游戏代码和AI …
https://github.com/Suji04/jumpingameAI
(本文翻译自Sujan Dutta的文章《Neural Network + Genetic Algorithm + Game = ?》,参考:https://towardsdatascience.com/neural-network-genetic-algorithm-game-15320b3a44e3)
相关推荐
- “版本末期”了?下周平衡补丁!国服最强5套牌!上分首选
-
明天,酒馆战棋就将迎来大更新,也聊了很多天战棋相关的内容了,趁此机会,给兄弟们穿插一篇构筑模式的卡组推荐!老规矩,我们先来看10职业胜率。目前10职业胜率排名与一周前基本类似,没有太多的变化。平衡补丁...
- VS2017 C++ 程序报错“error C2065:“M_PI”: 未声明的标识符"
-
首先,程序中头文件的选择,要选择头文件,在文件中是没有对M_PI的定义的。选择:项目——>”XXX属性"——>配置属性——>C/C++——>预处理器——>预处理器定义,...
- 东营交警实名曝光一批酒驾人员名单 88人受处罚
-
齐鲁网·闪电新闻5月24日讯酒后驾驶是对自己和他人生命安全极不负责的行为,为守护大家的平安出行路,东营交警一直将酒驾作为重点打击对象。5月23日,东营交警公布最新一批饮酒、醉酒名单。对以下驾驶人醉酒...
- Qt界面——搭配QCustomPlot(qt platform)
-
这是我第一个使用QCustomPlot控件的上位机,通过串口精确的5ms发送一次数据,再将读取的数据绘制到图表中。界面方面,尝试卡片式设计,外加QSS简单的配了个色。QCustomPlot官网:Qt...
- 大话西游2分享赢取种族坐骑手办!PK趣闻录由你书写
-
老友相聚,仗剑江湖!《大话西游2》2021全民PK季4月激燃打响,各PK玩法鏖战齐开,零门槛参与热情高涨。PK季期间,不仅各种玩法奖励丰厚,参与PK趣闻录活动,投稿自己在PK季遇到的趣事,还有机会带走...
- 测试谷歌VS Code AI 编程插件 Gemini Code Assist
-
用ClaudeSonnet3.7的天气测试编码,让谷歌VSCodeAI编程插件GeminiCodeAssist自动编程。生成的文件在浏览器中的效果如下:(附源代码)VSCode...
- 顾爷想知道第4.5期 国服便利性到底需优化啥?
-
前段时间DNF国服推出了名为“阿拉德B计划”的系列改版计划,截至目前我们已经看到了两项实装。不过关于便利性上,国服似乎还有很多路要走。自从顾爷回归DNF以来,几乎每天都在跟我抱怨关于DNF里面各种各样...
- 掌握Visual Studio项目配置【基础篇】
-
1.前言VisualStudio是Windows上最常用的C++集成开发环境之一,简称VS。VS功能十分强大,对应的,其配置系统较为复杂。不管是对于初学者还是有一定开发经验的开发者来说,捋清楚VS...
- 还嫌LED驱动设计套路深?那就来看看这篇文章吧
-
随着LED在各个领域的不同应用需求,LED驱动电路也在不断进步和发展。本文从LED的特性入手,推导出适合LED的电源驱动类型,再进一步介绍各类LED驱动设计。设计必读:LED四个关键特性特性一:非线...
- Visual Studio Community 2022(VS2022)安装图文方法
-
直接上步骤:1,首先可以下载安装一个VisualStudio安装器,叫做VisualStudioinstaller。这个安装文件很小,很快就安装完成了。2,打开VisualStudioins...
- Qt添加MSVC构建套件的方法(qt添加c++11)
-
前言有些时候,在Windows下因为某些需求需要使用MSVC编译器对程序进行编译,假设我们安装Qt的时候又只是安装了MingW构建套件,那么此时我们该如何给现有的Qt添加一个MSVC构建套件呢?本文以...
- Qt为什么站稳c++GUI的top1(qt c)
-
为什么现在QT越来越成为c++界面编程的第一选择,从事QT编程多年,在这之前做C++界面都是基于MFC。当时为什么会从MFC转到QT?主要原因是MFC开发界面想做得好看一些十分困难,引用第三方基于MF...
- qt开发IDE应该选择VS还是qt creator
-
如果一个公司选择了qt来开发自己的产品,在面临IDE的选择时会出现vs或者qtcreator,选择qt的IDE需要结合产品需求、部署平台、项目定位、程序猿本身和公司战略,因为大的软件产品需要明确IDE...
- Qt 5.14.2超详细安装教程,不会来打我
-
Qt简介Qt(官方发音[kju:t],音同cute)是一个跨平台的C++开库,主要用来开发图形用户界面(GraphicalUserInterface,GUI)程序。Qt是纯C++开...
- Cygwin配置与使用(四)——VI字体和颜色的配置
-
简介:VI的操作模式,基本上VI可以分为三种状态,分别是命令模式(commandmode)、插入模式(Insertmode)和底行模式(lastlinemode),各模式的功能区分如下:1)...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- “版本末期”了?下周平衡补丁!国服最强5套牌!上分首选
- VS2017 C++ 程序报错“error C2065:“M_PI”: 未声明的标识符"
- 东营交警实名曝光一批酒驾人员名单 88人受处罚
- Qt界面——搭配QCustomPlot(qt platform)
- 大话西游2分享赢取种族坐骑手办!PK趣闻录由你书写
- 测试谷歌VS Code AI 编程插件 Gemini Code Assist
- 顾爷想知道第4.5期 国服便利性到底需优化啥?
- 掌握Visual Studio项目配置【基础篇】
- 还嫌LED驱动设计套路深?那就来看看这篇文章吧
- Visual Studio Community 2022(VS2022)安装图文方法
- 标签列表
-
- wireshark怎么抓包 (75)
- qt sleep (64)
- cs1.6指令代码大全 (55)
- factory-method (60)
- sqlite3_bind_blob (52)
- hibernate update (63)
- c++ base64 (70)
- nc 命令 (52)
- wm_close (51)
- epollin (51)
- sqlca.sqlcode (57)
- lua ipairs (60)
- tv_usec (64)
- 命令行进入文件夹 (53)
- postgresql array (57)
- statfs函数 (57)
- .project文件 (54)
- lua require (56)
- for_each (67)
- c#工厂模式 (57)
- wxsqlite3 (66)
- dmesg -c (58)
- fopen参数 (53)
- tar -zxvf -c (55)
- 速递查询 (52)