粒子群算法如何应用于连续型函数优化问题的?

摘要:文章主要参考了以下博文: https:zhuanlan.zhihu.comp564819718 1. 简介 粒子群算法是一种解决最优化问题的通用方法,其优点是求解速度快,数值相对稳定,算法简单。粒子群算法分为连续型粒子群算法和离散型
文章主要参考了以下博文: https://zhuanlan.zhihu.com/p/564819718 1. 简介 粒子群算法是一种解决最优化问题的通用方法,其优点是求解速度快,数值相对稳定,算法简单。粒子群算法分为连续型粒子群算法和离散型粒子群算法,分别用于解决连续型问题和离散型问题。 粒子群优化算法源自对鸟群捕食行为的研究:一群鸟在区域中随机搜索食物,搜索的策略就是搜寻目前离食物最近的鸟的周围区域。粒子群算法利用这种模型得到启示并应用于解决优化问题: 鸟类的飞行空间: 搜索空间,也可以理解为约束 鸟(粒子): 可行解 鸟类寻找到的食物源: 最优解 在粒子群算法中,每个优化问题的潜在解都是搜索空间中的一只鸟,称之为粒子(在连续性例子群算法中,每一个粒子就代表一个可行解)。所有的粒子都有一个由被优化的函数决定的适应度值,每个粒子还有一个速度决定它们飞翔的方向和距离。然后,粒子们就追随当前的最优粒子在解空间中搜索。 粒子群算法首先在给定的解空间中随机初始化粒子群,待优化问题的变量数决定了解空间的维数(这里表示每个粒子的维度,后面我们会用D表示维度)。每个粒子有了初始位置与初始速度(x表示当前位置,v表示速度,粒子群算法最重要的是对速度公式的更新,因为速度决定了更新的方向,进而决定解的值),然后通过迭代寻优。在每一次迭代中,每个粒子通过跟踪两个“极值”来更新自己在解空间中的空间位置与飞行速度:一个极值就是单个粒子本身在迭代过程中找到的最优解粒子,这个粒子叫作个体极值;(这里的意思是,每个粒子具有记忆性,每个粒子子记得两个值,一个是全部的粒子距离目标的最优值,另一个值是这个粒子曾经历史的最优值) 另一个极值是种群所有粒子在迭代过程中所找到的最优解粒子,这个粒子是全局极值。 2. 连续型粒子群优化算法 2.1 基本原理 假设在一个\(D维\)的目标搜索空间中,有\(N\)个粒子组成一个群落,其中第\(i\)个粒子表示一个\(D维\)的向量: \[X_i=(x_{i1},x_{i2},\dots,x_{iD}),\quad{i}=1,2,\dots,N\quad\quad(1) \] 第\(i\)个粒子的“飞行”速度也是一个\(D维\)向量: \[V_i=(v_{i1},v_{i2},\dots,v_{iD}),\quad{i}=1,2,\dots,N\quad\quad\quad(2) \] 第\(i\)个粒子迄今为止搜到的最优位置称为个体极值(比如:\((p_{11},p_{12},\dots,p_{1D})\)就是第一个粒子搜索到的最优位置),记为: \[p_{best}=(p_{i1},p_{i2},\dots,p_{iD}),\quad{i}=1,2,\dots,N\quad\quad(3) \] 整个粒子群迄今为止搜索到的最优位置为全局极值(我的理解是\(g_{best}\)就是本次迭代的局部最优解),记为: \[g_{best}=(g_{1},g_{2},\dots,g_{D})\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad(4) \] 在找到这两个最优值时,粒子根据如下的式(5)和式(6)分别来更新自己的速度和位置: \[v_{ij}(t+1)=v_{ij}(t)+c_1r_1[p_{ij}(t)-x_{ij}(t)]+c_2r_2[p_{gj}(t)-x_{ij}(t)]\quad(5) \] \[x_{ij}(t+1)=x_{ij}(t)+v_{ij}(t+1)\quad\quad\quad\quad\quad\quad\quad\quad(6) \] 式(5)和式(6)是整个粒子群算法最核心的部分,对于式(5),其中: \(c_1\)和\(c_2\)为学习因子,也称加速常数; \(r_1\)和\(r_2\)为\([0,1]\)范围内的均匀随机数;\(r_1\)和\(r_2\)是介于0和1之间的随机数,增加了粒子飞行的随机性。 \(j=1,2,…,D\); \(v_{ij}\)是粒子的速度,\(v_{ij}∈[-v_{max},v_{max}]\),\(v_{max}\)是常数,由用户设定来限制粒子的速度。
阅读全文