function [gbest_time_series,gfitness_time_series]=QPSO(fitness,M,m,D)
%待优化的目标函数:fitness
%粒子数目:M
%压缩扩张因子a
%最大迭代次数:m
%问题的维数:dimension
%目标函数取最小值时的自变量值:xm
%目标函数的最小值:fv
%==========================================================================
%设置精度为longE形式
format long;
%==========================================================================
particle=M;
dimension=D;
%==========================================================================
%为了加快下面循环结构的运行速度,提前创建内存
location=zeros(particle,dimension);
velocity=zeros(particle,dimension);
%初始化粒子的初始位置以及初始速度
for i=1:1:particle
for d=1:1:dimension
p(i,d)=randn;
end
end
%计算当前不同粒子的适应值以及其位置
for i=1:1:particle
fitness_current(i)=fitness(p(i,:));
location_current(i,:)=p(i,:);
end
%==========================================================================
%计算当前全局最优位置即gbest
gbest=location(particle,:);
for i=1:(particle-1)
if fitness(location(i,:))<fitness(gbest)
gbest=location(i,:);
end
end
for t=1:1:m
c1=rand(0,1);
c2=rand(0,1);
a=(1.0-0.5)*(m-t)/m+0.5;
sum=0;
for i=1:1:M
for d=1:D
p(i,d)=(c1*p(i,d)+c2*pg)/(c1+c2);
sum=sum+p(i,d);
end
end
mbest=sum/dimension;
u=rand(0,1);
for i=1:M
if u>0.5
location(i,:)=p-a*abs(mbest-location(i,:))*log(1/u);
else
location(i,:)=p+a*abs(mbest-location(i,:))*log(1/u);
end
if fitness(location(i,:))<fitness_current(i)
fitness_current(i)=fitness(location(i,:));
location_current(i,:)=location(i,:);
end
if fitness_current(i)<fitness(gbest)
gbest=location_current(i,:);
end
end
gbest_time_series{t}=gbest';
gfitness_time_series(t)=fitness(gbest);
end
为什么调用不了?
clear;
clc;
[gbest_time_series,gfitness_time_series]=QPSO(@fitness,2,100,1);
m=100;
for t=1:1:m
fitness111(t)=gfitness_time_series(t);
end
t=1:1:m;
plot(t,fitness111,'-o','MarkerFaceColor','y','MarkerEdge','b');
grid on;
xlabel('迭代次数/T');
ylabel('测试函数值');
title('测试函数值与迭代次数的关系');
Error in ==> Untitled at 3
[gbest_time_series,gfitness_time_series]=QPSO(@fitness,2,100,1);
%待优化的目标函数:fitness
%粒子数目:M
%压缩扩张因子a
%最大迭代次数:m
%问题的维数:dimension
%目标函数取最小值时的自变量值:xm
%目标函数的最小值:fv
%==========================================================================
%设置精度为longE形式
format long;
%==========================================================================
particle=M;
dimension=D;
%==========================================================================
%为了加快下面循环结构的运行速度,提前创建内存
location=zeros(particle,dimension);
velocity=zeros(particle,dimension);
%初始化粒子的初始位置以及初始速度
for i=1:1:particle
for d=1:1:dimension
p(i,d)=randn;
end
end
%计算当前不同粒子的适应值以及其位置
for i=1:1:particle
fitness_current(i)=fitness(p(i,:));
location_current(i,:)=p(i,:);
end
%==========================================================================
%计算当前全局最优位置即gbest
gbest=location(particle,:);
for i=1:(particle-1)
if fitness(location(i,:))<fitness(gbest)
gbest=location(i,:);
end
end
for t=1:1:m
c1=rand(0,1);
c2=rand(0,1);
a=(1.0-0.5)*(m-t)/m+0.5;
sum=0;
for i=1:1:M
for d=1:D
p(i,d)=(c1*p(i,d)+c2*pg)/(c1+c2);
sum=sum+p(i,d);
end
end
mbest=sum/dimension;
u=rand(0,1);
for i=1:M
if u>0.5
location(i,:)=p-a*abs(mbest-location(i,:))*log(1/u);
else
location(i,:)=p+a*abs(mbest-location(i,:))*log(1/u);
end
if fitness(location(i,:))<fitness_current(i)
fitness_current(i)=fitness(location(i,:));
location_current(i,:)=location(i,:);
end
if fitness_current(i)<fitness(gbest)
gbest=location_current(i,:);
end
end
gbest_time_series{t}=gbest';
gfitness_time_series(t)=fitness(gbest);
end
为什么调用不了?
clear;
clc;
[gbest_time_series,gfitness_time_series]=QPSO(@fitness,2,100,1);
m=100;
for t=1:1:m
fitness111(t)=gfitness_time_series(t);
end
t=1:1:m;
plot(t,fitness111,'-o','MarkerFaceColor','y','MarkerEdge','b');
grid on;
xlabel('迭代次数/T');
ylabel('测试函数值');
title('测试函数值与迭代次数的关系');
Error in ==> Untitled at 3
[gbest_time_series,gfitness_time_series]=QPSO(@fitness,2,100,1);