%% 清空环境
clc
clear
%% 参数初始化
%粒子群算法中的三个参数
c1 = 1.49445;%加速因子
c2 = 1.49445;
w=0.8 %惯性权重
maxgen=1000; % 进化次s数
sizepop=200; %种群规模
Vmax=1; %限制速度围
Vmin=-1;
popmax=5; %变量取值范围
popmin=-5;
dim=10; %适应度函数维数
func=1; %选择待优化的函数,1为Rastrigin,2为Schaffer,3为Griewank
Drawfunc(func);%画出待优化的函数,只画出二维情况作为可视化输出
%% 产生初始粒子和速度
for i=1:sizepop
%随机产生一个种群
pop(i,:)=popmax*rands(1,dim); %初始种群
V(i,:)=Vmax*rands(1,dim); %初始化速度
%计算适应度
fitness(i)=fun(pop(i,:),func); %粒子的适应度
end
%% 个体极值和群体极值
[bestfitness bestindex]=min(fitness);
gbest=pop(bestindex,:); %全局最佳
pbest=pop; %个体最佳
fitnesspbest=fitness; %个体最佳适应度值
fitnessgbest=bestfitness; %全局最佳适应度值
%% 迭代寻优
for i=1:maxgen
fprintf('第%d代,',i);
fprintf('最优适应度%f\n',fitnessgbest);
for j=1:sizepop
%速度更新
V(j,:) = w*V(j,:) + c1*rand*(pbest(j,:) - pop(j,:)) + c2*rand*(gbest - pop(j,:)); %根据个体最优pbest和群体最优gbest计算下一时刻速度
V(j,find(V(j,:)>Vmax))=Vmax; %限制速度不能太大
V(j,find(V(j,:)popmax))=popmax;%坐标不能超出范围
pop(j,find(pop(j,:)0.98 %加入变异种子,用于跳出局部最优值
pop(j,:)=rands(1,dim);
end
%更新第j个粒子的适应度值
fitness(j)=fun(pop(j,:),func);
end
for j=1:sizepop
%个体最优更新
if fitness(j) < fitnesspbest(j)
pbest(j,:) = pop(j,:);
fitnesspbest(j) = fitness(j);
end
%群体最优更新
if fitness(j) < fitnessgbest
gbest = pop(j,:);
fitnessgbest = fitness(j);
end
end
yy(i)=fitnessgbest;
end
%% 结果分析
figure;
plot(yy)
title('最优个体适应度','fontsize',12);
xlabel('进化代数','fontsize',12);ylabel('适应度','fontsize',12);
1.设定进化次数与w的线性关系如下图
<1>c1 = 1.49445;%加速因子
c2 = 1.49445;
w=0.8 %惯性权重
maxgen=1000; % 进化次s数
dim=10
sizepop=200;
<2>
c1 = 1.49445;%加速因子
c2 = 1.49445;
w=0.65 %惯性权重
maxgen=500; % 进化次s数
dim=10
sizepop=200;
<3>
c1 = 1.49445;%加速因子
c2 = 1.49445;
w=0.5 %惯性权重
maxgen=800; % 进化次s数
dim=10
sizepop=200;
<4>
c1 = 1.49445;%加速因子
c2 = 1.49445;
w=0.4 %惯性权重
maxgen=1000; % 进化次s数
dim=10
sizepop=200;
2.假定种群规模和维度线性关系如下图,进行参数变化
<1>
c1 = 1.49445;%加速因子
c2 = 1.49445;
w=0.4 %惯性权重
maxgen=1000; % 进化次s数
sizepop=200; %种群规模
dim=10; %适应度函数维数
<2>
c1 = 1.49445;%加速因子
c2 = 1.49445;
w=0.4 %惯性权重
maxgen=1000; % 进化次s数
sizepop=225; %种群规模
dim=5; %适应度函数维数
此时10组最优度测试均为0;
<3>
c1 = 1.49445;%加速因子
c2 = 1.49445;
w=0.4 %惯性权重
maxgen=1000; % 进化次s数
sizepop=220; %种群规模
dim=9时
<4>
c1 = 1.49445;%加速因子
c2 = 1.49445;
w=0.4 %惯性权重
maxgen=1000; % 进化次s数
sizepop=210; %种群规模
dim=8;