粒子群算法的寻优算法

一:粒子群算法原理

粒子群算法通过设计一种无质量的粒子来模拟鸟群中的鸟,粒子仅具有两个属性:速度和位置,速度代表移动的快慢,位置代表移动的方向。每个粒子在搜索空间中单独的搜寻最优解,并将其记为当前个体极值,并将个体极值与整个粒子群里的其他粒子共享,找到最优的那个个体极值作为整个粒子群的当前全局最优解,粒子群中的所有粒子根据自己找到的当前个体极值和整个粒子群共享的当前全局最优解来调整自己的速度和位置。

二:粒子群的算法步骤及公式

2.1 算法步骤

粒子群的算法步骤如下:
1、初始化粒子群个体;
2、计算每个个体的适应度值(函数值)作为评判好坏的标准;
3、找到每个个体自己在所有迭代过程中的最优解Pbest;
4、找到所有个体在所有迭代过程中的最优解Zbest;
5、根据速度公式更新速度;
6、根据位置公式更新位置;
7、重复步骤二直至迭代次数结束
有关参数:
速度V:限制速度的范围(需要设置一个最大速度,防止更新过快)
c1与c2:这两个参数代表加速因子,决定跟随历史优秀解的能力
粒子数与迭代次数:粒子数一般50-100,迭代次数视问题而定了

2.2 算法公式

粒子群的核心部分两个公式:
1、速度的更新方式
在这里插入图片描述
2、位置的更新方式
在这里插入图片描述

三:实现的matlab代码

函数用于计算粒子适应度值

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

参数初始化

%粒子群算法中的三个参数
c1 = 1.49445;%加速因子
c2 = 1.49445;
%w=0.8   %惯性权重
%a = 0.8;
%b = 0.2;
maxgen=1000;   % 进化次s数  
sizepop=100;   %种群规模
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; %全局最佳适应度值
%% 个体极值和群体极值
[bestfitness bestindex]=min(fitness);
gbest=pop(bestindex,:);   %全局最佳
pbest=pop;                %个体最佳
fitnesspbest=fitness;     %个体最佳适应度值
fitnessgbest=bestfitness; %全局最佳适应度值

四:运行结果

4.1默认参数下的运行结果

当c1 = 1.49445、c2 = 1.49445、w=0.8、sizepop=100、dim=10时
在这里插入图片描述
平均最优适应度为4.3778

4.2 设置不同参数对运行结果的影响

4.2.1 种群规模及维度对运行结果的影响

以下所说最优适应度均为平均最优适应度
1、当sizepop=50、dim=5时,最优适应度=0.9950
在这里插入图片描述
2、当sizepop=50、dim=10时,最优适应度=5.1737
在这里插入图片描述
3、当sizepop=50、dim=20时,最优适应度=9.7505
在这里插入图片描述
4、当sizepop=50、dim=40时,最优适应度=18.7549
在这里插入图片描述
5、当sizepop=100、dim=5时,最优适应度=0.1658
在这里插入图片描述
6、当sizepop=100、dim=10时,最优适应度=4.3778
在这里插入图片描述
7、当sizepop=100、dim=20时,最优适应度=8.5565
在这里插入图片描述
8、当sizepop=100、dim=40时,最优适应度=14.9244
在这里插入图片描述
9、当sizepop=200、dim=5时,最优适应度=0.0000
在这里插入图片描述
10、当sizepop=200、dim=10时,最优适应度=4.2619
在这里插入图片描述
11、当sizepop=200、dim=20时,最优适应度=7.5611
在这里插入图片描述
12、当sizepop=200、dim=40时,最优适应度=12.9545
在这里插入图片描述由上述结果分析可得:在20维的情况下,种群规模为100时的最优适应度约是为200时的1.29倍。在10维的情况下,种群规模为100和200时的最优适应度差别不大,但在20维的情况下,种群规模为200的最优适应度明显比100的好。==无论维度大小,种群规模越大速度越慢,搜索到的最优适应度值也越精确。增大种群规模可以较明显的提高最优适应度。==且当维度越大,增加种群规模也只能对最优适应度的提高带来轻微的提升,对于不同函数种群规模对最优适应度的影响可能相差很大。

4.2.2 学习因子c1、c2不变,w随着迭代次数变换对运行结果的影响

对惯性权重w进行自定义计算公式:

wmax = 0.9;
wmin = 0.4;
 w = wmax - (wmax-wmin)/maxgen*i;

其中,w是惯性权重,wmax是惯性权重最大值(一般为0.9),wmin是惯性权重最小值(一般为0.4),i是当前迭代次数,maxgen是总共迭代次数。该方法中,惯性权重跟迭代次数成负相关,并且惯性权重是迭代次数的一次函数,斜率恒定。

1、当wmax=0.9、wmin=0.4时的结果
在这里插入图片描述
2、当wmax=0.8、wmin=0.4时的结果
在这里插入图片描述
3、当wmax=0.9、wmin=0.3时的结果
在这里插入图片描述
对上述结果的分析:当初始迭代时,惯性权重w比较大,具有很好的全局搜索能力,而局部搜索能力较弱。随着迭代次数的累加,w的值越来越小,粒子的速度也越来越小,此时粒子具有很好的局部搜索能力,而全局搜索能力较弱。但是由于斜率恒定,所以速度的改变总是保持同一水平。如果初始迭代的时候并没有产生较好的点,那么随着迭代的累加以及速度的迅速衰减很可能导致最后陷入局部最优值。

4.2.3 学习因子c1、c2和w同时都随着迭代次数变换对运行结果的影响

对学习因子c1、c2进行自定义计算公式:

c1start=2;
c1end=0.5;
c2start=0.5;
c2end=2;
c1=c1start+(c1end-c1start)*(i/maxgen);
c2=c2start+(c2end-c2start)*(i/maxgen);

其中,c1是自身学习因子,c1start自身学习因子最大值(一般为2)、c1end是自身学习因子最小值(一般为0.5)。c2是社会学习因子,c2start社会学习因子最小值(一般为0.5),c2end是社会学习因子最大值(一般为2)i是当前迭代次数,maxgen是总共迭代次数。

1、当c1start=2、c1end=0.5、c2start=0.5、c2end=2;时的结果在这里插入图片描述在这里插入图片描述
2、当c1start=1.5、c1end=0.5、c2start=0.5、c2end=1.5;时的结果
在这里插入图片描述在这里插入图片描述

3、当c1start=2、c1end=1、c2start=1、c2end=2;时的结果
在这里插入图片描述
在这里插入图片描述
动态改变学习因子,可以平衡算法的全局搜索能力和局部搜索能力,这样提高了收敛速度和最佳适应度的同时,又保证了算法的收敛。w将影响全局和局部搜索能力,w值越大,全局搜索能力强,局部搜索能力弱;反之,局部搜索能力强,全局搜索能力弱。在迭代后期全局搜索能力弱容易陷入局部极值。

版权声明:本文为weixin_45583603原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_45583603/article/details/103367009