1 内容介绍
量子粒子群优化(QPSO)算法是在经典的粒子群优化(PSO)算法的基础上所提出的一种具有量子行为的粒子群优化算法,具有高效的全局搜索能力。通过求解J.D.Schaffer提出的多峰函数优化问题的实验分析表明,方法具有良好的收敛性和稳定性。
2 部分代码
%% 实验系列
% 量子行为粒子群算法对Sphere函数寻优优化
clear all;
format long;
tic
%% 量子行为的粒子群算法
%% 基本参数
MaxEpochs=1500; %最大迭代次数
D=30; %粒子维数
M=30;%npso-(D/10); %基本种群规模
npso=M+ceil(D/10); %粒子种群规模
aCE0=0.8; %起始CE参数
aCE1=0.5; %终止CE参数
%% 初始化
% 初始化粒子
PL=100;
X_uplimit=PL.*ones(1,D);
X_lowlimit=-1*PL.*ones(1,D);
for i=1:npso
X(i,:)=PL.*rands(1,D);
end
% load X0_Sphere.mat
% 初始适应值
for i=1:npso
X(i,D+1)=Sphere(X(i,:));
end
% 初始个体最优和全局最优
X_pbest=X; % 初始个体最优为粒子本身
kg=1;
for k=1:npso
if X_pbest(k,D+1)<=X_pbest(kg,D+1)
kg=k;
end
end
X_gbest=X_pbest(kg,:);
%% 进入迭代
for ep=1:MaxEpochs
% 计算平均最优位置
C=mean(X_pbest(:,1:D));
for j=1:npso
% 计算非最优粒子的势阱中心
r=rand(1,D);
ZX(j,:)=r.*X_pbest(j,1:D)+(1-r).*X_gbest(1,1:D);
end
% 更新粒子的位置
aCE=(aCE1-aCE0)*(ep-1)/(MaxEpochs-1)+aCE0;
for j=1:npso
if rand<=0.5
X_GX1(j,:)=ZX(j,:)+aCE.*abs(C-X(j,1:D)).*log(1./rand(1,D));
else
X_GX1(j,:)=ZX(j,:)-aCE.*abs(C-X(j,1:D)).*log(1./rand(1,D));
end
for p=1:D
if X_GX1(j,p)<X_lowlimit(1,p) || X_GX1(j,p)>X_uplimit(1,p)
X_GX1(j,p)=PL*rands(1,1);
end
end
end
% 计算适应值
X=X_GX1;
for k=1:npso
X(k,D+1)=Sphere(X(k,1:D));
end
% 更新全局最优和局部最优
for k=1:npso
if X(k,D+1)<=X_pbest(k,D+1)
X_pbest(k,:)=X(k,:);
end
end
np=1;
for ij=1:npso
if X_pbest(ij,D+1)<=X_pbest(np,D+1)
np=ij;
end
end
X_gbest=X_pbest(np,:);
Y(1,ep)=X_gbest(1,D+1);
end
save Y_QPSO_Sphere.mat Y
figure()
plot(1:size(Y,2),Y)
hold on;
figure()
plot(1:size(Y,2),log(Y))
hold on;
3 运行结果
4 参考文献
[1]余健, 郭平. 基于MATLAB的量子粒子群优化算法及其应用[J]. 计算机与数字工程, 2007, 35(12):2.