粒子群算法及通过惯性权重和学习因子对其进行改进—MATLAB实现

本文的代码将放在最后,需要的小伙伴们可以免费获取哦!!!
不要忘记点赞加关注奥😋😋

文章目录

  • 粒子群算法
    • 一、理论基础
      • 1、介绍
      • 2、核心公式
      • 3、图形直观解释
    • 二、问题描述
    • 三、解题思路
    • 四、MATLAB实现
      • 1、参数设置
      • 2、种群初始化
      • 3、寻找初始极值
      • 4、迭代寻优
      • 5、结果分析
    • 五、算法优化
      • 1、惯性权重的选择
      • 1.1、线性递减惯性权重与非线性递减权重
        • 1.1.1、线性与非线性权重函数的性能对比
      • 1.2、自适应惯性权重
      • 1.3、随机惯性权重
      • 2、学习因子的选择
        • 2.1压缩(收缩)因子法
        • 2.1非对称学习因子
      • 3、自动退出迭代循环

粒子群算法

一、理论基础

1、介绍

  粒子群算法(particle swarm optimization,Pso)是计算智能领域 ,除了蚁群算法、鱼群算法之外的一种群体智能的优化算法。该算法最早由 Kennedy 和 Eberhart 在 1995 年提出的PSO 算法源于对鸟类捕食行为的研究,鸟类捕食时,找到食物最简单有效的策略就是搜寻当前距离食物最近的鸟的周围区城。PSO 算法是从这种生物种群行为特征中得到启发并用于求解优化问题的,算法中每个粒子都代表问题的一个潜在解,每个粒子对应一个由适应度函数决定的适应度值。粒子的速度决定了粒子移动的方向和距离,速度随自身及其他粒子的移动经验进行动态调整,从而实现个体在可解空间中的寻优。
  PSO 算法首先在可行解空间中初始化一群粒子,每个粒子都代表极值优化问题的一个潜在最优解,用位置、速度和适应度值三项指标表示该粒子特征,适应度值由适应度函数计算得到,其值的好坏表示粒子的优劣。粒子在解空间中运动,通过跟踪个体极值 Pbest 和群体极值Gbest 更新个体位置。个体极值 Pbest 是指个体粒子搜崇到的适应度值最优位置,群体极值Gbest 是指种群中的所有粒子搜索到的适应度最优位置。粒子每更新一次位置,就计算一次适应度值,并且通过比较新粒子的适应度值和个体极值、群体极值的适应度值更新个体极值Pbest 和群体极值 Gbest 位置。
  它的核心思想是利用群体中的个体对信息的共享使整个群体的运动在问题求解空间中产生从无序到有序的演化过程,从而获得问题的可行解。

2、核心公式

  假设在一个 D D D维的搜索空间,由 n n n个粒子组成的种群 X = ( X 1 , X 2 , ⋅ ⋅ ⋅ , X n ) X = (X_1,X_2,···,X_n) X=(X1,X2,⋅⋅⋅,Xn),其中第 i i i个粒子表示一个 D D D维的向量 X i = ( x i 1 , x i 2 X_i = (x_{i1},x_{i2} Xi=(xi1,xi2, ⋅ ⋅ ⋅ , x i D ) T ···,x_{iD})^T ⋅⋅⋅,xiD)T,代表第 i i i个粒子在 D D D维搜索空间中的位置,亦代表问题的一个潜在解。根据目标函数即可计算出每个粒子位置 X i X_i Xi,对应的适应度值。第 i i i个粒子的速度为 V i = ( V i 1 , V i 2 , ⋅ ⋅ ⋅ , V i D ) T V_i = (V_{i1},V_{i2},···,V_{iD})^T Vi=(Vi1,Vi2,⋅⋅⋅,ViD)T,其中个体的极值为 P i = ( P i 1 , P i 2 , ⋅ ⋅ ⋅ , P i D ) T P_i = (P_{i1},P_{i2},···,P_{iD})^T Pi=(Pi1,Pi2,⋅⋅⋅,PiD)T,种群的群体极值为 P g = ( P g 1 , P g 2 P_g = (P_{g1},P_{g2} Pg=(Pg1,Pg2, ⋅ ⋅ ⋅ , P g D ) T ···,P_{gD})^T ⋅⋅⋅,PgD)T
  在每次迭代过程中,粒子通过个体极值和群体极值更新自身的速度和位置,即
