量子粒子群算法
- 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
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
for j=1:1:vart
otal
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
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
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 maxfit
end
avgfit=avgfit+fitness(i,j)/(2*popsize);
end
end
%---------更新自身最优位置---------------------
for i=1:1:popsize
t1=fitness(i,1);
if t1
end
t2=selffitness(i,1);
if t2
end
if t1>t2
selfangle(i,:)=angle(i,:);
selfchrom(i,:,:)=chrom(i,:,:);
selfchromx(i,:,:)=chromx(i,:,:);
selffitness(i,:)=fitness(i,:);
end
end
%---------更新全局最优位置--------------------
if glofit
glochrom(1,:,:)=chrom(maxfitindex,:,:); %初始化全局最优位置
glochromx(1,:,:)=chromx(maxfitindex,:,:); %初始化全局最优位置
glofit=fitness(maxfitindex,bestchain); %获得全局最大适应度
end
%---------记录结果--------------
--------------
iteration(gen)=gen
result(gen)=glofit
if result(gen)>511
break;
end %511.7077
end
%---------程序主循环结束-------------------------
bestresult=glofit;
iterationstep=gen;
bestresult
iterationstep
figure(1)
plot(iteration,result)