量子粒子群算法 程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
%---------程序正文-------------------
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 maxfit=fitness(i,j);maxfitindex=i;bestchain=j; end avgfit=avgfit+fitness(i,j)/(2*popsize); end end %---------初始化全局最优解-------------------------- gloangle(1,:)=angle(maxfitindex,:); %获得全局最优相位 glochrom(1,:,:)=chrom(maxfitindex,:,:); %初始化全局最优位置 glochromx(1,:,:)=chromx(maxfitindex,:,:); %初始化全局最优位置 glofit=fitness(maxfitindex,bestchain); %获得全局最大适应度 %---------程序主循环开始---------------------------- for gen=1:1:maxgen %---------粒子位置移动------------------------------ for i=1:1:popsize