V i d k = ω V i d k − 1 + c 1 r 1 ( P i d k − X i d k ) + c 2 r 2 ( P g d k − X i d k ) V_{id}^k = \omega V_{id}^{k-1} + c_1r_1(P_{id}^k - X_{id}^k) + c_2r_2(P_{gd}^k - X_{id}^k) Vidk=ωVidk1+c1r1(PidkXidk)+c2r2(PgdkXidk)
X i d k = X i d k − 1 + V i d k − 1 t X_{id}^k = X_{id}^{k-1} + V_{id}^{k-1}t Xidk=Xidk1+Vidk1t
其中, ω \omega ω为惯性权重; d = 1 , 2 , ⋅ ⋅ ⋅ , n d = 1,2,···,n d=1,2,⋅⋅⋅,n k k k为当前迭代次数; V i d V_{id} Vid为粒子的速度; c 1 c_1 c1 c 2 c_2 c2是非负的常数,称为加速度因子(学习因子); r 1 r_1 r1 r 2 r_2 r2是分布在[0 1]之间的随机数。运动时间 t t t一般取1,为了防止粒子盲目搜索,一般建议将其位置和速度限制在一定的区间内 [ − X m a x , X m a x ] 、 [ − X m a x , X m a x ] [-X_{max},X_{max}]、[-X_{max},X_{max}] [Xmax,Xmax][Xmax,Xmax]

3、图形直观解释

  设想这样一个场景:一群鸟在搜索食物
  假设:
  (1)所有的鸟都不知道食物在哪
  (2)它们知道自己的当前位置距离食物有多远
  (3)它们知道离食物最近的鸟的位置
  那么想一下这时候会发生什么?
  首先,离食物最近的鸟会对其他的鸟说:兄弟们,你们快往我这个方向来,我这离食物最近;
  与此同时,每只鸟在搜索食物的过程中,它们的位置也在不停变化,因此每只鸟也知道自己离食物最近的位置,这也是它们的一个参考;
  最后,鸟在飞行中还需要考虑一个惯性。
在这里插入图片描述
  进一步解释:

在这里插入图片描述

   D D D维的搜素空间,这只鸟 i i i k k k步所在的位置 = 第 k − 1 k-1 k1步所在的位置 + 第 k − 1 k-1 k1步的速度 * 运动的时间。
X i d k = X i d k − 1 + V i d k − 1 ∗ t ( 每一步运动时间 t 一般取 1 ) X_{id}^{k} = X_{id}^{k-1} + V_{id}^{k-1}*t(每一步运动时间t一般取1) Xidk=Xidk1+Vidk1t(每一步运动时间t一般取1)
   D D D维的搜素空间,这只鸟 i i i k k k步的速度 =上一步自身的速度惯性 + 自我认知部分 + 社会认知部分。
V i d k = ω V i d k − 1 + c 1 r 1 ( P i d k − X i d k ) + c 2 r 2 ( P g d k − X i d k ) ( 三个部分之和 ) V_{id}^{k} = \omega V_{id}^{k-1} + c_1r_1(P_{id}^k - X_{id}^k) + c_2r_2(P_{gd}^k - X_{id}^k)(三个部分之和) Vidk=ωVidk1+c1r1(PidkXidk)+c2r2(PgdkXidk)(三个部分之和)

二、问题描述

  求函数最大值,本案例寻优的非线性函数为:
f ( x ) = sin ⁡ x 2 + y 2 x 2 + y 2 + e cos ⁡ 2 π x + cos ⁡ 2 π y 2 − 2.71289 f(x) = \frac{\sin \sqrt{x^2+y^2}}{\sqrt {x^2+y^2}} + e^{\frac{\cos 2 \pi x + \cos 2 \pi y}{2}} - 2.71289 f(x)=x2+y2 sinx2+y2 +e2cos2πx+cos2πy2.71289
  函数图像如下:
在这里插入图片描述
  从函数图形可以看出,该函数有很多局部极大值点,而最大值在(0,0)出取得,约为1.0054。

三、解题思路

  1. 粒子和速度随机初始化
  2. 粒子适应度计算(适应度函数为目标函数)
  3. 根据初始化粒子的适应度确定个体极值和群体极值
  4. 根据上诉公式对粒子的位置和速度进行更新
  5. 计算更新后粒子的适应度
  6. 更新个体极值和群体极值
  7. 是否到达迭代次数,是:结束;否:转到步骤4。

四、MATLAB实现

1、参数设置

%% 清空环境
clc
clear%% 参数初始化
%粒子群算法中的两个参数
c1 = 1.49445;
c2 = 1.49445;maxgen=300;   % 进化次数  
sizepop=20;   %种群规模Vmax=0.5;Vmin=-0.5;
popmax=2;popmin=-2;

2、种群初始化

  随机初始化粒子的位置和速度,并根据适应度函数计算粒子的适应度值。

%% 产生初始粒子和速度
for i=1:sizepop%随机产生一个种群pop(i,:)=2*rands(1,2);    %初始种群V(i,:)=0.5*rands(1,2);  %初始化速度%计算适应度fitness(i)=fun(pop(i,:));   %染色体的适应度
end

  适应度函数:

