clc
clear all
popsize=240; %种群规模
dimension=30; %维数
runno=10;
MAXITER=2000;
irange_l=-1;
irange_r=1;
xmax=1; %x的变化范围
sum1=0;
sum2=0;
mean=0;
st=0;
data1=zeros(runno,MAXITER); %10*2000型矩阵
for run=1:runno %runno:外层最大迭代次数
T=cputime; %程序开始时间
x=(irange_r- irange_l)*rand(popsize,dimension,1) + irange_l; %初始化种群,将x的范围映射到[-5.12,5.12]空间内
pbest=x; %初始化所有个体:20*30
gbest=zeros(1,dimension); %初始化全局最优个体:1*30
for i=1:popsize %个体循环
f_x(i)=f3(x(i,:)); %计算个体极值,f3是计算30维数字的和
f_pbest(i)=f_x(i);
end
g=min(find(f_pbest==min(f_pbest(1:popsize)))); %计算全局极值。在个体极值中找到全局极值的位置(数值最低者)
gbest=pbest(g,:);%全局极值个体
f_gbest=f_pbest(g);%全局极值
MINIMUM=f_pbest(g);%全局极值个体
for t=1:MAXITER%内层:更新策略最大迭代次数
beta=(MAXITER-t)/MAXITER+0.5; %学习系数,收缩扩张系数
mbest=sum(pbest)/popsize;
for i=1:popsize
fi=rand(1,dimension);%区间[0,1]内均匀分布的随机数,fi=rand(3,atom_num)
p=fi.*pbest(i,:)+(1-fi).*gbest;%pbest(i,:):个体最优位置,gbest:全局最优位置
u=rand(1,dimension);%同fi
b=beta*(mbest-x(i,:));%x(i,:):当前位置 pop{j}
v=-log(u);
y=p+((-1).^ceil(0.5+rand(1,dimension))).*b.*v;%位置更新公式
x(i,:)=y;%位置更新完成
x(i,:)=sign(y).*min(abs(y),xmax); %sign:符号函数 abs:绝对值函数
f_x(i)=f3(x(i,:));%计算个体适应度值
if f_x(i)<f_pbest(i) %更新个体极值和个体极值对应的个体: pbest,f_pbest
pbest(i,:)=x(i,:);
f_pbest(i)=f_x(i);
end
if f_pbest(i)<f_gbest%更新全局极值和全局极值对应的个体:gbest,f_gbest
gbest=pbest(i,:);
f_gbest=f_pbest(i);
end
MINIMUM=f_gbest;%全局最优解
end
% data1(run,t)=MINIMUM;%
if MINIMUM>1e-007%查询是否满足精度要求
mean=t;%每次单独进化次数时达到要求时的迭代次数
end
end
sum1=sum1+mean;
sum2=sum2+MINIMUM;%最优解的和
%MINIMUM
time=cputime-T;%运行更新程序的时间
st=st+time;%单独运行10次总时间综合
end
av1=sum1/10; %输出平均收验代数
st/10; %运行单次更新程序的时间
av2=sum2/10 %输出平均最优解
function y=f3(x)
dimension=30; %维数
y=0;
for j=1:dimension
y=y+x(:,j);%计算1*30矩阵所有元素的和
end
量子粒子群算法
最新推荐文章于 2023-07-03 18:02:33 发布