首次适应算法c++_java实现遗传算法(GA)数学问题(入门级)

1.GA算法基础步骤

1

初始化种群

为种群的每个个体进行初始化,每个个体代表一种解,种群规模NP表示当前有多少种解。

2

选择适应度好的个体

根据轮盘赌的形式从初始化种群中挑选出NP个优质个体,组成新的种群。

3

染色交叉

根据自定义交叉概率CR,对每个个体上的染色体(解空间)进行交叉(如果解空间只有一维的话,可以转化为二进制编码的方式),交叉的方式也有很多,这里我们采用:与随机的一个个体上的随机位置进行交叉。

4

基因变异

根据自定义变异概率MU,对交叉过后种群的每个个体上的基因判断是否变异。

5

保留优质个体

比较不同种群同位置上的,初识化种群个体的适应度与变异过后的个体适应度,如果变异的更优,则将初识化种群上面的该初始化个体替换成变异个体。

6

条件判断

如果迭代次数没达到,继续返回到第2步,注意,此时的初始化种群已更新,并且是朝着最优解的方向更新。

2.解决数学问题

5236a5af9c05a4439d1ad64419684bf4.png

当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

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值