function y = fun(x)
%函数用于计算粒子适应度值
%x           input           输入粒子 
%y           output          粒子适应度值 
y=sin( sqrt(x(1).^2+x(2).^2) )./sqrt(x(1).^2+x(2).^2)+exp((cos(2*pi*x(1))+cos(2*pi*x(2)))/2)-2.71289;

3、寻找初始极值

  根据初始粒子的适应度值寻找个体极值和群体极值。

%% 个体极值和群体极值
[bestfitness bestindex]=max(fitness);
zbest=pop(bestindex,:);   %全局最佳
gbest=pop;    %个体最佳
fitnessgbest=fitness;   %个体最佳适应度值
fitnesszbest=bestfitness;   %全局最佳适应度值

4、迭代寻优

  根据上诉所说公式对粒子的速度和这位进行更新,并且根据粒子的适应度值更新个体的极值和群体极值。在这里我们的惯性权重取为1。

%% 迭代寻优
for i=1:maxgenfor j=1:sizepop%速度更新V(j,:) = V(j,:) + c1*rand*(gbest(j,:) - pop(j,:)) + c2*rand*(zbest - pop(j,:));V(j,find(V(j,:)>Vmax))=Vmax;V(j,find(V(j,:)<Vmin))=Vmin;%种群更新pop(j,:)=pop(j,:)+V(j,:);pop(j,find(pop(j,:)>popmax))=popmax;pop(j,find(pop(j,:)<popmin))=popmin;%适应度值fitness(j)=fun(pop(j,:)); endfor j=1:sizepop%个体最优更新if fitness(j) > fitnessgbest(j)gbest(j,:) = pop(j,:);fitnessgbest(j) = fitness(j);end%群体最优更新if fitness(j) > fitnesszbestzbest = pop(j,:);fitnesszbest = fitness(j);endend yy(i)=fitnesszbest;    end

5、结果分析

  画出每一代的最优个体适应度值

%% 结果分析
plot(yy)
title('最优个体适应度','fontsize',12);
xlabel('进化代数','fontsize',12);ylabel('适应度','fontsize',12);

  最优适应度值变化如下:
在这里插入图片描述

  最终得到的最优个体适应度值为1.0054,对应的粒子位置是(-0.00019024,-0.00034630)。可以看出得出的解接近实际最优解,说明PSO(粒子群算法)具有较强的函数极值寻优。
  寻优过程如下所示:
在这里插入图片描述

五、算法优化

1、惯性权重的选择

1.1、线性递减惯性权重与非线性递减权重

  惯性权重 ω \omega ω体现的是粒子继承先前的速度的能力,Shi. Y最先将惯性权重 ω \omega ω引入PSO 算法中,并分析指出:一个较大的惯性权值有利于全局搜索,而一个较小的惯性权值则更利于局部搜索。为了更好地平衡算法的全局搜素与局部搜素能力,Shi. Y提出了线性递减惯性权重(linear decreasing inertia weight, LDIw),即 ω ( k ) = ω s t a r t − ( ω s t a r t − ω e n d ) × k T m a x (1) \omega(k) =\omega_{start} - (\omega_{start}-\omega_{end})\times\frac{k}{T_{max}}\tag{1} ω(k)=ωstart(ωstartωend)×Tmaxk(1)
其中, ω s t a r t \omega_{start} ωstart为初始惯性权重; ω e n d \omega_{end} ωend为迭代至最大次数时的惯性权重; k k k为当前迭代代数; T m a x T_{max} Tmax为最大迭代代数。一般来说,惯性权值 ω s t a r t ( ω m a x ) \omega_{start}(\omega_{max}) ωstart(ωmax) =0.9, ω e n d ( ω m i n ) \omega_{end}(\omega_{min}) ωend(ωmin)=0.4 时算法性能最好。这样,随着迭代的进行,惯性权重由 0.9线性递减至 0.4,迭代初期较大的惯性权重使算法保持了较强的全局搜索能力,而选代后期较小的惯性权重有利于算法进行更精确的局部搜索。
在这里插入图片描述
  线性惯性权重只是一种经验做法,常用的惯性权重的选择还包括如下几种(非线性权重):
ω ( k ) = ω s t a r t − ( ω s t a r t − ω e n d ) × ( k T m a x ) 2 (2) \omega(k) = \omega_{start} - (\omega_{start}-\omega_{end})\times(\frac{k}{T_{max}})^2 \tag{2} ω(k)=ωstart(ωstartωend)×(Tmaxk)2(2)
ω ( k ) = ω s t a r t − ( ω s t a r t − ω e n d ) × [ 2 k T m a x − ( k T m a x ) 2 ] (3) \omega(k) = \omega_{start} - (\omega_{start}-\omega_{end})\times[\frac{2k}{T_{max}}-(\frac{k}{T_{max}})^2]\tag{3} ω(k)=ωstart(ωstartωend)×[Tmax2k(Tmaxk)2](3)
ω ( k ) = ω e n d ( ω s t a r t ω e n d ) 1 1 + c k T m a x (4) \omega(k) = \omega_{end}(\frac{\omega_{start}}{\omega_{end}})^{\frac{1}{1+\frac{ck}{T_{max}}}}\tag{4} ω(k)=ωend(ωendωstart)1+Tmaxck1(4)
  几种 ω \omega ω的动态变化如下图所示:
