1.遗传算法
遗传算法(Genetic Algorithm, GA)是由美国密歇根(Michigan)大学心理教授、电子工程学和计算机科学教授John H.Holland首先提出的一种随机自适应的全局搜索算法。
2.算法基本原理及流程结构
2.1染色体编码
常用的较简单的两种编码方式:
(1)二进制编码方法:该方法产生的染色体是一个二进制符号序列,染色体的每个基因只能取值0或1;
(2)浮点数编码:染色体的长度等于问题定义的解得变量个数,染色体的每个基因等于解的每一维变量。
2.2群体的初始化
采用生成随机数的方法,初始化规模为N的群体,对染色体的每一维变量进行初始化赋值;
2.3适应值评价
采用评估函数对群体的染色体进行评价,(评估函数常根据问题的优化目标来定)分别计算每个染色体的适应值,保存适应值最大的染色体Best;
2.4选择算子
使用轮盘赌选择算法(其基本思想是基于概率的随机选择),求出种群中每个染色体的适应值得总合,再求出每个染色体适应值与总适应值的比值Pi,Pi比值越大被选中的概率就越大;
2.5交配算子
交配概率Pc(一般取值0.4~0.99),对于每个染色体,如果Random[0,1]小于Pc,该染色体可进行交配,其子代进入新种群,不参与交配的染色体直接进入新种群中
2.6变异算子
变异概率Pm(0.001~0.1之间),如果Random[0,1]小于Pm,改变基因的取值,否则基因保持不变。变异后的染色体取代原来的染色体进入新种群,不变异的直接进入新种群。
2.7更新适应值
变异后的新群体取代原有群体,重新计算群体中各个染色体的适应值,更新群体中的最大适应值Best.
2.8判断算法结束
如果进化代数超过了最大进化代数,或者最大适应值Best达到误差要求,算法就结束。
3.算法流程图
MATLAB代码实现
##计算函数f(x)=x+10sin(5x)+7cos(4x) x∈[0,10] 的最大值。
1.主函数
% 下面举例说明遗传算法 %
% 求下列函数的最大值 %
% f(x)=x+10*sin(5x)+7*cos(4x) x∈[0,10] %
% 将 x 的值用一个10位的二值形式表示为二值问题,一个10位的二值数提供的分辨率是每为 (10-0)/(2^10-1)≈0.01
% 将变量域 [0,10] 离散化为二值域 [0,1023], x=0+10*b/1023, 其中 b 是 [0,1023] 中的一个二值数。 %
% %
% 2.0 主程序
%遗传算法主程序
%Name:genmain05.m
%要求精度不大于0.01,
clear
clc
popsize=40; %群体大小
chromlength=10; %字符串长度(个体长度)
pc=0.5; %交叉概率,只有在随机数小于pc时,才会产生交叉
pm=0.006; %变异概率
pop=initpop(popsize,chromlength); %随机产生初始群体
for i=1:20 %20为遗传代数
[objvalue]=calobjvalue(pop); %计算目标函数
fitvalue=calfitvalue(objvalue); %计算群体中每个个体的适应度
[newpop]=selection(pop,fitvalue); %复制
[newpop1]=crossover(newpop,pc); %交叉
[newpop2]=mutation(newpop1,pm); %变异
[objvalue]=calobjvalue(newpop2); %计算目标函数
fitvalue=calfitvalue(objvalue