计算智能——粒子群优化算法实验

计算智能——粒子群优化算法实验

定义

粒子群优化算法又翻译为粒子群算法、微粒群算法、或微粒群优化算法。是通过模拟鸟群觅食行为而发展起来的一种基于群体协作的随机搜索算法。通常认为它是群集智能的一种。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函数

Schaffer函数

Griewank函数

Griewank函数

Rastrigin函数

Rastrigin函数

加速因子、惯性权重组合测试

只令惯性权重线性变换

w=0.9;
for i=1:maxgen
w=w-0.0005;

Rastrigin函数
测试序号迭代完成是否达到最优适应度达到最优适应度的迭代次数最终适应度及曲线
1/第1000代,最优适应度1.989918 Rt1
2/第1000代,最优适应度2.984877 Rt2
3/第1000代,最优适应度0.994959 Rt3
4/第1000代,最优适应度3.979836 Rt4
5/第1000代,最优适应度3.979836 Rt5
6721第1000代,最优适应度0.000000 Rt6
7/第1000代,最优适应度0.994962 Rt7
8/第1000代,最优适应度0.994962 Rt8
9/第1000代,最优适应度4.974795 Rt9
10696第1000代,最优适应度0.000000 Rt10
Schaffer函数
测试序号迭代完成是否达到最优适应度达到最优适应度的迭代次数最终适应度及曲线
178第1000代,最优适应度0.000000 St1
240第1000代,最优适应度0.000000 St2
349第1000代,最优适应度0.000000 St3
463第1000代,最优适应度0.000000 St4
562第1000代,最优适应度0.000000 St5
650第1000代,最优适应度0.000000 St6
752第1000代,最优适应度0.000000 St7
854第1000代,最优适应度0.000000 St8
958第1000代,最优适应度0.000000 St9
10110第1000代,最优适应度0.000000 St10
Griewank函数
测试序号迭代完成是否达到最优适应度达到最优适应度的迭代次数最终适应度及曲线
197第1000代,最优适应度0.000000 Gt1
2111第1000代,最优适应度0.000000 Gt2
3107第1000代,最优适应度0.000000 Gt3
4103第1000代,最优适应度0.000000 Gt4
599第1000代,最优适应度0.000000 Gt5
689第1000代,最优适应度0.000000 Gt6
797第1000代,最优适应度0.000000 Gt7
8104第1000代,最优适应度0.000000 Gt8
9112第1000代,最优适应度0.000000 Gt9
10106第1000代,最优适应度0.000000 Gt10

只令加速系数线性变化

c1 = 1;
c2 = 1;
for i=1:maxgen
c1=0.0002+c1;
c2=0.0002+c2;

Rastrigin函数
测试序号迭代完成是否达到最优适应度达到最优适应度的迭代次数最终适应度及曲线
1838第1000代,最优适应度0.000000 Rt1
2/第1000代,最优适应度2.984877 Rt2
3/第1000代,最优适应度0.994990 Rt3
4/第1000代,最优适应度0.994959 Rt4
5/第1000代,最优适应度0.000003 Rt5
6/第1000代,最优适应度0.994959 Rt6
7/第1000代,最优适应度1.989919 Rt7
8892第1000代,最优适应度0.000000 Rt8
9/第1000代,最优适应度0.001016 Rt9
10732第1000代,最优适应度0.000000 Rt10
Schaffer函数
测试序号迭代完成是否达到最优适应度达到最优适应度的迭代次数最终适应度及曲线
124第1000代,最优适应度0.000000 St1
236第1000代,最优适应度0.000000 St2
348第1000代,最优适应度0.000000 St3
445第1000代,最优适应度0.000000 St4
532第1000代,最优适应度0.000000 St5
649第1000代,最优适应度0.000000 St6
734第1000代,最优适应度0.000000 St7
849第1000代,最优适应度0.000000 St8
931第1000代,最优适应度0.000000 St9
1036第1000代,最优适应度0.000000 St10
Griewank函数
测试序号迭代完成是否达到最优适应度达到最优适应度的迭代次数最终适应度及曲线
170第1000代,最优适应度0.000000 Gt1
255第1000代,最优适应度0.000000 Gt2
369第1000代,最优适应度0.000000 Gt3
471第1000代,最优适应度0.000000 Gt4
568第1000代,最优适应度0.000000 Gt5
665第1000代,最优适应度0.000000 Gt6
763第1000代,最优适应度0.000000 Gt7
864第1000代,最优适应度0.000000 Gt8
967第1000代,最优适应度0.000000 Gt9
1060第1000代,最优适应度0.000000 Gt10

