📄 spso11.m
字号:
global dimension % --global 用来定义一个全局变量
global popsize
dimension=30;% --维数,,参数赋值
popsize=100; % ---粒子个数
run_times=30;
max_length=1500;%---最大迭代次数
sample_point=50; %--样本点
w=1.0; %参数赋值 --定义为惯性权重
c1=2.0; % --加速常速
c2=2.0;
vmax=500; %--最大速度
xmin=-500; %—-搜索空间限制
xmax=500;
current_position=zeros(dimension,popsize); %数组预定义,相当于初始设置,定义了30*100的零矩阵
current_v=zeros(dimension,popsize);
pbest=zeros(dimension,popsize);%——个体最优
gbest=zeros(dimension,1); %——全局最优
gbest_fitness=zeros(1,popsize); %——全局最优适应值
current_fitness=zeros(1,popsize); %——当前适应值
gbest1=zeros(dimension,popsize);
gfitness_sampoint=zeros(run_times,fix(max_length/sample_point)); %fix表示取整
total_best=zeros(1,run_times);
gfitness_ave=zeros(1,fix(max_length/sample_point));
for i=1:run_times %主程序,运行次数为run_times
i
current_position=(xmax-xmin)*rand(dimension,popsize)+xmin; %微粒参数的初始化
current_v=vmax*rand(dimension,popsize);
pbest=current_position;
pbest_fitness=F25_FITNESS(current_position); %函数适应值计算
gbest_fitness=min(pbest_fitness);
locate=minfitness_locate(pbest_fitness,gbest_fitness); %群体最优适应值定位
gbest=pbest(:,locate);
gbest1=repmat(gbest,1,popsize);
w=0.9;
for j=1:max_length %搜索最优值过程,循环代数为max_length
w=0.9-(j-1)*0.5/(max_length-1);
current_v=w*current_v+c1*rand(dimension,popsize).*(pbest-current_position)+c2*rand(dimension,popsize).*(gbest1-current_position);
current_v=modify1_v(current_v,vmax); %修改速度参数
current_position=current_v+current_position;
current_position=modify_position(current_position,xmax,xmin); %修改位置参数
current_fitness=F25_FITNESS(current_position); %计算个体当前适应值
[pbest_fitness,pbest]=modify_fitness(pbest_fitness,current_fitness,pbest,current_position); %修改个体历史最优值和最优位置
gbest_fitness=min(pbest_fitness); %修改群体最优值
locate=minfitness_locate(pbest_fitness,gbest_fitness); %群体最优适应值定位
gbest=pbest(:,locate); %修改群体最优位置
gbest1=repmat(gbest,1,popsize);
if mod(j,sample_point)==0 %进化过程最优值统计
a=j/sample_point;
gfitness_sampoint(i,a)=gbest_fitness;
end
end
total_best(1,i)=gbest_fitness; %最优值统计
gbest_fitness
end
best_fitness=min(total_best); %最优值计算
worst_fitness=max(total_best); %最次值计算
mean_fitness=mean(total_best); %均值计算
std_fitness=std(total_best); %方差计算
gfitness_ave=sum(gfitness_sampoint)/run_times; %样本点均值计算
format long e
mean_fitness %输出所需值
std_fitness
best_fitness
worst_fitness
gfitness_ave
total_best
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -