群智能算法-粒子群算法

PSO简介

粒子群优化(particle swarm optimazation,PSO)是美国普渡大学的两位学者受到鸟类群体行为的启发,在1995年提出的一种仿生全局优化算法。PSO将群体中的每个个体看作 n n n维搜索空间中一个没有体积,没有质量的粒子,在搜索空间中以一定速度飞行,通过群体中粒子间的合作与竞争得到最优解。

粒子群算法在 n n n维连续空间中搜索,对粒子群中的第 i i i i = 1 , 2 , . . . , m i=1,2,...,m i=1,2,...,m)个粒子,定义 n n n维当前位置向量 x i ( k ) = [ x 1 i , x 2 i , . . . , x n i ] x^{i}(k)=[x^{i}_{1},x^{i}_{2},...,x^{i}_{n}] xi(k)=[x1i,x2i,...,xni]表示搜索空间中第 i i i个粒子的当前位置, n n n维速度向量 v i ( k ) = [ v 1 i , v 2 i , . . . , v n i ] v^{i}(k)=[v^{i}_{1},v^{i}_{2},...,v^{i}_{n}] vi(k)=[v1i,v2i,...,vni]表示该粒子的搜索方向。 k k k为迭代次数序号。

基本PSO算法(单目标)

群体中第 i i i个粒子经历过的最优位置(pbest)记为 p i ( k ) = [ p 1 i , p 2 i , . . . , p n i ] p^{i}(k)=[p^{i}_{1},p^{i}_{2},...,p^{i}_{n}] pi(k)=[p1i,p2i,...,pni],群体中所有粒子经历过的最优位置(gbest)记为 p g ( k ) = [ p 1 g , p 2 g , . . . , p n g ] p^{g}(k)=[p^{g}_{1},p^{g}_{2},...,p^{g}_{n}] pg(k)=[p1g,p2g,...,png],基本的PSO为: v j i ( k + 1 ) = w ( k ) v j i ( k ) + ϕ 1 r a n d ( 0 , a 1 ) ( p j i ( k ) − x j i ( k ) ) + ϕ 2 r a n d ( 0 , a 2 ) ( p j g ( k ) − x j i ( k ) ) v_{j}^{i}(k+1)=w(k)v_{j}^{i}(k)+\phi_{1}rand(0,a_{1})(p_{j}^{i}(k)-x_{j}^{i}(k))+\phi_{2}rand(0,a_{2})(p^{g}_{j}(k)-x^{i}_{j}(k)) vji(k+1)=w(k)vji(k)+ϕ1rand(0,a1)(pji(k)xji(k))+ϕ2rand(0,a2)(pjg(k)xji(k)) x j i ( k + 1 ) = x j i ( k ) + v j i ( k + 1 ) , i = [ 1 , 2 , . . . , m ] , j = [ 1 , 2 , . . . , n ] x^{i}_{j}(k+1)=x^{i}_{j}(k)+v_{j}^{i}(k+1),i=[1,2,...,m],j=[1,2,...,n] xji(k+1)=xji(k)+vji(k+1),i=[1,2,...,m],j=[1,2,...,n]其中 w ( k ) w(k) w(k)是惯性权重因子, ϕ 1 , ϕ 2 \phi_{1},\phi_{2} ϕ1,ϕ2是加速度常数,均为非负值, r a n d ( 0 , a 1 ) , r a n d ( 0 , a 2 ) rand(0,a_{1}),rand(0,a_{2}) rand(0,a1),rand(0,a2) [ 0 , a 1 ] , [ 0 , a 2 ] [0,a_{1}],[0,a_{2}] [0,a1],[0,a2]范围内具有均匀分布的随机数。

第一部分 w ( k ) v j i ( k ) w(k)v_{j}^{i}(k) w(k)vji(k)表示粒子在前一时刻的速度对下一时刻速度的影响;

第二部分 ϕ 1 r a n d ( 0 , a 1 ) ( p j i ( k ) − x j i ( k ) ) \phi_{1}rand(0,a_{1})(p_{j}^{i}(k)-x_{j}^{i}(k)) ϕ1rand(0,a1)(pji(k)xji(k))为个体的认知,表示粒子本身的思考(将现在的位置与自己曾经经历过的最优位置进行比较);

