遗传算法(GA)总结:算法流程,实例,思路

本文是偏应用的简要总结,避开了很多科学背景(进化论、染色体、基因型、表现型...),自己认为遗传算法的科学背景内容有点多,而且对于利用遗传算法解决问题并没有很大帮助。

关于遗传算法的科学背景和具体代码,网上有很多,不重复写了。本文没有代码,而是展示一个实例中的代码运行产生的中间结果,用于辅助理解算法流程。

本文分为四个部分:
第一部分,算法简要流程
第二部分,简单实例,按照第一部分的流程整理的代码运行时的迭代过程
第三部分,关于算法的全局搜索和局部搜索的理解
第四部分,算法思路整理

1. 简要流程

Step 1. 产生一批初始解,作为当前种群(当前解集)
Step 2. 计算当前种群(当前解集)里每个解的适应度(目标函数值)
开始进入迭代,迭代环节为Step 3 ~ Step 6
Step 3. 种群操作:选择(当前解集的优选过程)
Step 4. 种群操作:交叉(当前解集里的解的配对更新)
Step 5. 种群操作:变异(当前解集里的解的随机变化)
Step 6. 计算当前种群(当前解集)里每个解的适应度(目标函数值)
当满足迭代终止条件时,跳出迭代环节,执行Step 7
Step 7. 输出搜索到的最优解

2. 流程应用实例——求一元函数最小值

例子:求函数最小值

函数为y = (x-π)^2 + 20cos(x), x∈[-5,5] 

最小值:取x=π时,目标函数最小值为-20

自定义:
种群数量为8,交叉操作为交换两个解的整数部分,变异操作为解在定义域内随机取值
算法里的每种操作都可以自由设计,而且设计方式非常多,这里只用一种简单的设计方式)

代码运行迭代过程:(按第一部分的流程整理标注)

Step 1. 初始化时,解集为
0.915098 -2.22465 -1.22089 4.34751 -3.099 1.47938 -4.0173 -2.11203
Step 2. 计算每个解的目标函数值
0.915098 17.1515
-2.22465 16.6316
-1.22089 25.8874
4.34751 -5.6824
-3.099 18.9632
1.47938 4.58862
-4.0173 38.4408
-2.11203 17.2967
此时最优解:4.34751  对应目标函数值:-5.6824

第一轮迭代:
Step 3. 选择过后,解集变为
4.34751 -3.099 4.34751 -2.22465 -4.0173 -2.11203 4.34751 1.47938
Step 4. 交叉过后,解集变为
4.34751 -4.099 2.34751 -1.22465 -4.0173 -2.11203 3.34751 4.47938
Step 5. 变异过后,解集变为
4.34751 -4.099 1.96951 -0.614795 -4.0173 -2.11203 3.34751 4.47938
Step 6. 计算每个解的目标函数值
4.34751 -5.6824
-4.099 40.9134
1.96951 -6.39093
-0.614795 30.4483
-4.0173 38.4408
-2.11203 17.2967
3.34751 -19.5351
4.47938 -2.82834
此时最优解:3.34751  对应目标函数值:-19.5351(观察可知,由交叉环节得到

第二轮迭代:
Step 3. 选择过后,解集变为
3.34751 1.96951 -0.614795 -4.099 -0.614795 -2.11203 4.34751 1.96951
Step 4. 交叉过后,解集变为
3.34751 0.969512 -1.6148 -4.099 -0.614795 -2.11203 4.34751 1.96951
Step 5. 变异过后,解集变为
3.34751 0.969512 -1.6148 -4.099 -0.614795 -3.07886 4.34751 1.96951
Step 6. 计算每个解的目标函数值
3.34751 -19.5351
0.969512 16.032
-1.6148 21.7435
-4.099 40.9134
-0.614795 30.4483
-3.07886 18.7334
4.34751 -5.6824
1.96951 -6.39093
此时最优解:3.34751  对应目标函数值:-19.5351

第三轮迭代:
Step 3. 选择过后,解集变为
3.34751 1.96951 -0.614795 -4.099 1.96951 3.34751 4.34751 3.34751
Step 4. 交叉过后,解集变为
3.34751 3.96951 -4.6148 -0.099002 3.96951 1.34751 4.34751 1.34751
Step 5. 变异过后,解集变为
3.34751 3.96951 -4.6148 3.24091 3.96951 1.34751 4.34751 1.34751
Step 6. 计算每个解的目标函数值
3.34751 -19.5351
3.96951 -12.8427
-4.6148 58.2128
3.24091 -19.8916
3.96951 -12.8427
1.34751 7.64734
4.34751 -5.6824
1.34751 7.64734
此时最优解:3.24091  对应目标函数值:-19.8916(观察可知,由变异环节得到

迭代以此类推

3. 全局搜索 VS 局部搜索
全局搜索:群体算法,全局搜索能力强,解集里的解有几率变动到解空间的任意地方
局部搜索:交叉变异可以认为是在解的邻域内搜索
交叉变异共同完成全局搜索和局部搜索

4. 核心思路
选择环节保留优解,交叉变异环节在优解的基础上产生新解。整体来看,优良解经过拆分和重组,使优良解的片段得到保留,并在优良解的片段的基础上不断进化出新解,使整体解集逐渐变优。

  • 1
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值