计算智能——粒子群优化算法实验
定义
粒子群优化算法又翻译为粒子群算法、微粒群算法、或微粒群优化算法。是通过模拟鸟群觅食行为而发展起来的一种基于群体协作的随机搜索算法。通常认为它是群集智能的一种。PSO从这种模型中得到启示并用于解决优化问题。PSO中,每个优化问题的解都是搜索空间中的一只鸟。我们称之为“粒子”。所有的粒子都有一个由被优化的函数决定的适应值,每个粒子还有一个速度决定他们飞翔的方向和距离。然后粒子们就追随当前的最优粒子在解空间中搜索。
算法流程
参数说明
种群规模N
种群规模N影响着算法的搜索能力和计算量:
PSO对种群规模要求不高,一般取20-40就可以达到很好的求解效果,不过对于比较难的问题或者特定类别的问题,粒子数可以取到100或200。
粒子的长度D
粒子的长度D由优化问题本身决定,就是问题解的长度。 粒子的范围R由优化问题本身决定,每一维可以设定不同的范围。
最大速度Vmax
决定粒子每一次的最大移动距离,制约着算法的探索和开发能力
Vmax的每一维一般可以取相应维搜索空间的10%-20%,甚至100%,也有研究使用将Vmax按照进化代数从大到小递减的设置方案。
惯性权重
控制着前一速度对当前速度的影响,用于平衡算法的探索和开发能力
一般设置为从0.9线性递减到0.4,也有非线性递减的设置方案;可以采用模糊控制的方式设定,或者在[0.5, 1.0]之间随机取值;设为0.729的同时将c1和c2设1.49445,有利于算法的收敛。
加速系数c1和c2
加速系数c1和c2代表了粒子向自身极值pBest和全局极值gBest推进的加速权值。
c1和c2通常都等于2.0, 代表着对两个引导方向的同等重视,也存在一些c1和c2不相等的设置,但其范围一般都在0和4之间。研究对c1和c2的自适应调整方案对算法性能的增强有重要意义。
代码
主程序 PSO.m
%% 清空环境
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,:)<Vmin))=Vmin;
%种群更新
pop(j,:)=pop(j,:)+0.5*V(j,:); %位置更新
pop(j,find(pop(j,:)>popmax))=popmax;%坐标不能超出范围
pop(j,find(pop(j,:)<popmin))=popmin;
if rand>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);
画出函数图像 Drawfunc.m
function Drawfunc(label)
x=-5:0.05:5;%41列的向量
if label==1
y = x;
[X,Y] = meshgrid(x,y);
[row,col] = size(X);
for l = 1 :col
for h = 1 :row
z(h,l) = Rastrigin([X(h,l),Y(h,l)]);
end
end
surf(X,Y,z);
shading interp
xlabel('x1-axis'),ylabel('x2-axis'),zlabel('f-axis');
title('mesh');
end
if label==2
y = x;
[X,Y] = meshgrid(x,y);
[row,col] = size(X);
for l = 1 :col
for h = 1 :row
z(h,l) = Schaffer([X(h,l),Y(h,l)]);
end
end
surf(X,Y,z);
shading interp
xlabel('x1-axis'),ylabel('x2-axis'),zlabel('f-axis');
title('mesh');
end
if label==3
y = x;
[X,Y] = meshgrid(x,y);
[row,col] = size(X);
for l = 1 :col
for h = 1 :row
z(h,l) = Griewank([X(h,l),Y(h,l)]);
end
end
surf(X,Y,z);
shading interp
xlabel('x1-axis'),ylabel('x2-axis'),zlabel('f-axis');
title('mesh');
end
计算粒子适应度值 fun.m
function y = fun(x,label)
%函数用于计算粒子适应度值
%x input 输入粒子
%y output 粒子适应度值
if label==1
y=Rastrigin(x);
elseif label==2
y=Schaffer(x);
else
y= Griewank(x);
end
Schaffer函数 Schaffer.m
function y=Schaffer(x)
[row,col]=size(x);
if row>1
error('输入的参数错误');
end
y1=x(1,1);
y2=x(1,2);
temp=y1^2+y2^2;
y=0.5-(sin(sqrt(temp))^2-0.5)/(1+0.001*temp)^2;
y=-y;
Griewank函数 Griewank.m
function y=Griewank(x)
%Griewan函数
%输入x,给出相应的y值,在x=(0,0,…,0)处有全局极小点0.
%编制人:
%编制日期:
[row,col]=size(x);
if row>1
error('输入的参数错误');
end
y1=1/4000*sum(x.^2);
y2=1;
for h=1:col
y2=y2*cos(x(h)/sqrt(h));
end
y=y1-y2+1;
%y=-y;
Rastrigin函数 Rastrigin.m
function y = Rastrigin(x)
% Rastrigin函数
% 输入x,给出相应的y值,在x = ( 0 , 0 ,…, 0 )处有全局极小点0.
% 编制人:
% 编制日期:
[row,col] = size(x);
if row > 1
error( ' 输入的参数错误 ' );
end
y =sum(x.^2-10*cos(2*pi*x)+10);
%y =-y;
实验结果
Schaffer函数
Griewank函数
Rastrigin函数
加速因子、惯性权重组合测试
只令惯性权重线性变换
w=0.9;
for i=1:maxgen
w=w-0.0005;
Rastrigin函数
测试序号 | 迭代完成是否达到最优适应度 | 达到最优适应度的迭代次数 | 最终适应度及曲线 |
---|---|---|---|
1 | 否 | / | 第1000代,最优适应度1.989918 |
2 | 否 | / | 第1000代,最优适应度2.984877 |
3 | 否 | / | 第1000代,最优适应度0.994959 |
4 | 否 | / | 第1000代,最优适应度3.979836 |
5 | 否 | / | 第1000代,最优适应度3.979836 |
6 | 是 | 721 | 第1000代,最优适应度0.000000 |
7 | 否 | / | 第1000代,最优适应度0.994962 |
8 | 否 | / | 第1000代,最优适应度0.994962 |
9 | 否 | / | 第1000代,最优适应度4.974795 |
10 | 是 | 696 | 第1000代,最优适应度0.000000 |
Schaffer函数
测试序号 | 迭代完成是否达到最优适应度 | 达到最优适应度的迭代次数 | 最终适应度及曲线 |
---|---|---|---|
1 | 是 | 78 | 第1000代,最优适应度0.000000 |
2 | 是 | 40 | 第1000代,最优适应度0.000000 |
3 | 是 | 49 | 第1000代,最优适应度0.000000 |
4 | 是 | 63 | 第1000代,最优适应度0.000000 |
5 | 是 | 62 | 第1000代,最优适应度0.000000 |
6 | 是 | 50 | 第1000代,最优适应度0.000000 |
7 | 是 | 52 | 第1000代,最优适应度0.000000 |
8 | 是 | 54 | 第1000代,最优适应度0.000000 |
9 | 是 | 58 | 第1000代,最优适应度0.000000 |
10 | 是 | 110 | 第1000代,最优适应度0.000000 |
Griewank函数
测试序号 | 迭代完成是否达到最优适应度 | 达到最优适应度的迭代次数 | 最终适应度及曲线 |
---|---|---|---|
1 | 是 | 97 | 第1000代,最优适应度0.000000 |
2 | 是 | 111 | 第1000代,最优适应度0.000000 |
3 | 是 | 107 | 第1000代,最优适应度0.000000 |
4 | 是 | 103 | 第1000代,最优适应度0.000000 |
5 | 是 | 99 | 第1000代,最优适应度0.000000 |
6 | 是 | 89 | 第1000代,最优适应度0.000000 |
7 | 是 | 97 | 第1000代,最优适应度0.000000 |
8 | 是 | 104 | 第1000代,最优适应度0.000000 |
9 | 是 | 112 | 第1000代,最优适应度0.000000 |
10 | 是 | 106 | 第1000代,最优适应度0.000000 |
只令加速系数线性变化
c1 = 1;
c2 = 1;
for i=1:maxgen
c1=0.0002+c1;
c2=0.0002+c2;
Rastrigin函数
测试序号 | 迭代完成是否达到最优适应度 | 达到最优适应度的迭代次数 | 最终适应度及曲线 |
---|---|---|---|
1 | 是 | 838 | 第1000代,最优适应度0.000000 |
2 | 否 | / | 第1000代,最优适应度2.984877 |
3 | 否 | / | 第1000代,最优适应度0.994990 |
4 | 否 | / | 第1000代,最优适应度0.994959 |
5 | 否 | / | 第1000代,最优适应度0.000003 |
6 | 否 | / | 第1000代,最优适应度0.994959 |
7 | 否 | / | 第1000代,最优适应度1.989919 |
8 | 是 | 892 | 第1000代,最优适应度0.000000 |
9 | 否 | / | 第1000代,最优适应度0.001016 |
10 | 是 | 732 | 第1000代,最优适应度0.000000 |
Schaffer函数
测试序号 | 迭代完成是否达到最优适应度 | 达到最优适应度的迭代次数 | 最终适应度及曲线 |
---|---|---|---|
1 | 是 | 24 | 第1000代,最优适应度0.000000 |
2 | 是 | 36 | 第1000代,最优适应度0.000000 |
3 | 是 | 48 | 第1000代,最优适应度0.000000 |
4 | 是 | 45 | 第1000代,最优适应度0.000000 |
5 | 是 | 32 | 第1000代,最优适应度0.000000 |
6 | 是 | 49 | 第1000代,最优适应度0.000000 |
7 | 是 | 34 | 第1000代,最优适应度0.000000 |
8 | 是 | 49 | 第1000代,最优适应度0.000000 |
9 | 是 | 31 | 第1000代,最优适应度0.000000 |
10 | 是 | 36 | 第1000代,最优适应度0.000000 |
Griewank函数
测试序号 | 迭代完成是否达到最优适应度 | 达到最优适应度的迭代次数 | 最终适应度及曲线 |
---|---|---|---|
1 | 是 | 70 | 第1000代,最优适应度0.000000 |
2 | 是 | 55 | 第1000代,最优适应度0.000000 |
3 | 是 | 69 | 第1000代,最优适应度0.000000 |
4 | 是 | 71 | 第1000代,最优适应度0.000000 |
5 | 是 | 68 | 第1000代,最优适应度0.000000 |
6 | 是 | 65 | 第1000代,最优适应度0.000000 |
7 | 是 | 63 | 第1000代,最优适应度0.000000 |
8 | 是 | 64 | 第1000代,最优适应度0.000000 |
9 | 是 | 67 | 第1000代,最优适应度0.000000 |
10 | 是 | 60 | 第1000代,最优适应度0.000000 |
令惯性系数与加速因子同时线性变换
w=0.9;
c1=1;
c2=1;
for i=1:maxgen
w=w-0.0005;
c1=c1+0.0002;
c2=c2+0.0002;
Rastrigin函数
测试序号 | 迭代完成是否达到最优适应度 | 达到最优适应度的迭代次数 | 最终适应度及曲线 |
---|---|---|---|
1 | 否 | / | 第1000代,最优适应度0.012012 |
2 | 否 | / | 第1000代,最优适应度1.995306 |
3 | 是 | 563 | 第1000代,最优适应度0.000000 |
4 | 否 | / | 第1000代,最优适应度0.497554 |
5 | 是 | 850 | 第1000代,最优适应度0.000000 |
6 | 否 | / | 第1000代,最优适应度1.989922 |
7 | 否 | / | 第1000代,最优适应度0.994959 |
8 | 否 | / | 第1000代,最优适应度0.089689 |
9 | 否 | / | 第1000代,最优适应度0.000028 |
10 | 否 | / | 第1000代,最优适应度0.995992 |
Schaffer函数
测试序号 | 迭代完成是否达到最优适应度 | 达到最优适应度的迭代次数 | 最终适应度及曲线 |
---|---|---|---|
1 | 是 | 35 | 第1000代,最优适应度0.000000 |
2 | 是 | 36 | 第1000代,最优适应度0.000000 |
3 | 是 | 74 | 第1000代,最优适应度0.000000 |
4 | 是 | 41 | 第1000代,最优适应度0.000000 |
5 | 是 | 52 | 第1000代,最优适应度0.000000 |
6 | 是 | 52 | 第1000代,最优适应度0.000000 |
7 | 是 | 45 | 第1000代,最优适应度0.000000 |
8 | 是 | 52 | 第1000代,最优适应度0.000000 |
9 | 是 | 38 | 第1000代,最优适应度0.000000 |
10 | 是 | 21 | 第1000代,最优适应度0.000000 |
Griewank函数
测试序号 | 迭代完成是否达到最优适应度 | 达到最优适应度的迭代次数 | 最终适应度及曲线 |
---|---|---|---|
1 | 是 | 95 | 第1000代,最优适应度0.000000 |
2 | 是 | 95 | 第1000代,最优适应度0.000000 |
3 | 是 | 74 | 第1000代,最优适应度0.000000 |
4 | 是 | 114 | 第1000代,最优适应度0.000000 |
5 | 是 | 85 | 第1000代,最优适应度0.000000 |
6 | 是 | 103 | 第1000代,最优适应度0.000000 |
7 | 是 | 107 | 第1000代,最优适应度0.000000 |
8 | 是 | 93 | 第1000代,最优适应度0.000000 |
9 | 是 | 107 | 第1000代,最优适应度0.000000 |
10 | 是 | 101 | 第1000代,最优适应度0.000000 |
种群规模、适应度函数维数组合测试
只改变种群规模
Rastrigin函数(种群规模=200)
测试序号 | 迭代完成是否达到最优适应度 | 达到最优适应度的迭代次数 | 最终适应度及曲线 |
---|---|---|---|
1 | 否 | / | 第1000代,最优适应度2.985044 |
2 | 否 | / | 第1000代,最优适应度5.969754 |
3 | 否 | / | 第1000代,最优适应度0.994959 |
4 | 否 | / | 第1000代,最优适应度0.002777 |
5 | 否 | / | 第1000代,最优适应度9.949586 |
6 | 否 | / | 第1000代,最优适应度4.974795 |
7 | 是 | 502 | 第1000代,最优适应度0.000000 |
8 | 是 | 115 | 第1000代,最优适应度0.000000 |
9 | 否 | / | 第1000代,最优适应度0.000089 |
10 | 否 | / | 第1000代,最优适应度0.994959 |
Rastrigin函数(种群规模=500)
测试序号 | 迭代完成是否达到最优适应度 | 达到最优适应度的迭代次数 | 最终适应度及曲线 |
---|---|---|---|
1 | 否 | / | 第1000代,最优适应度4.974795 |
2 | 否 | / | 第1000代,最优适应度2.984877 |
3 | 否 | / | 第1000代,最优适应度1.000565 |
4 | 否 | / | 第1000代,最优适应度3.979836 |
5 | 否 | / | 第1000代,最优适应度4.974795 |
6 | 否 | / | 第1000代,最优适应度0.994959 |
7 | 否 | / | 第1000代,最优适应度0.000001 |
8 | 否 | / | 第1000代,最优适应度1.989918 |
9 | 是 | 928 | 第1000代,最优适应度0.000000 |
10 | 否 | / | 第1000代,最优适应度1.074264 |
Schaffer函数(种群数量=200)
测试序号 | 迭代完成是否达到最优适应度 | 达到最优适应度的迭代次数 | 最终适应度及曲线 |
---|---|---|---|
1 | 是 | 28 | 第1000代,最优适应度0.000000 |
2 | 是 | 33 | 第1000代,最优适应度0.000000 |
3 | 是 | 42 | 第1000代,最优适应度0.000000 |
4 | 是 | 36 | 第1000代,最优适应度0.000000 |
5 | 是 | 33 | 第1000代,最优适应度0.000000 |
6 | 是 | 33 | 第1000代,最优适应度0.000000 |
7 | 是 | 31 | 第1000代,最优适应度0.000000 |
8 | 是 | 43 | 第1000代,最优适应度0.000000 |
9 | 是 | 40 | 第1000代,最优适应度0.000000 |
10 | 是 | 32 | 第1000代,最优适应度0.000000 |
Schaffer函数(种群规模=500)
测试序号 | 迭代完成是否达到最优适应度 | 达到最优适应度的迭代次数 | 最终适应度及曲线 |
---|---|---|---|
1 | 是 | 18 | 第1000代,最优适应度0.000000 |
2 | 是 | 26 | 第1000代,最优适应度0.000000 |
3 | 是 | 17 | 第1000代,最优适应度0.000000 |
4 | 是 | 24 | 第1000代,最优适应度0.000000 |
5 | 是 | 24 | 第1000代,最优适应度0.000000 |
6 | 是 | 38 | 第1000代,最优适应度0.000000 |
7 | 是 | 19 | 第1000代,最优适应度0.000000 |
8 | 是 | 18 | 第1000代,最优适应度0.000000 |
9 | 是 | 15 | 第1000代,最优适应度0.000000 |
10 | 是 | 30 | 第1000代,最优适应度0.000000 |
Griewank函数(种群规模=200)
测试序号 | 迭代完成是否达到最优适应度 | 达到最优适应度的迭代次数 | 最终适应度及曲线 |
---|---|---|---|
1 | 是 | 63 | 第1000代,最优适应度0.000000 |
2 | 是 | 66 | 第1000代,最优适应度0.000000 |
3 | 是 | 58 | 第1000代,最优适应度0.000000 |
4 | 是 | 63 | 第1000代,最优适应度0.000000 |
5 | 是 | 70 | 第1000代,最优适应度0.000000 |
6 | 是 | 74 | 第1000代,最优适应度0.000000 |
7 | 是 | 60 | 第1000代,最优适应度0.000000 |
8 | 是 | 62 | 第1000代,最优适应度0.000000 |
9 | 是 | 63 | 第1000代,最优适应度0.000000 |
10 | 是 | 74 | 第1000代,最优适应度0.000000 |
Griewank函数(种群规模=500)
测试序号 | 迭代完成是否达到最优适应度 | 达到最优适应度的迭代次数 | 最终适应度及曲线 |
---|---|---|---|
1 | 是 | 43 | 第1000代,最优适应度0.000000 |
2 | 是 | 56 | 第1000代,最优适应度0.000000 |
3 | 是 | 53 | 第1000代,最优适应度0.000000 |
4 | 是 | 47 | 第1000代,最优适应度0.000000 |
5 | 是 | 51 | 第1000代,最优适应度0.000000 |
6 | 是 | 51 | 第1000代,最优适应度0.000000 |
7 | 是 | 53 | 第1000代,最优适应度0.000000 |
8 | 是 | 46 | 第1000代,最优适应度0.000000 |
9 | 是 | 49 | 第1000代,最优适应度0.000000 |
10 | 是 | 60 | 第1000代,最优适应度0.000000 |
只改变维度
Rastrigin函数(维度为10)
Rastrigin函数(种群规模=200)
测试序号 | 迭代完成是否达到最优适应度 | 达到最优适应度的迭代次数 | 最终适应度及曲线 |
---|---|---|---|
1 | 否 | / | 第1000代,最优适应度2.985044 |
2 | 否 | / | 第1000代,最优适应度5.969754 |
3 | 否 | / | 第1000代,最优适应度0.994959 |
4 | 否 | / | 第1000代,最优适应度0.002777 |
5 | 否 | / | 第1000代,最优适应度9.949586 |
6 | 否 | / | 第1000代,最优适应度4.974795 |
7 | 是 | 502 | 第1000代,最优适应度0.000000 |
8 | 是 | 115 | 第1000代,最优适应度0.000000 |
9 | 否 | / | 第1000代,最优适应度0.000089 |
10 | 否 | / | 第1000代,最优适应度0.994959 |
Rastrigin函数(维度为5)
测试序号 | 迭代完成是否达到最优适应度 | 获得最优适应度的迭代次数 | 最终适应度及曲线 |
---|---|---|---|
1 | 是 | 308 | 第1000代,最优适应度0.000000 |
2 | 是 | 424 | 第1000代,最优适应度0.000000 |
3 | 是 | 395 | 第1000代,最优适应度0.000000 |
4 | 是 | 186 | 第1000代,最优适应度0.000000 |
5 | 是 | 316 | 第1000代,最优适应度0.000000 |
6 | 是 | 342 | 第1000代,最优适应度0.000000 |
7 | 是 | 429 | 第1000代,最优适应度0.000000 |
8 | 是 | 715 | 第1000代,最优适应度0.000000 |
9 | 是 | 318 | 第1000代,最优适应度0.000000 |
10 | 是 | 487 | 第1000代,最优适应度0.000000 |
Schaffer函数(维度为10)
测试序号 | 迭代完成是否达到最优适应度 | 达到最优适应度的迭代次数 | 最终适应度及曲线 |
---|---|---|---|
1 | 是 | 28 | 第1000代,最优适应度0.000000 |
2 | 是 | 33 | 第1000代,最优适应度0.000000 |
3 | 是 | 42 | 第1000代,最优适应度0.000000 |
4 | 是 | 36 | 第1000代,最优适应度0.000000 |
5 | 是 | 33 | 第1000代,最优适应度0.000000 |
6 | 是 | 33 | 第1000代,最优适应度0.000000 |
7 | 是 | 31 | 第1000代,最优适应度0.000000 |
8 | 是 | 43 | 第1000代,最优适应度0.000000 |
9 | 是 | 40 | 第1000代,最优适应度0.000000 |
10 | 是 | 32 | 第1000代,最优适应度0.000000 |
Schaffer函数(维度为5)
测试序号 | 迭代完成是否达到最优适应度 | 获得最优适应度的迭代次数 | 最终适应度及曲线 |
---|---|---|---|
1 | 是 | 39 | 第1000代,最优适应度0.000000 |
2 | 是 | 32 | 第1000代,最优适应度0.000000 |
3 | 是 | 40 | 第1000代,最优适应度0.000000 |
4 | 是 | 41 | 第1000代,最优适应度0.000000 |
5 | 是 | 36 | 第1000代,最优适应度0.000000 |
6 | 是 | 14 | 第1000代,最优适应度0.000000 |
7 | 是 | 17 | 第1000代,最优适应度0.000000 |
8 | 是 | 19 | 第1000代,最优适应度0.000000 |
9 | 是 | 32 | 第1000代,最优适应度0.000000 |
10 | 是 | 41 | 第1000代,最优适应度0.000000 |
Griewank函数(维度为10)
测试序号 | 迭代完成是否达到最优适应度 | 达到最优适应度的迭代次数 | 最终适应度及曲线 |
---|---|---|---|
1 | 是 | 63 | 第1000代,最优适应度0.000000 |
2 | 是 | 66 | 第1000代,最优适应度0.000000 |
3 | 是 | 58 | 第1000代,最优适应度0.000000 |
4 | 是 | 63 | 第1000代,最优适应度0.000000 |
5 | 是 | 70 | 第1000代,最优适应度0.000000 |
6 | 是 | 74 | 第1000代,最优适应度0.000000 |
7 | 是 | 60 | 第1000代,最优适应度0.000000 |
8 | 是 | 62 | 第1000代,最优适应度0.000000 |
9 | 是 | 63 | 第1000代,最优适应度0.000000 |
10 | 是 | 74 | 第1000代,最优适应度0.000000 |
Griewank函数(维度为5)
测试序号 | 迭代完成是否达到最优适应度 | 达到最优适应度的迭代次数 | 最终适应度及曲线 |
---|---|---|---|
1 | 是 | 32 | 第1000代,最优适应度0.000000 |
2 | 是 | 34 | 第1000代,最优适应度0.000000 |
3 | 是 | 49 | 第1000代,最优适应度0.000000 |
4 | 是 | 44 | 第1000代,最优适应度0.000000 |
5 | 是 | 44 | 第1000代,最优适应度0.000000 |
6 | 是 | 39 | 第1000代,最优适应度0.000000 |
7 | 是 | 35 | 第1000代,最优适应度0.000000 |
8 | 是 | 36 | 第1000代,最优适应度0.000000 |
9 | 是 | 39 | 第1000代,最优适应度0.000000 |
10 | 是 | 45 | 第1000代,最优适应度0.000000 |
结果分析
默认参数配置
Rastrigin函数
达到最优适应度的平均迭代次数:(502+115)/2=309
Schaffer函数
达到最优适应度的平均迭代次数:(28+33+42+36+33+33+31+43+40+32)/10=35
Griewank函数
达到最优适应度的平均迭代次数:(63+66+58+63+70+74+60+62+63+74)/10=65
测试结果及分析
Rastrigin函数
只令惯性权重变化
达到最优适应度的平均迭代次数:(721+696)/2=709
只令加速因子变化
达到最优适应度的平均迭代次数:(838+892+732)/3=821
惯性权重和加速因子同时变化
达到最优适应度的平均迭代次数:(563+850)/2=707
只改变种群规模
达到最优适应度的平均迭代次数:928
只改变维度
达到最优适应度的平均迭代次数:(308+424+395+186+316+342+429+715+318+487)/10=392
结论
对于Rastrigin函数,每一次迭代结束都达到最优适应度的情况很少。由于本次实验采取控制变量法,从实验结果来看,在维度比较大(维度为10)的情况下,无论是只令惯性权重改变,还是只令加速因子变化,还是两者组合变化,还是只改变种群规模,在每种情况10次测试的情况下,几乎都只有1-3次的迭代结束能达到最优适应度。其中,如果只改变种群规模(从原来的200增加到500),10次测试中只能有一次达到最优适应度,且进化代数相比较默认种群规模的情况下高,说明增加种群规模可能导致算法搜索能力下降。只令惯性权重随着迭代次数而变化比只令加速因子随着迭代次数而变化的达到最优适应度的平均迭代次数更少,但是令惯性权重和加速因子一起随着迭代次数而变化的达到最优适应度的平均迭代次数比上两者更少,即使令他们改变都比默认参数配置的平均迭代次数更多。在只改变维度的情况下(维度从10下降到5),每一次都可以达到最优适应度,可知若维度下降搜索能力可以得到一定提升。
Schaffer函数
只令惯性权重变化
达到最优适应度的平均迭代次数:(78+40+49+63+62+50+52+54+58+110)/10=62
只令加速因子变化
达到最优适应度的平均迭代次数:(24+36+48+45+32+49+34+49+31+36)/10=35
惯性权重和加速因子同时变化
达到最优适应度的平均迭代次数:(35+36+74+41+52+52+45+52+38+21)/10=45
只改变种群规模
达到最优适应度的平均迭代次数:(18+26+17+24+24+38+19+18+15+30)/10=23
只改变维度
达到最优适应度的平均迭代次数:(39+32+40+41+36+14+17+19+32+41)/10=31
结论
对于Schaffer函数,可以看出每一次迭代结束都能达到最优适应度。若只令惯性权重随着迭代次数而变化(减少),其达到最优适应度的平均迭代次数相比默认配置的多了比较多,可以看出对于Schaffer函数,较小的惯性权重可能降低 算法的搜索能力。只令加速因子随着迭代次数而变化得出的结果与默认配置差不多,若两个同时改变,搜索能力会略微降低。改变种群规模(从200增大到500)也会让达到最优适应度的平均迭代次数减少,说明算法在Schaffer函数下对于较大的种群规模有更好的搜索能力。
Griewank函数
只令惯性权重变化
达到最优适应度的平均迭代次数:(97+111+107+103+99+89+97+104+112+106)/10=103
只令加速因子变化
达到最优适应度的平均迭代次数:(70+55+69+71+68+65+63+64+67+60)/10=65
惯性权重和加速因子同时变化
达到最优适应度的平均迭代次数:(95+95+74+114+85+103+107+93+107+101)/10=98
只改变种群规模
达到最优适应度的平均迭代次数:(43+56+53+47+51+51+53+46+49+60)/10=51
只改变维度
达到最优适应度的平均迭代次数:(32+34+49+44+44+39+35+36+39+45)/10=40
结论
对于Griewank函数,可以看出每一次迭代结束都能达到最优适应度。如果只改变种群规模(从原来的200增加到500),进化代数相比较默认种群规模的情况下少,说明增加种群规模可能导致算法搜索能力提升。只令惯性权重随着迭代次数而变化和令惯性权重和加速因子一起随着迭代次数而变化比只令加速因子随着迭代次数而变化的达到最优适应度的平均迭代次数更多,即使令他们改变都比默认参数配置的平均迭代次数更多,因此对于Griewank函数应该事先确定一个最优的惯性权重和加速因子。若只改变种群规模(从200增加到500),平均迭代次数比默认配置低了很多,说明对于Griewank函数适当增加种群规模能提高算法搜索能力。只改变维度(从10下降到5)也能让算法搜索能力提高,其平均迭代次数相比默认也有所减少。
实验总结
粒子群算法的优点
PSO算法具有记忆性,粒子群体的历史最好位置可以记忆并传递给其它粒子;
需调整的参数较少,结构简单,易于工程实现;
采用实数编码,直接由问题的解决定,问题解的变量数直接作为粒子的维数。
粒子群算法的缺点
缺乏速度的动态调节,容易陷入局部最优,导致收敛精度低和不易收敛;
不能有效解决离散及组合优化问题;
不能有效求解一些非直角坐标系描述问题,如有关能量场或场内粒子运动规律的求解问题(这些求解空间的边界大部分是基于极坐标、球坐标或柱坐标的);
参数控制,对于不同的问题,如何选择合适的参数来达到最优效果。
粒子群算法的应用范围
粒子群优化算法已提出就受到了广泛的关注,各种粒子群算法应用研究的成果不断涌现,它的应用领域已从最初的函数优化和神经网络的训练扩展到更加开阔的领域,有力地促进了粒子群优化算法的研究。