令惯性系数与加速因子同时线性变换

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 Rt1
2/第1000代,最优适应度1.995306 Rt2
3563第1000代,最优适应度0.000000 Rt3
4/第1000代,最优适应度0.497554 Rt4
5850第1000代,最优适应度0.000000 Rt5
6/第1000代,最优适应度1.989922 Rt6
7/第1000代,最优适应度0.994959 Rt7
8/第1000代,最优适应度0.089689 Rt8
9/第1000代,最优适应度0.000028 Rt9
10/第1000代,最优适应度0.995992 Rt10
Schaffer函数
测试序号迭代完成是否达到最优适应度达到最优适应度的迭代次数最终适应度及曲线
135第1000代,最优适应度0.000000 St1
236第1000代,最优适应度0.000000 St2
374第1000代,最优适应度0.000000 St3
441第1000代,最优适应度0.000000 St4
552第1000代,最优适应度0.000000 St5
652第1000代,最优适应度0.000000 St6
745第1000代,最优适应度0.000000 St7
852第1000代,最优适应度0.000000 St8
938第1000代,最优适应度0.000000 St9
1021第1000代,最优适应度0.000000 St10
Griewank函数
测试序号迭代完成是否达到最优适应度达到最优适应度的迭代次数最终适应度及曲线
195第1000代,最优适应度0.000000 Gt1
295第1000代,最优适应度0.000000 Gt2
374第1000代,最优适应度0.000000 Gt3
4114第1000代,最优适应度0.000000 Gt4
585第1000代,最优适应度0.000000 Gt5
6103第1000代,最优适应度0.000000 Gt6
7107第1000代,最优适应度0.000000 Gt7
893第1000代,最优适应度0.000000 Gt8
9107第1000代,最优适应度0.000000 Gt9
10101第1000代,最优适应度0.000000 Gt10

种群规模、适应度函数维数组合测试

只改变种群规模