第三部分 ϕ 2 r a n d ( 0 , a 2 ) ( p j g ( k ) − x j i ( k ) ) \phi_{2}rand(0,a_{2})(p^{g}_{j}(k)-x^{i}_{j}(k)) ϕ2rand(0,a2)(pjg(k)xji(k))为群体认知,表示粒子之间的信息共享与合作。

ϕ 1 , ϕ 2 \phi_{1},\phi_{2} ϕ1,ϕ2分别控制个体认知与群体认知对粒子 i i i行为产生的影响比例,引入 r a n d ( ) rand() rand()可以增加随机性。

经验上,固定 w = 1 , ϕ 1 = ϕ 2 = 2 w=1,\phi_{1}=\phi_{2}=2 w=1,ϕ1=ϕ2=2

PSO优化流程如下:

  • 1初始化每个粒子,即在允许范围内随机设置每个粒子的初始位置和速度;
  • 2评价每个粒子的适应度,计算每个粒子的目标函数。
  • 3设置每个粒子经历过的最好位置 P i P_{i} Pi。对于每个粒子,将其适应度与其经历过的最好位置 P i P_{i} Pi比较,如果由于 P i P_{i} Pi,则更新其为最好位置 P i P_{i} Pi
  • 4设置全局最优 P g P_{g} Pg。对每个粒子,将其适应度与群体经历过的最好位置 P g P_{g} Pg比较。如果优于 P g P_{g} Pg,则将其更新为群体最好位置 P g P_{g} Pg
  • 5根据PSO更新规则更新粒子的速度与位置。
  • 6检查终止条件,如果gbest前后的变化程度不在预设误差内或还没有到达迭代次数,则回到第2步。

在使用神经网络的早期,没有合适的更新方法优化神经网络参数,那个时候大家倾向于使用启发式算法比如PSO优化NN的参数(NN的权重作为粒子的位置,比如将权重展开成粒子的位置向量,损失函数作为适应度函数)。

PSO是应用广泛的优化方法,我们可以自己定义粒子位置和适应度函数,不仅可以优化NN权重,还可以使用其优化超参数(只是要注意离散的约束)。

MOPSO(多目标PSO)

pareto

多目标优化需要同时优化两个或者两个以上的目标函数,且不能显式地平衡它们(不存在同时优化每个目标函数的解)。

为了引出多目标优化的定义,先介绍一个概念,一个可容纳所有可行解的解空间叫可行解空间。下面是多目标优化的定义:

给定可行解空间 S S S m m m个目标函数 f 1 , f 2 , . . . , f m f_{1},f_{2},...,f_{m} f1,f2,...,fm,多目标优化的目的是找到解 s ∗ s^{*} s满足: s ∗ = a r g m a x s ∈ S f ( s ) = a r g m a x s ∈ S ( f 1 ( s ) , f 2 ( s ) , . . . , f m ( s ) ) s^{*}=argmax_{s\in S}f(s)=argmax_{s\in S}(f_{1}(s),f_{2}(s),...,f_{m}(s)) s=argmaxsSf(s)=argmaxsS(f1(s),f2(s),...,fm(s))说明:这些目标函数通常是相互矛盾的。优化其中一个目标函数会“损害”其他目标函数,因此,不可能找到对所有的目标函数都是最优解的解。所以,多目标优化的解是一组解,其中的每个解相对其他解都有其独特的优势。这种优势可以通过一些标准来衡量,一个常用的方法是帕累托(Pareto optimality)。

帕累托最优是指资源分配的一种理想状态。给定固有的一群人和可分配的资源,如果从一种分配状态到另一种状态的变化中,在没有使任何人情况变坏的前提下,使得至少一个人变得更好,这就是帕累托改善。帕累托最优的状态就是不可能再有更多的帕累托改善的状态。

下图容易理解:

fig1
图中黑色的方块和圆点分别代表解和目标向量。可行解空间有8组解。很明显 s 2 > s 5 s_{2}>s_{5} s2>s5,因为 f 1 ( s 2 ) > f 1 ( s 5 ) , f 2 ( s 2 ) > f 2 ( s 5 ) f_{1}(s_{2})>f_{1}(s_{5}),f_{2}(s_{2})>f_{2}(s_{5}) f1(s2)>f1(s5),f2(s2)>f2(s5),在这8组解中, s 1 , s 2 , s 3 , s 4 s_{1},s_{2},s_{3},s_{4} s1,s2,s3,s4都是帕累托最优解。

帕累托最优只是各种理想态标准中的最低标准,多目标优化的一种实用方法是找到一组尽可能代表帕累托最优的解

MOPSO

基本PSO应用到多目标上时,存在以下问题:

  • 如何选择pbest:对于单目标优化来说,选择pbest,只需要对比适应度函数就可以。但是对于多目标来说,多适应度的对比是模糊的;
  • 如何选择gbest:对于单目标在种群中只有一个最优的个体(领导者)。而对于多目标来说,最优的个体可能有很多个(pareto front);

MOPSO对第一个问题的做法是在不能严格对比粒子前后状态的情况下,随机选择一个作为pbest。对于第二个问题,MOPSO在最优集里(Archive集,所有粒子的pbest的pareto front)里根据拥挤程度选择gbest,尽量选择位置不密集的粒子。

MOPSO过程如下:

1.初始阶段
给参数赋值,初始化粒子的位置,速度,生成初始群体 P 1 P_{1} P1,评价粒子(适应度和pareto),并把 P 1 P_{1} P1中的非劣解(Pareto front)拷贝到Archive集得到 A 1 A_{1} A1

2.进化产生下一代种群
首先,计算Archive集中的粒子密度信息。 把目标空间用网格等分成小区域,以每个区域中包含的粒子数作为粒子的密度信息。粒子所在网格中包含的粒子数越多,其密度值越大,反之越小。以二维目标空间最小化优化问题为例,密度信息估计算法的具体实现过程如下:

  • Step1:计算在 t t t代时目标空间的边界 ( m i n f 1 t , m a x f 1 t ) (minf^{t}_{1},maxf^{t}_{1}) (minf1t,maxf1t) ( m i n f 2 t , m a x f 2 t ) (minf^{t}_{2},maxf^{t}_{2}) (minf2t,maxf2t)
  • Step2:计算网格的模: Δ f 1 t = m a x f 1 t − m i n f 1 t M , Δ f 2 t = m a x f 2 t − m i n f 2 t M \Delta f^{t}_{1}=\frac{maxf^{t}_{1}-minf^{t}_{1}}{M},\Delta f^{t}_{2}=\frac{maxf^{t}_{2}-minf^{t}_{2}}{M} Δf1t=Mmaxf1tminf1t,Δf2t=Mmaxf2tminf2t其中 M 2 M^{2} M2是网格的数量;
  • Step3:遍历 A t A_{t} At集中的粒子,计算其所在网格的编号,对于粒子 i i i,所在网格的编号由以下2部分组成: [ I n t ( f 1 i − m i n f 1 t Δ f 1 t ) + 1 , I n t ( f 2 i − m i n f 2 t Δ f 2 t ) + 1 ] [Int(\frac{f_{1}^{i}-minf_{1}^{t}}{\Delta f_{1}^{t}})+1,Int(\frac{f_{2}^{i}-minf_{2}^{t}}{\Delta f_{2}^{t}})+1] [Int(Δf1tf1iminf1t)+1,Int(Δf2tf2iminf2t)+1]
  • Step4:计算网格信息和粒子的密度估计值。
    网格信息计算包括:网格编号,网格中包含的粒子数;
    粒子密度估计值计算包括:粒子的目标函数1的值,粒子的目标函数2的值,粒子所在网格的编号。

其次,对于Archive集中的粒子,密度值越低,选择作为gbest的概率越大,密度值越低,搜索潜力越强。

然后,更新群体中每个粒子的速度和位置。

3.更新Archive集
对更新后的粒子群,计算pareto front,拷贝到Archive集。

4.检查情况是否已经满足条件,否则继续循环

猜你喜欢

转载自blog.csdn.net/qq_40943760/article/details/125046561
今日推荐