在这里插入图片描述

1.1.1、线性与非线性权重函数的性能对比

  算法参数设置:种群规模 20,进化300代。每个实验设置运行 100次,将100 次的平均值作为最终结果。
  在上述的参数设置下,运用5 种 ω \omega ω取值方法对函数进行求解,并比较所得解的平均值、失效次数和接近最优值的次数,来分析其收敛精度、收敛速度等性能。
  将距离最优解1.0054 误差为0.01 的解视为接近最优解,将0.8477 及更小的解视为陷人局部最优的解。
  每种 ω \omega ω的算法进化曲线如下图所示:
在这里插入图片描述
  具体结果对比:

ω \omega ω求得最优值平均值陷入次优解次数接近次优解次数
ω \omega ω = 11.00540.97082179
ω ( k ) = ω s t a r t − ( ω s t a r t − ω e n d ) × k T m a x \omega(k) =\omega_{start} - (\omega_{start}-\omega_{end})\times\frac{k}{T_{max}} ω(k)=ωstart(ωstartωend)×Tmaxk1.00540.98011684
ω ( k ) = ω s t a r t − ( ω s t a r t − ω e n d ) × ( k T m a x ) 2 \omega(k) = \omega_{start} - (\omega_{start}-\omega_{end})\times(\frac{k}{T_{max}})^2 ω(k)=ωstart(ωstartωend)×(Tmaxk)21.00541.00520100
ω ( k ) = ω s t a r t − ( ω s t a r t − ω e n d ) × [ 2 k T m a x − ( k T m a x ) 2 ] \omega(k) = \omega_{start} - (\omega_{start}-\omega_{end})\times[\frac{2k}{T_{max}}-(\frac{k}{T_{max}})^2] ω(k)=ωstart(ωstartωend)×[Tmax2k(Tmaxk)2]1.00540.98641288
ω ( k ) = ω e n d ( ω s t a r t ω e n d ) 1 1 + c k T m a x \omega(k) = \omega_{end}(\frac{\omega_{start}}{\omega_{end}})^{\frac{1}{1+\frac{ck}{T_{max}}}} ω(k)=ωend(ωendωstart)1+Tmaxck11.00540.98361288

  由上图和上表可以看出,惯性权重 ω \omega ω不变的粒子群优化算法虽然具有较快的收敛速度,但其后期容易陷人局部最优,求解精度低;而几种 ω \omega ω动态变化的算法虽然在算法初期收敛稍慢,但在后期局部搜索能力强,利于算法跳出局部最优而求得最优解,提高了算法的求解精度。其中(3)式的函数效果最好。

1.2、自适应惯性权重

  假设现在在求最小值问题:

