1.GA算法基础步骤
1
初始化种群
为种群的每个个体进行初始化,每个个体代表一种解,种群规模NP表示当前有多少种解。
2
选择适应度好的个体
根据轮盘赌的形式从初始化种群中挑选出NP个优质个体,组成新的种群。
3
染色交叉
根据自定义交叉概率CR,对每个个体上的染色体(解空间)进行交叉(如果解空间只有一维的话,可以转化为二进制编码的方式),交叉的方式也有很多,这里我们采用:与随机的一个个体上的随机位置进行交叉。
4
基因变异
根据自定义变异概率MU,对交叉过后种群的每个个体上的基因判断是否变异。
5
保留优质个体
比较不同种群同位置上的,初识化种群个体的适应度与变异过后的个体适应度,如果变异的更优,则将初识化种群上面的该初始化个体替换成变异个体。
6
条件判断
如果迭代次数没达到,继续返回到第2步,注意,此时的初始化种群已更新,并且是朝着最优解的方向更新。
2.解决数学问题
![5236a5af9c05a4439d1ad64419684bf4.png](https://i-blog.csdnimg.cn/blog_migrate/8b8de95161573a19dbcc25ac52b70915.jpeg)
当a,b,c,d四个变量取值为 [-2,2] 时,Y的最小值是多少?a、b、c、d、分别是多少?
对于这种公式,凭借我小学三年级的功底,得出:最小值 Y=-20,{a=2,b=-2,c=3,d=-2}
既然已经知道了最优解,接下来让我们写一下程序看看求出来到最优解是否与我们算出来的一致
3.上代码
原本想直接把代码粘贴过来,发现效果并不理想,也找不到能编辑代码的工具,只能贴图片了。
如果想要源码的话,公众号回复GA,或者去我的博客上面可以直接复制源码(链接放到文章末尾下方了)。
![bd4fb7d96fa62683267fd30d15fa158a.png](https://i-blog.csdnimg.cn/blog_migrate/7589d9b11e730ee40980936673c3b7dd.png)
4.结果展示
第0代,最小适应度为:-0.29731169154051607
第1代,最小适应度为:-7.920632702752841
第2代,最小适应度为:-11.939788517177227
第3代,最小适应度为:-11.939788517177227
第4代,最小适应度为:-11.939788517177227
第5代,最小适应度为:-12.812922259468976
第6代,最小适应度为:-12.812922259468976
第7代,最小适应度为:-12.975929909868261
第8代,最小适应度为:-13.709409364446067
第9代,最小适应度为:-13.709409364446067
第10代,最小适应度为:-14.070832230733176
...
第195代,最小适应度为:-19.726396004677348
第196代,最小适应度为:-19.726396004677348
第197代,最小适应度为:-19.726396004677348
第198代,最小适应度为:-19.726396004677348
第199代,最小适应度为:-19.726396004677348
最优解空间为:
1.9578436000419988
-1.9990331025187396
1.9319300848728265
-1.9936739862448478
5.总结
根据对照得出,算法最后是朝着最优的方向进行的,
得出来的最优解并不是真的最小值,只是一直无限的接近最小值。
GA算法还有其他的改进方法,比如交叉的方式、变异的数量、个体的取舍、并行遗传等
CSDN:
https://blog.csdn.net/qq_44780229/article/details/107368575
点小花花,让他们知道你“在看”我
![0fa9f037ba3eea08e1c3e3bd1d913975.gif](https://i-blog.csdnimg.cn/blog_migrate/d22488cfa4cb412bbff91c3c8b038f34.gif)