遗传算法流程概述与简单实例认知

目录

介绍

遗传算法属于优化算法的一种,也归属于启发式算法,具体而言,它是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。

过程概述

在讲述之前,回忆一下高中生物所学到的自然选择学说总体上是怎么样的:对于一个种群,当其过度繁殖之后,该种群数目已超过生存环境的环境容纳量,为此需要进行生存斗争。该种群中越优越(“优越”的语境与生存环境密切相关)的个体,会有更大的概率能成功繁衍后代(把基因遗传给后代),后代的基因也会越来越优秀,越能够适应环境。另外值得一提的是,在遗传的过程中,基因会经历重组和变异两个过程。

流程图

类似地,遗传算法参考了自然选择学说,抽象出一种优化的可用于求目标函数最大值或最小值的算法。流程图如下【注意:该流程图简化了很多具体细节,把核心的部分展现了出来】:

Created with Raphaël 2.1.2 随机产生初始种群 每个个体适应度评估 "环境"选择 基因重组 基因变异 是否进化到第N代 输出结果为第N代 子代基因进入种群,与一部分父代混合 yes no

初始种群编码

有二进制编码、格雷码、浮点数编码方法等。具体的编码策略需要根据具体问题来分析。

适应度评估

根据目标函数的值以及题中所给的最大值或最小值等要求,来设定评价函数,例如根据不同个体求算的目标函数值(实现方法:二进制的编码转化为实数,代入目标函数)来进行从大到小或从小到大排序。值越大,其“染色体”越可能遗传给下一代【不妨想想,这不就是往想要达到的目标(最大值或最小值)靠拢嘛,但为了防止局部过早收敛,给一些看起来弱的个体一点生存空间,说不定它才是未来几十年后进化的方向呢】

选择

轮盘赌方法、随机竞争选择、最佳保留选择等等,其目的是把优秀个体筛选出来,准备遗传给下一代【相当于准备交配】

重组

关键:Crossover !交叉
方法:单点交叉、多点交叉等等

变异

方法:基本位变异、均匀变异等

还有一点…

关键问题:应用遗传算法时如何处理数学模型中的约束条件???
一般有:惩罚函数法、修复不可行解(可行解变换)法、搜索空间限定法


简单实例

来源

利用遗传算法计算下面函数的最大值:

f ( x ) = x sin ( 10 π x ) + 2.0 x [ 1 , 2 ]

选择二进制编码,种群中个体数目为40,个体的染色体长度为15,父代与子代的代沟为0.9,最大遗传数为25。

P.S 代沟是指父代中需要经过选择、交叉、变异得到下一代的比例,例如父代共100个个体,代沟为0.9,表明有90个个体被选中进行上述一系列操作进化到下一代,剩下10%不变、直接进入下一代,也即下一代还是100个个体——[百度知道]

Matlab代码参考

NIND=40; %
MAXGEN=25;  %最大遗传数
PRECI=15;
GGAP=0.9;
FieldD=[PERCI;-1;2;1;0;1;1];
Chrom=crtbp(NIND,PERCI); %create a binary population
GEN=0;
variable=bs2rv(Chrom,FieldD);  %Binary string to real vector 关键点:binary to real(实数)
ObjV=variable.*sin(10*pi.*variable)+2;
Y=zeros(MAXGEN+1,1);
while GEN<=MAXGEN
    FitnV=ranking(-ObjV); %ranking函数根据目标函数值从小到大排列,函数值越小,其适应度越强,繁殖下一代越容易被筛选出来。因此如果最终想要得到最大值,那么需要把ObjV取相反数
    SelCh=select('rws',Chrom,FitnV,GGAP);  %rws 轮盘赌 sus 随机遍历抽样,这个过程相当于交配
    SelCh=recombin('xovsp',SelCh,0.7);  %基因重组,xovsp 单点交叉CROSSOVer Single-Point 多点交叉CROSSOVer Multi-Point  xov etc. 0.7 表示交叉概率
    SelCh=mut(SelCh); %变异;
    variable=bs2rv(SelCh,FieldD);
    ObjVSel=variable.*sin(10*pi.*variable)+2;  %筛选过后的目标函数值
    [Chrom,ObjV]=reins(Chrom,SelCh,1,1,ObjV,ObjVSel);    %子群重插入到种群中去以便进行下一次进化,此时需要淘汰一些竞争力弱的父代
    Y(GEN+1,1)=max(ObjV);
    GEN=GEN+1;
end
plot([1:MAXGEN+1]',Y,'.')

以上基本为遗传算法的基本代码,至于函数详细的使用方法,可下载参考:
《MATLAB遗传算法工具箱及应用》

友情下载链接:Matlab谢菲尔德大学遗传算法工具箱


猜你喜欢

转载自blog.csdn.net/charminglam/article/details/81367992