遗传算法原理案例及MATLAB代码
文章目录
- 遗传算法的原理
- 交叉
- 变异
- 计算适应度
- 选择操作
- 遗传算法的案例
- 初始化种群
- 计算自适应度
- 选择操作
- 交叉操作
- 变异操作
- MATLAB
遗传算法的原理
遗传算法的科学严谨的原理都在百度百科(遗传算法地址)中由详细解释,在这里我只表达我所理解的遗传算法原理。
之所以叫遗传算法,原因是该算法是根据大自然中生物体进化规律而设计提出的,通过计算机的方法模拟自然进化过程搜索最优解。
遗传在百度百科中的解释:是指亲代表达相应性状的基因通过无性繁殖或有性繁殖传递给后代,从而使后代获得其父母遗传信息的现象。基因就是染色体,计算机方法也就是通过模拟染色体的行为来求得最优解。遗传算法对染色体的模拟主要是交叉和变异。
交叉
在染色体中就是染色体片段的互换,可能是与其他个体交叉,也可能是本身的染色体交叉互换,每次交叉互换就会得到两个新的个体,从而得到两个个新的群体。
变异
在这里的变异并不是缺失、重复、倒位、易位,而是在群体中的个体串的某些基因座上的基因值作变动,如下图所示:
将原群体进行变异操作,又得到一个新的群体。
计算适应度
完成以上染色体的行为的步骤后,就产生了新的三个群体。然后进行发育,就是用获得的基因,通过一定的计算得到相对应的结果,在生物的角度看,就是从受精卵发育成一个完整个体。在遗传算法中也就是计算适应度。
选择操作
现在我们就有四个群体,交叉得到的两个群体,变异得到的一个群体,和原来的群体。计算适应度后,择优选择。
不断重复以上操作,最终得到最优秀的群体。
遗传算法的案例
以f(x)=xsin(x)cos(x)f(x)=x\sin(x)\cos(x)f(x)=xsin(x)cos(x)为例,下图就是f(x),(x∈[0,2π])f(x),(x\in[0,2\pi])f(x),(x∈[0,2π])的图例:
我们最终的目标是得到的该段函数的最大值,由图可以很容易看出来这个最大值的横坐标就是x=4x=4x=4附近,如下图所示:
虽然我们可以直观的看出来最大值,可是是用一般算法可能会陷入局部最优,也就是最后的结果可能是横坐标x=1x=1x=1的点取值。因此,我们使用遗传算法来求解这个问题。
初始化种群
如上图所示我们需要先初始化种群,也就是产生第一代个体,第一代个体的产生是随机的,在这里,我使用的是十进制编码去模拟基因,也可以用二进制编码,但是二进制编码的精度感觉没有十进制高。模拟的基因长度是5,随机产生多个基因,如下表随机产生的基因:
第一代的个体 | 9 3 4 6 8 | 7 6 9 0 7 | 3 0 8 2 6 | … |
---|
现在可能有的同学有些疑问,为啥这一串数字就是基因呢?
从基因的角度上说基因其实就是由携带了一定信息的DNA构成的,而这串数字也携带了一些信息。但是这个可能还是有点抽象,这是因为就算直接看真正的基因也是看不出什么东西来的,只有长成个体后,才知道这段基因决定了那些性状,就像高中课本中果蝇的不同表现型一样。现在我们就需要让这串基因“长大”,看看这串基因代表什么。
由于我们使用的是十进制编码,所以,我们需要用到十进制编码器[10000;1000;100;10;1][10000; 1000; 100; 10 ;1][10000;1000;100;10;1],以第一个个体基因9 3 4 6 8为例:
计算自适应度
首先需要解码,就是将9 3 4 6 8与解码器[10000;1000;100;10;1][10000; 1000; 100; 10 ;1][10000;1000;100;10;1]相乘相加,再相除对应的数:
9×10000+3×1000+4×100+6×10+8×1=934689\times10000+3\times1000+4\times100+6\times10+8\times1=93468 9×10000+3×1000+4×100+6×10+8×1=93468
x1=93468÷(9999×2×π)=5.8728x_1= 93468\div(9999\times2\times\pi)=5.8728 x1=93468÷(9999×2×π)=5.8728
之所以除9999,是因为十位编码范围为[0,9999][0,9999][0,9999],再除2π2\pi2π,是因为这是xxx的取值范围。再将x1=5.8728x_1=5.8728x1=5.8728带入f(x)f(x)f(x),得f(x1)=−2.1484f(x_1)=-2.1484f(x1)=−2.1484,也就是说9 3 4 6 8这串基因最后的表现型是−2.1484-2.1484−2.1484。如下图所示:
我们生成20个个体,如下图所示:
以上的步骤实际上就是计算自适应度(我也不知道为啥叫自适应度,可能还是知识浅薄
遗传算法原理案例及MATLAB代码相关推荐
- 【红外技术】非均匀校正之两点校正(原理标定方法MATLAB代码效果)
创作时间:2022-05-06 非均匀校正之两点校正(原理&MATLAB代码&效果) 目录: 1.原理&标定方法 2.代码 3.效果 正文: 先看下效果 1.原理 红外焦平面的 ...
- 遗传算法之路径规划matlab代码(栅格地图)含详细注释
遗传算法本人在另一篇博文中已经有记载,本次将遗传算法用于路径规划的代码记录于此,用于大家一起学习 一起进步,如果有用,欢迎点赞. 1.基于遗传算法的栅格法机器人路径规划main.m % 基于遗传算法的 ...
- 遗传算法介绍并附上Matlab代码
摘自http://www.cnblogs.com/hxsyl/p/5240905.html 该文中后面的代码是我在学校里面编写的,当时应该是可以用的,里面的图确实是我画出来的,但是我现在不确定是否正确 ...
- 遗传算法原理简介及其MATLAB实践
目录 遗传算法简介 遗传算法的深入理解: 遗传算法的MATLAB实现 [例]BP神经网络初始权值和阈值优化 遗传算法简介 遗传算法(Genetic Algorithm,GA)是一种进化算法,其基本原理 ...
- 暗原色原理去雾matlab代码(Matlab)
简要说明: 推荐学习暗原色去雾的原理两篇: 第一篇为pdf格式 900k可以下载: https://zkxb.jsu.edu.cn/CN/article/downloadArticleFile.do? ...
- 比较研究测井预测:遗传算法与神经网络(Matlab代码实现)
- 拉格朗日插值和牛顿插值原理及使用(代码环境:matlab)
题目一: 1.用表1-1中的世界人口统计数值估计1980年的人口 表 1-1: 年 人口 1960 3 039 585 530 1970 3 707 475 887 1990 5 281 653 82 ...
- 数学建模常用方法 | matlab代码 | 二十三种数学建模方法 |2022赛前突击 |模型代码 |比赛比用、简单高效| 分享
为是赛前突击,所以就不过多的介绍理论知识了,直接上案例,matlab代码 更加详细例题解析: 公众h:露露IT 目录 1.类比法 2.二分法 3.量纲分析法 4.图论法 5.差分法 6.变分法 7.数 ...
- 超松弛迭代法求解二维电磁场有限差分方程(附Matlab代码)
二维电磁场泊松方程差分格式 由泰勒公式: 以及: 两式做和,截断于项,得到二阶差商: 二维场域内泊松方程为: ...
- 【GA算法】遗传算法原理及其Matlab代码
翻阅几篇遗传算法的文章,这篇通俗易懂,且逻辑清楚,最适合入门,不用担心遗漏关键点. 遗传算法,先选择,交叉和变异顺序可更换. 轮盘赌部分,参考了另外一篇文章的解释. 此外,还有一些有价值的文献: 选择 ...
最新文章
- Java项目: 基于SSM实现教务管理系统
- Node.js 体验-在Windows Azure工作者角色上托管Node.js
- python3 库pandas写入csv格式文件出现中文乱码问题解决方法
- android 源码下载编译
- 【MOSS】Sharepoint大附件上传
- SQL注入 ——sql数据库操作基础(一)
- .NET Core 使用 Consul 服务注册发现
- Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
- Cesium Terrain Builder 非压缩瓦片
- sdio stm32理解 205 sdio调试 stm32f205
- 网络安全学习相关网站
- 11210怎么等于24_巧算24点
- FontForge 修改,删除,设计字体
- 简单是王道《九、讲故事》
- 实现了一个简单的以图搜图功能(带代码)
- python删除excel指定行_python实现Excel删除特定行、拷贝指定行操作
- LoRa vs LTE-M vs Sigfox
- Windows下cmd命令无法切换盘符
- 四位数中有几个七C语言,用4、0和7可以组成( )个不同的三位数,其中最大的数是( ),最小的数是( )。——青夏教育精英家教网——...
- unity3D之简单的碰撞检测 .