首页 > 编程知识 正文

如何使用ga函数实现基于遗传算法的问题求解,ga遗传算法优化参数设置

时间:2023-05-04 19:27:17 阅读:205950 作者:4251

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

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

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

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五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。