Rastrigin函数(种群规模=200)
测试序号迭代完成是否达到最优适应度达到最优适应度的迭代次数最终适应度及曲线
1/第1000代,最优适应度2.985044 Rt1
2/第1000代,最优适应度5.969754 Rt2
3/第1000代,最优适应度0.994959 在这里插入图片描述
4/第1000代,最优适应度0.002777 在这里插入图片描述
5/第1000代,最优适应度9.949586 在这里插入图片描述
6/第1000代,最优适应度4.974795 在这里插入图片描述
7502第1000代,最优适应度0.000000 在这里插入图片描述
8115第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 在这里插入图片描述
9928第1000代,最优适应度0.000000 在这里插入图片描述
10/第1000代,最优适应度1.074264 在这里插入图片描述
Schaffer函数(种群数量=200)
测试序号迭代完成是否达到最优适应度达到最优适应度的迭代次数最终适应度及曲线
128第1000代,最优适应度0.000000 在这里插入图片描述
233第1000代,最优适应度0.000000 在这里插入图片描述
342第1000代,最优适应度0.000000 在这里插入图片描述
436第1000代,最优适应度0.000000 在这里插入图片描述
533第1000代,最优适应度0.000000 在这里插入图片描述
633第1000代,最优适应度0.000000 在这里插入图片描述
731第1000代,最优适应度0.000000 加粗样式
843第1000代,最优适应度0.000000 在这里插入图片描述
940第1000代,最优适应度0.000000 在这里插入图片描述
1032第1000代,最优适应度0.000000 在这里插入图片描述
Schaffer函数(种群规模=500)
测试序号迭代完成是否达到最优适应度达到最优适应度的迭代次数最终适应度及曲线
118第1000代,最优适应度0.000000 在这里插入图片描述
226第1000代,最优适应度0.000000 在这里插入图片描述
317第1000代,最优适应度0.000000 在这里插入图片描述
424第1000代,最优适应度0.000000 在这里插入图片描述
524第1000代,最优适应度0.000000 在这里插入图片描述
638第1000代,最优适应度0.000000 在这里插入图片描述
719第1000代,最优适应度0.000000 在这里插入图片描述
818第1000代,最优适应度0.000000 在这里插入图片描述
915第1000代,最优适应度0.000000 在这里插入图片描述
1030第1000代,最优适应度0.000000 在这里插入图片描述
Griewank函数(种群规模=200)
测试序号迭代完成是否达到最优适应度达到最优适应度的迭代次数最终适应度及曲线
163第1000代,最优适应度0.000000 在这里插入图片描述
266第1000代,最优适应度0.000000 在这里插入图片描述
358第1000代,最优适应度0.000000 在这里插入图片描述
463第1000代,最优适应度0.000000 在这里插入图片描述
570第1000代,最优适应度0.000000 在这里插入图片描述
674第1000代,最优适应度0.000000 在这里插入图片描述
760第1000代,最优适应度0.000000 在这里插入图片描述
862第1000代,最优适应度0.000000 在这里插入图片描述
963第1000代,最优适应度0.000000 在这里插入图片描述
1074第1000代,最优适应度0.000000 在这里插入图片描述
Griewank函数(种群规模=500)
测试序号迭代完成是否达到最优适应度达到最优适应度的迭代次数最终适应度及曲线
143第1000代,最优适应度0.000000 在这里插入图片描述
256第1000代,最优适应度0.000000 在这里插入图片描述
353第1000代,最优适应度0.000000 在这里插入图片描述
447第1000代,最优适应度0.000000 在这里插入图片描述
551第1000代,最优适应度0.000000 在这里插入图片描述
651第1000代,最优适应度0.000000 在这里插入图片描述
753第1000代,最优适应度0.000000 在这里插入图片描述
846第1000代,最优适应度0.000000 在这里插入图片描述
949第1000代,最优适应度0.000000 在这里插入图片描述
1060第1000代,最优适应度0.000000 在这里插入图片描述

只改变维度

Rastrigin函数(维度为10)

Rastrigin函数(种群规模=200)