ω i ( k ) = { ω m i n + ( ω m a x − ω m i n ) f ( x i k ) − f m i n k f a v e r a g e k − f m i n k , f ( x i k ) ≤ f a v e r a g e k ω m a x , f ( x i k ) > f a v e r a g e k \omega_i(k) = \begin{cases} \omega_{min}+(\omega_{max}-\omega_{min})\frac{f(x_i^k)-f_{min}^k}{f_{average}^k-f_{min}^k},&f(x_i^k) \leq f_{average}^k\\ \omega_{max},&f(x_i^k) > f_{average}^k\\ \end{cases} ωi(k)={ωmin+(ωmaxωmin)faveragekfminkf(xik)fmink,ωmax,f(xik)faveragekf(xik)>faveragek
其中:

  1. ω m a x \omega_{max} ωmax ω m i n \omega_{min} ωmin是最大和最小惯性系数,一般取为0.9和0.4;
  2. f a v e r a g e k = ∑ i = 1 n f ( x i k ) / n f_{average}^k = \sum^{n}_{i=1}f(x_i^k)/n faveragek=i=1nf(xik)/n,即第 k k k次迭代时所有粒子的平均适应度
  3. f m i n k f_{min}^k fmink = min ⁡ \min min{ f ( x 1 k ) , f ( x 2 k ) , ⋅ ⋅ ⋅ , f ( x n k ) {f(x_1^k),f(x_2^k),···,f(x_n^k)} f(x1k),f(x2k),⋅⋅⋅,f(xnk)},即第 k k k次迭代时所有粒子的最小适应度。
      假设现在在求最大值问题:

ω i ( k ) = { ω m i n + ( ω m a x − ω m i n ) f m a x k − f ( x i k ) f m a x k − f a v e r a g e k , f ( x i k ) ≥ f a v e r a g e k ω m a x , f ( x i k ) < f a v e r a g e k \omega_i(k) = \begin{cases} \omega_{min}+(\omega_{max}-\omega_{min})\frac{f_{max}^k-f(x_i^k)}{f_{max}^k-f_{average}^k},&f(x_i^k) \geq f_{average}^k\\ \omega_{max},&f(x_i^k) < f_{average}^k\\ \end{cases} ωi(k)={ωmin+(ωmaxωmin)fmaxkfaveragekfmaxkf(xik),ωmax,f(xik)faveragekf(xik)<faveragek
其中:

  1. ω m a x \omega_{max} ωmax ω m i n \omega_{min} ωmin是最大和最小惯性系数,一般取为0.9和0.4;
  2. f a v e r a g e k = ∑ i = 1 n f ( x i k ) / n f_{average}^k = \sum^{n}_{i=1}f(x_i^k)/n faveragek=i=1nf(xik)/n,即第 k k k次迭代时所有粒子的平均适应度
  3. f m a x k f_{max}^k fmaxk = max ⁡ \max max{ f ( x 1 k ) , f ( x 2 k ) , ⋅ ⋅ ⋅ , f ( x n k ) {f(x_1^k),f(x_2^k),···,f(x_n^k)} f(x1k),f(x2k),⋅⋅⋅,f(xnk)},即第 k k k次迭代时所有粒子的最大适应度。

  算法参数设置:种群规模 20,进化300代。每个实验设置运行 100次,将100 次的平均值作为最终结果。将距离最优解1.0054 误差为0.01 的解视为接近最优解,将0.8477 及更小的解视为陷人局部最优的解。
在这里插入图片描述
  具体结果:

ω \omega ω求得最优值平均值陷入次优解次数接近次优解次数
自适应惯性权重1.00540.97102080

  由上图和上表可以看出,自适应惯性权重 ω \omega ω粒子群优化算法虽然略微优于惯性权重 ω \omega ω不变的粒子群算法,但其较于线性与非线性权重函数惯性权重,效果还是较差。但这只是对于这个例子而言,并不能说此方法不好。因为现在的惯性权重不仅与当前迭代次数、迭代总次数有关还与每个粒子的适应度有关

1.3、随机惯性权重

  随机的惯性权重可以避免在迭代前期局部搜索能力不足;也可以避免在迭代后期全局搜索能力不足。当然这也是前面几种改进方法的共性。
  惯性权重的公式如下:
ω ( k ) = ω m i n − ( ω m a x − ω m i n ) × r a n d + σ × r a n d n \omega(k) = \omega_{min} - (\omega_{max}-\omega_{min})\times rand + \sigma \times randn ω(k)=ωmin(ωmaxωmin)×rand+σ×randn
其中:

  1. ω m a x \omega_{max} ωmax ω m i n \omega_{min} ωmin是最大和最小惯性系数,一般取为0.9和0.4;
  2. rand为[0 1]之间均匀分布的随机数;
  3. randn为正态分布的随机数;
  4. σ \sigma σ(标准差,一般取0.2-0.5之间的数)用来度量随机惯性权重 ω \omega ω与其数学期望之间的偏离程度,该项是为了控制取值中的权重误差,是权重 ω \omega ω有利于向期望权重方向进化,这样做的依据是正常情况下实验误差服从正态分布。

  算法参数设置:种群规模 20,进化300代。每个实验设置运行 100次,将100 次的平均值作为最终结果。将距离最优解1.0054 误差为0.01 的解视为接近最优解,将0.8477 及更小的解视为陷人局部最优的解。
在这里插入图片描述
  具体结果:

ω \omega ω求得最优值平均值陷入次优解次数接近次优解次数
随机惯性权重1.00540.97072278

  由上图和上表可以看出,随机惯性权重ω粒子群优化算法与惯性权重ω不变的粒子群算法结果相差不大。但还是那句话,这只是对于这个例子而言,并不能说此方法不好。大家可以试一下其他例子。😂😂😂

2、学习因子的选择

2.1压缩(收缩)因子法

  个体学习因子c1和社会(群体)学习因子c2决定了粒子本身经验信息和其他粒子的经验信息对粒子运行轨迹的影响,其反映了粒子群之间的信息交流。设置c1较大的值,会使粒子过多地在自身的局部范围内搜索,而较大的c2的值,则又会促使粒子过早收敛到局部最优值。为了有效地控制粒子的飞行速度,使算法达到全局搜索与局部搜索两者间的有效平衡, Clerc构造了引入收缩因子的PSO模型,采用了压缩因子,这种调整方法通过合适选取参数,可确保PSO算法的收敛性,并可取消对速度的边界限制。
  学习因子的公式如下:
V i d k = Φ [ ω V i d k − 1 + c 1 r 1 ( P i d k − X i d k ) + c 2 r 2 ( P g d k − X i d k ) ] V_{id}^{k} = \Phi[\omega V_{id}^{k-1} + c_1r_1(P_{id}^k - X_{id}^k) + c_2r_2(P_{gd}^k - X_{id}^k)] Vidk=Φ[ωVidk1+c1r1(PidkXidk)+c2r2(PgdkXidk)]
压缩因子法中应用较多的个体学习因子c1和社会学习因子c2均取2.05。惯性权重 ω \omega ω = 0.9。收缩因子 Φ \Phi Φ = 2 ∣ ( 2 − C − C 2 − 4 C ) ∣ \frac{2}{|(2-C-\sqrt{C^2-4C})|} (2CC24C )2。C = c1+c2 = 4.1。
  算法参数设置:种群规模 20,进化300代。每个实验设置运行 100次,将100 次的平均值作为最终结果。将距离最优解1.0054 误差为0.01 的解视为接近最优解,将0.8477 及更小的解视为陷人局部最优的解。
在这里插入图片描述
  具体结果:

c 1 , c 2 c_1,c_2 c1,c2求得最优值平均值陷入次优解次数接近次优解次数
压缩(收缩)因子法1.00540.95073268

  由上图和上表可以看出,压缩(收缩)因子法粒子群优化算法连惯性权重ω不变的粒子群算法结果都不如(有点尴尬)。但永远还是还是那句话,这只是对于这个例子而言,并不能说此方法不好。大家可以试一下其他例子。😂😂😂大家知道有这个方法就行了。

2.1非对称学习因子

  学习因子c1和c2决定粒子个体经验信息和其他粒子经验信息对寻优轨迹的影响,反映了粒子之间的信息交换。设置较大的c1值,会使粒子过多的在局部搜索;反之,较大的c2值会使粒子过早收敛到局部最优值(没话说了,所以又把前面的抄了一遍😂😂😂)。因此,在算法搜索初期采用较大的c1值和较小的c2值,使粒子尽量发散到搜索空间即强调“个体独立意识”,而较少受到种群内其他粒子即“社会意识部分”的影响,以增加群内粒子的多样性。随着选代次数的增加,使c1线性递减, c2线性递增,从而加强了粒子向全局最优点的收敛能力。
  学习因子的公式如下:
c 1 k = c 1 i n i + ( c 1 f i n − c 1 i n i ) × k T M A X ; c 2 k = c 2 i n i + ( c 2 f i n − c 2 i n i ) × k T M A X c_1^k = c_1^{ini} + (c_1^{fin} - c_1^{ini}) \times \frac{k}{T_{MAX}};c_2^k = c_2^{ini} + (c_2^{fin} - c_2^{ini}) \times \frac{k}{T_{MAX}} c1k=c1ini+(c1finc1ini)×TMAXk;c2k=c2ini+(c2finc2ini)×TMAXk
其中:

  1. c 1 i n i c_1^{ini} c1ini = 2.5;个体学习因子初始值;
  2. c 1 f i n c_1^{fin} c1fin = 0.5:个体学习因子终止值;
  3. c 2 i n i c_2^{ini} c2ini = 1;社会学习因子初始值;
  4. c 2 f i n c_2^{fin} c2fin = 2.25:个体学习因子终止值;

  算法参数设置:种群规模 20,进化300代。每个实验设置运行 100次,将100 次的平均值作为最终结果。将距离最优解1.0054 误差为0.01 的解视为接近最优解,将0.8477 及更小的解视为陷人局部最优的解。
在这里插入图片描述
  具体结果:

c 1 , c 2 c_1,c_2 c1,c2求得最优值平均值陷入次优解次数接近次优解次数
非对称学习因子1.00540.9507595

  由上图和上表可以看出, 非对称学习因子粒子群优化算法较其他优化方法在这个例子中效果是最好的。(终于不用再说那句话了😂😂)。

3、自动退出迭代循环

  当粒子已经找到最佳位置后,再增加选代次数只会浪费计算时间,那么我们能否设计一个策略,能够自动退出迭代呢?
在这里插入图片描述

  1. 初始化最大迭代次数、计数器以及最大计数值(例如分别取100,0, 20);
  2. 定义“函数变化量容忍度”,一般取非常小的正数,例如10^(-6);
  3. 在迭代的过程中,每次计算出来最佳适应度后,都计算该适应度和上一次迭代时最佳适应度的变化量(取绝对值);
  4. 判断这个变化量和“函数变化量容忍度”的相对大小,如果前者小,则计数器
    加1;否则计数器清0;
  5. 不断重复这个过程,有以下两种可能:
    ①此时还没有超过最大选代次数,计数器的值超过了最大计数值,那么我们
    就跳出迭代循环,搜索结束。
    ②此时已经达到了最大选代次数,那么直接跳出循环,搜索结束。

进行一次搜索时可以发现这样做并不会对结果的准确度产生影响,结果如下图所示:
在这里插入图片描述

  算法参数设置:种群规模 20,进化300代。每个实验设置运行 100次,将100 次的平均值作为最终结果。将距离最优解1.0054 误差为0.01 的解视为接近最优解,将0.8477 及更小的解视为陷人局部最优的解。
  结果:

c 1 , c 2 c_1,c_2 c1,c2求得最优值平均值陷入次优解次数接近次优解次数运行时间
非对称学习因子1.00540.95075955.404689
自动退出迭代循环(用非对称学习因子)1.00541.005401001.968886

  由上图和上表可以看出,自动退出迭代循环粒子群优化算法在保证准确率的情况下大大的缩短了运行时间。👍👍
  
  
  
  

喜欢的小伙伴麻烦点个赞加关注奥,谢谢啦🙏🙏
所有代码:https://pan.baidu.com/s/1opVfYGMtZDUBmtWGi8kGRg
提取码:6666

参考:
MATLAB智能算法30案例分析(第二版)
随机惯性权重的简化粒子群优化算法[J]. 计算机应用研究, 2014, 031(002):361-363,391.
毛开富,包广清,徐驰. 基于非对称学习因子调节的粒子群优化算法[J]. 计算机工程, 2010(19):188‐190.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/61081.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

可查看其他用户聊天记录,ChatGPT 爆出大BUG

ChatGPT一经推出&#xff0c;迅速出圈&#xff0c;用户赞誉如云&#xff0c;“绝对改变世界”、“第四次工业革命的“火药桶”、“苍天啊&#xff0c;它咋啥都会&#xff0c;我失业了”&#xff0c;一时间 ChatGPT 成为完美的代言词。 然而近日&#xff0c;ChatGPT 遇到了大麻烦…

ChatGPT 和 Midjourney 将改变我们的生活,日常工作流程将完全改变并与这些新型工具集成

上周末我花了很多时间先玩 Open AI ChatGPT,然后玩 Midjourney。起初我笑了,然后我开始完全被各种可能性所困扰,然后我终于意识到了它的潜力,并开始将其用于更有成效的工作。 注意:我本可以用它来制作一个引人入胜的点击诱饵标题,但我没有. 这是我问 Open AI 聊天的第一…

博弈的意思_博弈是什么意思(博弈最通俗的解释)

国学智慧《鬼谷子》:在封闭和开合的状态中,达到自己想要的目的。 鬼谷子是一本智谋之书,里面主要讲述的就是在和别人博弈的时候,以什么样的心态和姿态,来达到自己想要的目的。也是为人处世,处世权谋之中,不可不读的一本书。鬼谷子这本书中的捭阖术,其中的道理也要灵活多…

你是伪民主式父母吗?

经常给青少年做咨询&#xff0c;发现一个有趣的现象&#xff0c;就是关于他们家庭的养育方式&#xff0c;孩子和父母的表述是不一样的&#xff0c;父母说他们是民主式的家长&#xff0c;给孩子尽量多的自由&#xff0c;不去过多管制&#xff1b;而孩子说自己的父母是特别专制和…

聪明人是怎么说话办事的?曾国藩这幅书法对联,两句话讲解透彻!

晚清名臣曾国藩的经典对联&#xff1a; “大处着眼&#xff0c;小处着手&#xff1b;群居守口&#xff0c;独居守心”&#xff01; 曾国藩是第一等的聪明人&#xff0c;能在复杂的官场中生存&#xff0c;还能赢得会做人的美誉&#xff0c;关键在于他做到了两件事&#xff0c;一…

嵌入式为什么没有软件架构师?

点击上方“小麦大叔”&#xff0c;选择“置顶/星标公众号” 福利干货&#xff0c;第一时间送达 我从事嵌入式软件开发有6、7个年头&#xff0c;bsp&#xff0c;驱动&#xff0c;应用软件&#xff0c;android hall&#xff0c;framework等都有涉猎。平时除了关注嵌入式行业的发展…

总结一下进程是什么

1、我们常说的进程是什么&#xff1f; 进程&#xff08;Process&#xff09;是计算机中的程序关于某数据集合上的运行活动&#xff0c;是系统进行资源分配和调度的基本单位&#xff0c;是操作系统结构的基础。 进程是程序的基本执的实体 2、进程状态 就绪状态 进程已获得除处…

Vue 方法中this指向 引起的祸端

可忽略 最近在写 vue 项目&#xff0c; 使用 总监封装 好的框架&#xff0c;遇到一个问题&#xff1a; vue 实例 methods 中的 方法在传递后&#xff0c;通过 函数名&#xff08;&#xff09; 方式调用后&#xff0c; 其内部 this 竟然没有指向 window。当时就不服了&#xff…

PHP语言25周年,PHP是世界上最好的语言

1995年6月8日&#xff0c;PHP 1.0版本正式问世&#xff0c;目前已经更迭到7.4版本&#xff0c;PHP 8.0 Alpha1版本也有望于今年6月中旬发布。25周年之际&#xff0c;杜蕾斯官方微博发文庆祝&#xff1a;“#PHP语言25周年#不管PHP是不是世界上最好的语言&#xff0c;反正—— pr…

“5G 太耗电,关掉它!”

作者 | Carol 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 随着5G的普及&#xff0c;如今已经有很多手机用户已经体验到了5G的便捷了。无论国内外&#xff0c;从各大运营商及手机厂商向5G的投入中可见&#xff0c;5G的普及只不过是时间问题罢了。 但就在大家都…

Android App 耗电量统计

前言 在Android统计App耗电量比较麻烦&#xff0c;直至Android 4.4&#xff0c;它仍没公开“电量统计”API或文档……额&#xff0c;是的&#xff0c;仅没有公开&#xff0c;并不是没有。平时在手机“设置- 电量”看到的数据 就是系统调用内部API的统计结果。 基础概念 1. 手机…

泰安柒柒:一篇文章带你了解爆火的ChatGPT

OpenAI发布聊天机器人模型ChatGPT&#xff0c;迅速出圈全网。它以对话方式进行交互。以更贴近人的对话方式与使用者互动&#xff0c;可以回答问题、承认错误、挑战不正确的前提、拒绝不适当的请求。 那么&#xff0c;ChatGPT为什么会爆火呢&#xff1f; 1 ChatGPT是什么&#…

ControlNet-有条件图文生成论文阅读

文章目录 摘要算法&#xff1a;ControlNetControlNet in Image Diffusion ModelTrainingImproved Training 实验Canny edgesHough linesHuman scribblesHED boundary mapOpenpifpaf poseOpenposeADE20K segmentation mapCOCO-Stuff segmentation mapDIODE normal mapDepth-to-I…

如何解决“德语/文”等外文字符显示乱码问题

目录 1“德文/语字符”等外文显示乱码原因 2 如何解决“德文/语字符”等外文显示乱码 2.1 使用支持多个“编码”切换的工具打开该文本 2.2 使用变音字符的标准ASCII字符 2.3 将计算机系统切换至西欧编码 3 结尾 1“德文/语字符”等外文显示乱码原因 以德文/语为例&#…

Domino NotesV11开放下载啦!

大家好&#xff0c;才是真的好。此刻我正在北京的Domino NotesV11培训现场写Domino Notes V11&#xff0c;人数众多&#xff0c;群情激扬。上周五&#xff0c;Domino Notes V11已经开放下载&#xff0c;不知道朋友们下到了没有&#xff1f;要是下到了&#xff0c;告诉大家一个好…

Window内置ubuntu安装与图形界面显示

文章目录 一、Window安装ubuntu1.打开控制面板2.WSL升级1&#xff09;启用适用于 Linux 的 Windows 子系统2&#xff09;检查运行 WSL 2 的要求3&#xff09; 启用虚拟机功能4&#xff09; 下载 Linux 内核更新包5&#xff09;将 WSL 2 设置为默认版本 3.安装ubuntu 二、图形界…

计算机需不需要考英语口语,哪些专业需要英语口语考试

哪些专业需要英语口语考试&#xff1f;下面小编为大家整理了相关内容&#xff0c;以供参考&#xff0c;一起来看看吧&#xff01; 哪些专业需要英语口语考试 需要英语口语的都是英语专业或外贸&#xff0c;外交类专业。按照各院校要求&#xff0c;报考外语类专业或报考涉外专业…

【评测】SUPRAcap 100囊式深层过滤器 泽平科技一级代理

以最通用的囊式过滤器形式提供Seitz过滤介质的优良特性 对于安全可靠的工艺开发来说&#xff0c;可规模放大性是至关重要的&#xff0c;SUPRAcap 100以其通 用的结构、尺寸和可与其他滤器共同使用的特性&#xff0c;使其可以应用于任何开发工艺中。 借助于新的SUPRAcap100产品…

Database Meets AI: A Survey

文章目录 Abstract1 INTRODUCTION1.1 AI for DBLearning-based Database ConfigurationLearning-based Database OptimizationLearning-based Database DesignLearning-based Database MonitoringLearning-based Database Security 1.2 DB for AIDeclarative Query ParadigmDat…