logo资料库

超详细的量子粒子群算法程序!.pdf

第1页 / 共5页
第2页 / 共5页
第3页 / 共5页
第4页 / 共5页
第5页 / 共5页
资料共5页,全文预览结束
%---------程序正文------------------- clear all; close all; %---------变量部分------------------- popsize=50; %种群规模 vartotal=2; %变量个数 inertia=0.5; %惯性因子 selfw=2.0; %自身因子 globalw=2.0; %全局因子 mutatep=0.05; %变异概率 maxgen=500; %限定代数 %---------数组部分----------------------- varrange(1,1)=-512; %第一变量最小值 varrange(1,2)=512; %第一变量最大值 varrange(2,1)=-512; %第二变量最小值 varrange(2,2)=512; %第二变量最大值 %---------粒子位置初始化----------------- for i=1:1:popsize for j=1:1:vartotal angle(i,j)=2*pi*rand; chrom(i,1,j)=cos(angle(i,j)); %第 i 个粒子(量子染色体)的幅角余弦 chrom(i,2,j)=sin(angle(i,j)); %第 i 个粒子(量子染色体)的幅角正弦 selfangle(i,j)=2*pi*rand; selfchrom(i,1,j)=cos(angle(i,j));%第 i 个粒子自身最优位置的幅角余弦 selfchrom(i,2,j)=sin(angle(i,j));%第 i 个粒子自身最优位置的幅角正弦 dangle(i,j)=0; end end 1 %---------解空间变换------------------------ for i=1:1:popsize for j=1:1:2 for k=1:1:vartotal chromx(i,j,k)=0.5*(varrange(k,2)*(1+chrom(i,j,k))+varrange(k,1)*(1-chrom(i,j,k))); selfchromx(i,j,k)=0.5*(varrange(k,2)*(1+selfchrom(i,j,k))+varrange(k,1)*(1-selfchrom(i,j,k))); end end end 1 %---------计算适应度---------------------------- for i=1:1:popsize for j=1:1:2
fitness(i,j)=-chromx(i,j,1)*sin((abs(chromx(i,j,2)+1-chromx(i,j,1)))^0.5)*cos((abs(chromx(i,j,2)+1+c hromx(i,j,1)))^0.5) -(chromx(i,j,2)+1)*cos((abs(chromx(i,j,2)+1-chromx(i,j,1)))^0.5)*sin((abs(chromx(i,j,2)+1+chromx(i ,j,1)))^0.5); selffitness(i,j)=-selfchromx(i,j,1)*sin((abs(selfchromx(i,j,2)+1-selfchromx(i,j,1)))^0.5)*cos((abs(self chromx(i,j,2)+1+selfchromx(i,j,1)))^0.5) -(selfchromx(i,j,2)+1)*cos((abs(selfchromx(i,j,2)+1-selfchromx(i,j,1)))^0.5)*sin((abs(selfchromx(i,j, 2)+1+selfchromx(i,j,1)))^0.5); end end %---------适应度统计------------------------------ minfit=fitness(1,1); if fitness(1,1)>fitness(1,2) minfit=fitness(1,2); end maxfit=fitness(1,2);bestchain=2; if fitness(1,1)>fitness(1,2); maxfit=fitness(1,1);bestchain=1; end minfitindex=1;maxfitindex=1; avgfit=(fitness(1,1)+fitness(1,2))/(2*popsize); for i=2:1:popsize for j=1:1:2 if minfit>fitness(i,j) minfit=fitness(i,j);minfitindex=i; end if maxfit
for j=1:1:vartotal t1=selfangle(i,j)-angle(i,j); if t1<-pi t1=t1+2*pi; end if t1>pi t1=t1-2*pi; end t2=gloangle(1,j)-angle(i,j); if t2<-pi t2=t2+2*pi; end if t2>pi t2=t2-2*pi; end dangle(i,j)=inertia*dangle(i,j)+selfw*rand*t1+globalw*rand*t2; angle(i,j)=angle(i,j)+dangle(i,j); %移动后的相位 chrom(i,1,j)=cos(angle(i,j)); %移动后的位置 chrom(i,2,j)=sin(angle(i,j)); %移动后的位置 %解空间变换 chromx(i,1,j)=0.5*(varrange(j,2)*(1+chrom(i,1,j))+varrange(j,1)*(1-chrom(i,1,j))); chromx(i,2,j)=0.5*(varrange(j,2)*(1+chrom(i,2,j))+varrange(j,1)*(1-chrom(i,2,j))); end for j=1:1:2 fitness(i,j)=-chromx(i,j,1)*sin((abs(chromx(i,j,2)+1-chromx(i,j,1)))^0.5)*cos((abs(chromx(i,j,2)+1+c hromx(i,j,1)))^0.5) -(chromx(i,j,2)+1)*cos((abs(chromx(i,j,2)+1-chromx(i,j,1)))^0.5)*sin((abs(chromx(i,j,2)+1+chromx(i ,j,1)))^0.5);%计算适应度 end end %---------粒子位置变异------------------------ for i=1:1:popsize for j=1:1:vartotal if rand
end end for j=1:1:2 fitness(i,j)=-chromx(i,j,1)*sin((abs(chromx(i,j,2)+1-chromx(i,j,1)))^0.5)*cos((abs(chromx(i,j,2)+1+c hromx(i,j,1)))^0.5) -(chromx(i,j,2)+1)*cos((abs(chromx(i,j,2)+1-chromx(i,j,1)))^0.5)*sin((abs(chromx(i,j,2)+1+chromx(i ,j,1)))^0.5);%计算适应度 end end %---------统计适应度---------------------------- minfit=fitness(1,1); if fitness(1,1)>fitness(1,2) minfit=fitness(1,2); end maxfit=fitness(1,2);bestchain=2; if fitness(1,1)>fitness(1,2) maxfit=fitness(1,1);bestchain=1; end minfitindex=1;maxfitindex=1; avgfit=(fitness(1,1)+fitness(1,2))/(2*popsize); for i=2:1:popsize for j=1:1:2 if minfit>fitness(i,j) minfit=fitness(i,j);minfitindex=i; end if maxfitt2
selfangle(i,:)=angle(i,:); selfchrom(i,:,:)=chrom(i,:,:); selfchromx(i,:,:)=chromx(i,:,:); selffitness(i,:)=fitness(i,:); end end %---------更新全局最优位置-------------------- if glofit511 break; end %511.7077 end %---------程序主循环结束------------------------- bestresult=glofit; iterationstep=gen; bestresult iterationstep figure(1) plot(iteration,result)
分享到:
收藏