多种群遗传算法的函数优化算法
多种群遗传算法的函数优化算法2010年12月15日星期三21:30【注】原帖网址:、案例背景
针对遗传算法所存在的问题,一种多种群遗传算法结构模型(Multiple Population GA,简称MPGA)可以用来取代常规的标准计算模型(SGA)。
MPGA在SGA的基础上主要引入了以下几个概念:
(1)突破SGA仅靠单个群体进行遗传进化的框架,引入多个种群同时进行优化搜索;不同的种群赋以不同的控制参数,实现不同的搜索目的。
(2)各个种群之间通过移民算子进行联系,实现多种群的协同进化;最优解的获取是多个种群协同进化的综合结果。
(3)通过人工选择算子保存各种群每个进化代中的最优个体,并作为判断算法收敛的依据。
2、案例目录:
第7章多种群遗传算法的函数优化算法 7.1理论基础
7.1.1遗传算法早熟问题 7.1.2多种群遗传算法概述 7.2案例背景 7.2.1问题描述 7.2.2解决思路及步骤 7.3 MATLAB程序实现
7.3.1移民算子 7.3.2人工选择算子 7.3.3目标函数
7.3.4标准遗传算法主函数 7.3.5多种群遗传算法主函数 7.3.6结果分析 7.4延伸阅读 7.5参考文献 3、主程序: %%多种群遗传算法 clear;
clc close all NIND=40;%个体数目 NVAR=2;%变量的维数 PRECI=20;%变量的二进制位数 GGAP=0.9;%代沟 MP=10;%种群数目
FieldD=[rep(PRECI,[1,NVAR]);[-3,4.1;12.1,5.8];rep([1;0;;%译码矩阵
for i=1:MP Chrom{i}=crtbp(NIND,NVAR*PRECI);%创建初始种群
;11],[1,NVAR])]end pc=0.7+(0.9-0.7)*rand(MP,1);%在【0.7,0.9】范围i内随机产生交叉概率
pm=0.001+(0.05-0.001)*rand(MP,1);%在【0.001,0.05】范围内随机产生变异概率
gen=0;%初始遗传代数 gen0=0;%初始保持代数
MAXGEN=10;%最优个体最少保持代数 maxY=0;%最优值
for i=1:MP ObjV{i}=ObjectFunction(bs2rv(Chrom{i},FieldD));%计算各初始种群个体的目标函数值
end MaxObjV=zeros(MP,1);%记录精华种群
MaxChrom=zeros(MP,PRECI*NVAR);%记录精华种群的编码 while gen0=MAXGEN gen=gen+1;%遗传代数加1 for i=1:MP FitnV{i}=ranking(-ObjV{i});%各种群的适应度
SelCh{i}=select('sus',Chrom{i},FitnV{i},GGAP);%选择操作 SelCh{i}=recombin('xovsp',SelCh{i},pc(i));%交叉操作 SelCh{i}=mut(SelCh{i},pm(i));%变异操作
ObjVSel=ObjectFunction(bs2rv(SelCh{i},FieldD));%计算子代目标函数值
[Chrom{i},ObjV{i}]=reins(Chrom{i},SelCh{i},1,1,ObjV{i},ObjVSel);%重插入操作
end
[Chrom,ObjV]=immigrant(Chrom,ObjV);%移民操作
[MaxObjV,MaxChrom]=EliteInduvidual(Chrom,ObjV,MaxObjV,MaxChrom);%人工选择精华种群
YY(gen)=max(MaxObjV);%找出精华种群中最优的个体 if YY(gen)maxY%判断当前优化值是否与前一次优化值相同 maxY=YY(gen);%更新最优值 gen0=0;
else gen0=gen0+1;%最优值保持次数加1 end end %%进化过程图 plot(1:gen,YY) xlabel('进化代数') ylabel('最优解变化') title('进化过程') xlim([1,gen]) %%输出最优解
[Y,I]=max(MaxObjV);%找出精华种群中最优的个体 X=(bs2rv(MaxChrom(I,:),FieldD));%最优个体的解码解 disp(['最优值为:',num2str(Y)])
disp(['对应的自变量取值:',num2str(X)]) 4、运行结果:
标准遗传算法运行5次得到的结果图