量子粒子群算法 程序

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档