徐州网站建设,92素材网,百度网盘下载,免费微网站有哪些前言#xff1a;
暑假期间#xff0c;因科研需要#xff0c;经常在论文中看到各种优化算法#xff0c;所以自己学习了一些智能优化的算法#xff0c;做了一些相关的纸质性笔记#xff0c;寒假一看感觉又有点遗忘了#xff0c;并且笔记不方便随时查看#xff0c;所以希…前言
暑假期间因科研需要经常在论文中看到各种优化算法所以自己学习了一些智能优化的算法做了一些相关的纸质性笔记寒假一看感觉又有点遗忘了并且笔记不方便随时查看所以希望将学过的知识从新捡一捡作为几篇博客发表一下会用最通俗的小白语言讲述只要逐字认真看一般都能看得懂也是从我一个小白的角度自己对算法的理解如有讲错的地方希望大神能够批评指正。
理论知识
形象讲解如下面一张图片所示。在一个范围内假如此时A点为目前的最优点那么B点和C点都可能会向A点靠但不是直接到A点而是下一步下一个迭代循环会向A点靠。 C—直接—A11 23-1-2 A点 原始位置 位移的方向和大小 C—靠近—A11 23rand*-1-2 A点 原始位置 位移的方向和大小(rand为0-1之间的随机数) 在实际中C点的位移方向大小由三个参数所确定 1、惯性上一次迭代时候的位移大小和方向 2、自身希望的位移大小和方向 3、全局最优的位移大小和方向 由这三个参数共同确定其最后的位移方向和大小
数学模型
在一个D维空间中有N个粒子每个粒子可以表示一个D维的向量如下 Xi (xi1, xi2, xi3…xiD)其中i1,2,3…N第i个粒子的“飞行”速度也是一个D维的向量如下 Vi (vi1, vi2, vi3…viD), 其中i1,2,3…N在第t代中的某个粒子向比t1代更新时的更新公式如下 先计算位移大小Vij(t1) wvij(t) c1r1(t)[Pij(t) - xij(t)] c2r2(t)[Pgi(t) - xij(t)] 再更新位置xij(t1) xij(t) Vij(t1) 下面我逐一解释一下上述方程的各个变量的意思 w:惯性权重 vij(t):上一次迭代的速度。其与w相乘wvij(t)就得到了整个惯性变量。 c1:参数1可以理解为学习率就是控制每次迭代粒子步幅的权重。 r1(t):0-1之间的随机数与c1一起起作用。 Pij(t)个体认为的最优点。 至此c1r1(t)[Pij(t) - xij(t)]向每个个体粒子飞行的具体方向和大小。 c2:社会学习率就是控制整个种群所有变量粒子的学习率。 r2:同理r1与c2一起起作用。 Pgi(t)全局认为的最优点。 至此c2r2(t)[Pgi(t) - xij(t)]向全局最优点应该飞行的具体方向和大小 注意不是更新位置就一定是更新位置若更新后的点xij(t1)的适应度不如原位置xij(t)则不更新位置保留在原位置。适应度后面解释
算法流程
首先设置各个参数w:0.5-0.8c1、c2:0.1-2以及vmax和xmax粒子的飞行边界取决于优化函数。 接下来介绍算法具体步骤
初始化粒子群设定粒子个数N并将所有的粒子初始到某个值位置上计算所有粒子的适应度。计算待更新的粒子的新速度以及待更新粒子的新位置大小和方向计算新位置的适应度若新位置适应度更高则将粒子位置更新否则不更新判断迭代次数等条件是否满足终止循环条件若满足则退出且输出最优结果否则返回第二步继续迭代计算。 PS适应度的解释就是满足我们需要优化的函数的结果的程度。例如我们需要优化一个函数并找到其的最小值那么这个适应度就是值该粒子的函数值是不是全局最小的或者比上一次的粒子的函数值更小这个粒子的函数值就是否更小就作为本次迭代的粒子的适应度。 PS在第三步中计算出下一步粒子的速度和位置后需要先进行一个边界检测看速度和位置是否大于边界值若速度或位置大于边界值则直接用边界值替换该计算结果即可。 提醒在初始化比如50个粒子时在100次迭代中找到了全局最优解例如最小值但不是意味着所有50个粒子全都收敛到了最小值的位置我们只需要在100次迭代后有至少一个粒子收敛到了全局最优的位置我们就能够得到这个最优解。别的粒子可能因为学习率等原因没能向最优解靠近也没问题。但是这种模型的参数肯定是不如那种能够全体收敛至最优解的模型的参数来得好的。
优缺点分析
优点原理简单容易实现参数较少。 缺点容易早熟收敛导致局部最优且迭代后期的收敛速度很慢 解释w参数前期要大一些保证粒子的个体独立性强一些能够多搜索一些位置后期要小一些多向其他粒子学习尽可能收敛到全局最优。 参数设置的一些其他规律前期c1大一些c2小一些保证粒子独立性。后期c1小一些c2大一些尽快收敛至全局最优。
改进方法
针对以上参数的设定原理实现参数的自适应变化这是对模型提升的一个好办法例如可以将w设置成一个随着迭代次数增大而递减的函数。引入一些其他因素比如速度边界值随着迭代次数而增大或减小等等方法。结合一些其他的只能优化算法例如遗传算法GA免疫算法模拟退火算法等等来帮助粒子跳出局部最优改善收敛速度。
参考
参考b站相关视频——通俗易懂讲算法-最优化之粒子群优化PSO 链接通俗易懂讲算法-最优化之粒子群优化PSO 谢谢b站这位up主的讲解非常通透。
后续
后续会有时间分析一些别的优化算法的自己的相关学习理解——遗传算法GA、梯度下降算法、主成分分析PCA等。