测试序号迭代完成是否达到最优适应度达到最优适应度的迭代次数最终适应度及曲线
1/第1000代,最优适应度2.985044 Rt1
2/第1000代,最优适应度5.969754 Rt2
3/第1000代,最优适应度0.994959 在这里插入图片描述
4/第1000代,最优适应度0.002777 在这里插入图片描述
5/第1000代,最优适应度9.949586 在这里插入图片描述
6/第1000代,最优适应度4.974795 在这里插入图片描述
7502第1000代,最优适应度0.000000 在这里插入图片描述
8115第1000代,最优适应度0.000000 在这里插入图片描述
9/第1000代,最优适应度0.000089 在这里插入图片描述
10/第1000代,最优适应度0.994959 在这里插入图片描述
Rastrigin函数(维度为5)
测试序号迭代完成是否达到最优适应度获得最优适应度的迭代次数最终适应度及曲线
1308第1000代,最优适应度0.000000 在这里插入图片描述
2424第1000代,最优适应度0.000000 在这里插入图片描述
3395第1000代,最优适应度0.000000 在这里插入图片描述
4186第1000代,最优适应度0.000000 在这里插入图片描述
5316第1000代,最优适应度0.000000 在这里插入图片描述
6342第1000代,最优适应度0.000000 在这里插入图片描述
7429第1000代,最优适应度0.000000 在这里插入图片描述
8715第1000代,最优适应度0.000000 在这里插入图片描述
9318第1000代,最优适应度0.000000 在这里插入图片描述
10487第1000代,最优适应度0.000000 在这里插入图片描述
Schaffer函数(维度为10)
测试序号迭代完成是否达到最优适应度达到最优适应度的迭代次数最终适应度及曲线
128第1000代,最优适应度0.000000 在这里插入图片描述
233第1000代,最优适应度0.000000 在这里插入图片描述
342第1000代,最优适应度0.000000 在这里插入图片描述
436第1000代,最优适应度0.000000 在这里插入图片描述
533第1000代,最优适应度0.000000 在这里插入图片描述
633第1000代,最优适应度0.000000 在这里插入图片描述
731第1000代,最优适应度0.000000 加粗样式
843第1000代,最优适应度0.000000 在这里插入图片描述
940第1000代,最优适应度0.000000 在这里插入图片描述
1032第1000代,最优适应度0.000000 在这里插入图片描述
Schaffer函数(维度为5)
测试序号迭代完成是否达到最优适应度获得最优适应度的迭代次数最终适应度及曲线
139第1000代,最优适应度0.000000在这里插入图片描述
232第1000代,最优适应度0.000000在这里插入图片描述
340第1000代,最优适应度0.000000 在这里插入图片描述
441第1000代,最优适应度0.000000在这里插入图片描述
536第1000代,最优适应度0.000000 在这里插入图片描述
614第1000代,最优适应度0.000000在这里插入图片描述
717第1000代,最优适应度0.000000在这里插入图片描述
819第1000代,最优适应度0.000000在这里插入图片描述
932第1000代,最优适应度0.000000 在这里插入图片描述
1041第1000代,最优适应度0.000000 在这里插入图片描述
Griewank函数(维度为10)
测试序号迭代完成是否达到最优适应度达到最优适应度的迭代次数最终适应度及曲线
163第1000代,最优适应度0.000000 在这里插入图片描述
266第1000代,最优适应度0.000000 在这里插入图片描述
358第1000代,最优适应度0.000000 在这里插入图片描述
463第1000代,最优适应度0.000000 在这里插入图片描述
570第1000代,最优适应度0.000000 在这里插入图片描述
674第1000代,最优适应度0.000000 在这里插入图片描述
760第1000代,最优适应度0.000000 在这里插入图片描述
862第1000代,最优适应度0.000000 在这里插入图片描述
963第1000代,最优适应度0.000000 在这里插入图片描述
1074第1000代,最优适应度0.000000 在这里插入图片描述
Griewank函数(维度为5)
测试序号迭代完成是否达到最优适应度达到最优适应度的迭代次数最终适应度及曲线
132第1000代,最优适应度0.000000 在这里插入图片描述
234第1000代,最优适应度0.000000在这里插入图片描述
349第1000代,最优适应度0.000000在这里插入图片描述
444第1000代,最优适应度0.000000在这里插入图片描述
544第1000代,最优适应度0.000000在这里插入图片描述
639第1000代,最优适应度0.000000在这里插入图片描述
735第1000代,最优适应度0.000000在这里插入图片描述
836第1000代,最优适应度0.000000在这里插入图片描述
939第1000代,最优适应度0.000000 在这里插入图片描述
1045第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算法具有记忆性,粒子群体的历史最好位置可以记忆并传递给其它粒子;
需调整的参数较少,结构简单,易于工程实现;
采用实数编码,直接由问题的解决定,问题解的变量数直接作为粒子的维数。

粒子群算法的缺点

缺乏速度的动态调节,容易陷入局部最优,导致收敛精度低和不易收敛;
不能有效解决离散及组合优化问题;
不能有效求解一些非直角坐标系描述问题,如有关能量场或场内粒子运动规律的求解问题(这些求解空间的边界大部分是基于极坐标、球坐标或柱坐标的);
参数控制,对于不同的问题,如何选择合适的参数来达到最优效果。

粒子群算法的应用范围

粒子群优化算法已提出就受到了广泛的关注,各种粒子群算法应用研究的成果不断涌现,它的应用领域已从最初的函数优化和神经网络的训练扩展到更加开阔的领域,有力地促进了粒子群优化算法的研究。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值