遗传算法程序代码--多目标优化--函数最值问题资料

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
[px,py]=size(newpop2); bestindividual=newpop2(1,:); bestfit=newfitvalue(1); for i=2:px
if newfitvalue(i)>bestfit bestindividual=newpop2(i,:); bestfit=newfitvalue(i);
function [newpop]=selection(pop,fitvalue) %选择操作
objvalue=calobjvalue(pop); fitvalue=calfitvalue(objvalue); totalfit=sum(fitvalue); % 求适应度值之和 pfitvalue=fitvalue/totalfit; % 单个个体被选择的概率 if pfitvalue<0
end end
function [fitvalue]=calfitvalue(objvalue) % 计算个体的适应值 %遗传算法子程序 %Name:calfitvalue.m fitvalue=objvalue;
function [objvalue]=calobjvalue(pop) % 计算目标函数值 %遗传算法子程序 %Name: calobjvalue.m
mpoint=1; end if newpop1(i,mpoint)==0
newpop1(i,mpoint)=1; else
newpop1(i,mpoint)=0; end else end end newpop2=newpop1;
function [newpop2]=mutation(newpop1,pm) % 变异 %Name: mutation.m
end
x2(i)=decodechrom(pop5,22,23)*6/(pow2(23)-1)-1;
x3(i)=decodechrom(pop5,45,20)*1/(pow2(20)-1);
pop=newpop2;
end
%% 绘图 figure(1)% 最优点变化趋势图 i=1:500; plot(y(i),'-b*') xlabel(' 迭代次数 '); ylabel(' 最优个体适应值 '); title(' 最优点变化趋势 '); legend('最优点 ');
% 计 算 新 种 群适应度值 % 求出群体中适应值最大的个体
y(i)=max(bestfit); pop5=bestindividual; n(i)=i; %解码
%储存最优个体适应值 %储存最优个体 %记录最优代位置
x1(i)=0+decodechrom(pop5,1,21)*2/(pow2(21)-1);
else
newpop1(i,:)=newpop(i,:);% 不 产生新染色体
newpop1(i+1,:)=newpop(i+1,:);
end
end
function pop2=decodebinary(pop) % 将二进制数转化为十进制数 (1) %遗传算法子程序 %Name: decodebinary.m %产生 [2^n 2^(n-1) ... 1] 的行向量,然后求和,将二进制转化为十进制
pop=initpop(popsize,chromlength);% 产生初始种群 for i=1:500
[objvalue]=calobjvalue(pop); % 计算目标函数值
[fitvalue]=calfitvalue(objvalue);% 计算个体适应度
[newpop]=selection(pop,fitvalue);% 选择
if po<pc
cpoint=round(rand*py); % 随机寻找交叉点
newpop1(i,:)=[newpop(i+1,1:cpoint),newpop(i,cpoint+1:py)]; 交叉
% 相邻两个染色体在交叉点位置
newpop1(i+1,:)=[newpop(i,1:cpoint),newpop(i+1,cpoint+1:py)];
相当于 X'
x1=temp1*2/(pow2(21)-1); % 将二值域 中的数转化为变量域 x2=temp2*6/(pow2(23)-1)-1; x3=temp3*1/(pow2(20)-1); newobjvalue=x1.^2+x2.^2-x3.^2; % 计算目标函数值
的数
相当于十进制的 X
[newpop1]=crossover(newpop,pc) ; %交叉
[newpop2]=mutation(newpop1,pm) ;% 变异
[newobjvalue]=newcalobjvalue(newpop2);
% 计算最新代目标函数值
[newfitvalue]=newcalfitvalue(newobjvalue); [bestindividual,bestfit]=best(newpop2,newfitvalue); 及其适应值
%Name: decodechrom.m
pop1=pop(:,spoint:spoint+length-1);
pop2=decodebinary(pop1);
function pop=initpop(popsize,chromlength) % 初始化 (编码 ) % initpop.m 函数的功能是实现群体的初始化, 色体的长度 (二值数的长度 ), % 长度大小取决于变量的二进制编码的长度。 %遗传算法子程序 %Name: initpop.m
% decodechrom.m 函数的功能是将染色体 (或二进制编码 )转换为十进制,参数 spoint 表示待 解码的二进制串的起始位置
% (对于多个变量而言,如有两个变量,采用
20 为表示,每个变量 10 为,则第一个变量从
1 开始,另一个变量从 11 开始。 )
Baidu Nhomakorabea
% 参数 1ength 表示所截取的长度。
popsize 表示群体的大小, chromlength 表示染
pop=round(rand(popsize,chromlength));% rand 随机产生每个单元为 数为 chromlength 的矩阵, % round 对矩阵的每个单元进行圆整。这样产生的初始种群。
{0,1} 行数为 popsize,列
pfitvalue==0; end mfitvalue=cumsum(pfitvalue); % 如 fitvalue=[1 2 3 4] ,则 cumsum(fitvalue)=[1 3 6 10] [px,py]=size(pop); ms=sort(rand(px,1)); % 从小到大排列 fitin=1; newin=1; newpop=zeros(px,py); while newin<=px if mfitvalue(fitin)>ms(newin) newpop(newin,:)=pop(fitin,:); newin=newin+1; else fitin=fitin+1;
function [newpop2]=mutation(newpop1,pm) % 变异 %Name: mutation.m
[px,py]=size(newpop1); newpop2=zeros(px,py); for i=1:px
ps=rand; if ps<pm
mpoint=round(rand*py); if mpoint<=0
[px,py]=size(pop); % 求 pop 行和列数 for i=1:py pop1(:,i)=2.^(py-i).*pop(:,i); end
pop2=sum(pop1,2); % 求 pop1 的每行之和
function pop2=decodechrom(pop,spoint,length)
temp1=decodechrom(pop,1,21); % 将 pop 每行转化成十进制数
相当于 X'
temp2=decodechrom(pop,22,23); temp3=decodechrom(pop,45,20);
x1=temp1*2/(pow2(21)-1); % 将二值域 中的数转化为变量域 x2=temp2*6/(pow2(23)-1)-1; x3=temp3*1/(pow2(20)-1); objvalue=x1.^2+x2.^2-x3.^2; % 计算目标函数值
newpop1(i,mpoint)=0; end else end end newpop2=newpop1;
function [newobjvalue]=newcalobjvalue(newpop2)
% 计算目标函数值,最新代 %遗传算法子程序 %Name: newcalobjvalue.m
temp1=decodechrom(newpop2,1,21); % 将 pop 每行转化成十进制数 temp2=decodechrom(newpop2,22,23); temp3=decodechrom(newpop2,45,20);
grid on [z index]=max(y); % 计算最大值及其位置 PO=n(index) %最优个体的位置 X=x1(index) Y=x2(index) Z=x3(index) F=z
function [bestindividual,bestfit]=best(newpop2,newfitvalue) % 求出群体中最大得适应值及其个体 %遗传算法子程序 %Name: best.m
[px,py]=size(newpop1); newpop2=zeros(px,py); for i=1:px
ps=rand; if ps<pm
mpoint=round(rand*py); if mpoint<=0
mpoint=1; end if newpop1(i,mpoint)==0
newpop1(i,mpoint)=1; else
函数最值问题: F=X 2+Y 2-Z 2,
clear clc %% 初始化 pc=0.9; % 交叉概率 pm=0.05; % 变异概率 popsize=500; chromlength1=21; chromlength2=23; chromlength3=20; chromlength=chromlength1+chromlength2+chromlength3;
的数
相当于十进制的 X
function [newpop1]=crossover(newpop,pc) %交叉 %遗传算法子程序 %Name: crossover.m
[px,py]=size(newpop);
newpop1=zeros(size(newpop));
for i=1:2:px-1
po=rand(1);
相关文档
最新文档