多种群遗传算法的函数优化算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
多种群遗传算法的函数优化算法
多种群遗传算法的函数优化算法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;1;1],[1,NVAR])];%译码矩阵
for i=1:MP Chrom{i}=crtbp(NIND,NVAR*PRECI);%创建初始种群
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次得到的结果图