一、算法背景
本算法的灵感来源是生物学中的遗传学
1、种群是生物进化的基本单位,生物进化的实质是种群基因频率的改变。
2、基因突变和基因重组是生物进化的原材料,自然选择使种群的基因频率定向改变并决定生物进化的方向,隔离是新物种形成的必要条件。
二、算法概述
主要由三大模块构成:
1、编解码
2、个体适应度评估
3、遗传运算
三、具体实现过程
1、编码
一般采用二进制(数串的长度取决于要求的精度)
2、解码
二进制数据串还原成十进制
3、交配
随机数产生交配点位置->两个个体在交配点位置互换部分基因码->两个子个体
4、突变
利用个体自身的基本位进行基因突变,避免种群过早收敛
5、倒位
6、个体适应度评估
①个体适应度大的容易被遗传到下一代
②可以将求目标函数最大值的目标函数作为检验个体适应度大小的函数
7、复制
根据个体适应度大小决定其下代遗传的可能性
8、遗传运算
四、MATLAB代码实现
1、伪代码
begin
t=0; %遗传代数
初始化P(t); %初始化种群或染色体
计算P(t)的适应值;
while(不满足条件) do
begin
t=t+1;
从P(t-1)中选择P(t); %选择
重组P(t); %交叉和变异
计算P(t)的适应值;
end
END
2、tips:参数设计原则(避免种群早熟)
(1)种群规模
①建议值:0-100
②群体规模太小->近亲交配->病态基因
③群体规模太大->难以收敛,浪费资源
(2)变异概率
①建议值:0.0001-0.2
②概率太小->种群多样性下降太快->有效基因迅速丢失不易修补
③概率太大->高阶模式被破坏的概率增大
(3)交配概率
①建议值:0.4-0.99
②概率太大->破坏已有有利模式->随机性增大,错失最优个体
③概率太小->不能有效更新种群
(4)进化代数
①建议值:100-500
②太小->不易收敛->种群没有成熟
②太大->种群过于早熟不可能再收敛->继续进化浪费时间和资源
(5)种群初始化
在初始种群的赋予之前,尽量进行一个大概的区间估计,以免初始种群分布在远离全局最优解的编码空间,导致遗传算法的搜索范围受限
3、适应度函数的调整
(1)运行初期阶段
对一些适应度较高的个体进行控制,降低其适应度与其它个体适应度之间的差异程度,从而限制其复制数量,维护群体多样性
(2)运行后期阶段
对个体的适应度进行适当的放大,扩大最佳个体适应度和其它个体适应度之间的差异,以提高合体之间的竞争性(因为此时大部分个体的适应度和最佳个体的适应度差异不大,使得进化过程无竞争性可言)
五、MATLAB遗传算法工具箱
MATLAB中有专门的封装好的遗传算法工具箱:GA Toolbox
(将常见的遗传运算命令进行了集成,使用方便,但是不能根据特殊需要进行相应调整和修改。从某种角度,它是一种“智能式的傻瓜”,建议尽量不要使用工具箱,尝试编写遗传算法源程序解决问题)
1、主流版本
2、 核心函数
(1)ga->对目标函数进行遗传运算
(2)gaoptimset->设置遗传算法的参数和句柄函数
注意:
六、应用
遗传算法是受自然进化理论启发的一系列搜索算法。通过模仿自然选择和繁殖的过程,遗传算法可以为涉及搜索,优化和学习的各种问题提供高质量的解决方案。同时,它们类似于自然进化,因此可以克服传统搜索和优化算法遇到的一些障碍,尤其是对于具有大量参数和复杂数学表示形式的问题。简单来说,它基本在某种程度上尽力模仿进化的过程。
参考资料
1、卓金武——《MATLAB在数学建模中的应用》