目录

一、遗传算法——收敛速度慢

二、粒子群算法(鸟群、蚁群寻食算法)——收敛速度快

三、蒙特卡罗算法原理也是利用了穷举所有解之后做比较的思路:


几天没写总结了,说下我理解的遗传算法和粒子群算法,后面说下蒙特卡罗算法!两个算法都是用来求最优解的,如:某函数f(x)在(a,b)上的最大或小值、连通图中从A到B的最短路径、工程或活动安排(AOE关键路径)的最佳方案,同时可以结合(非)线性回归、支持向量机、神经网络分类算法用之来求解最优参数w(原本三种算法都采用梯度下降法慢慢求解最优参数)。总之,对于要求解的变量(或方案)的解空间中存在许多解(称之为误差解空间),就是存在误差解空间的模型都可以使用上面两种方法找到最优解。

其实最暴力的方法就是把所有解都列举出之后带入原函数关系式再对比结果就能得到最优解。遗传算法和粒子群算法,就是利用这一简单的思路出发的。但是他们只要使用者给列出(>2)种解,算法会自动由给出的一组的解为基础穷举出所有解情况,并且他们会朝着最优解的方向以特定步长快速穷举出中间部分解直到找到最优解。两种算法都是在如何使最初解在穷举的过程中可以快速向最优解的方向靠近提出了自己的想法。

       假如在区间(30,455)上求f(x)最大值,初始列出x1,x2,x3,x4=(31,37,34,38)四个解——种群。

一、遗传算法——收敛速度慢

  1. 将种群x代入f(x),得到f(31)<f(34)<f(37)<f(38)。选择淘汰31,令x1=x4=38,此时,x1,x2,x3,x4=(38,37,34,38)。
  2. X用二进制表示之后交叉、变异,原种群本来就把最差解给淘汰了,在经过交叉变异种群x的值整体向最优解方向变成更优的种群(可以了解一下二进制编码高位不变低位互换会使最大值变得更大)。
  3. (2)中的新种群解码带入函数比较结果大小重复(1),重复(2),直到种群x来回在某个值两边变化时得到最优解。

 

二、粒子群算法(鸟群、蚁群寻食算法)——收敛速度快

如何改变x的值使它向着最优值方向不断穷举呢?计算一个矢量速度V,使得x朝着某个方向以一定的步长不断的改变优化。鸟群x1,x2,x3,x4=(31,37,34,38)寻找食物的过程中每只鸟(1)根据自己以往经验有个判断方向(2)综合观察队友的寻找经历可排除优化方向。因此,V的方向取决于(1),(2)。

当前V的大小=上一步V大小+(个体xi历史最优值-上一步xi的值)+(整体历史最优值-上一步xi的值)。


python遗传算法求解函数最小值的方法 pytorch遗传算法_最优解

                                      (1)

  1. 初始化粒子群体(群体规模为>2),初始化x的值和x编号的初始速度
  2. 将x代入f(x)评价得出每个粒子的适应度
  3. Find the pbest对每个粒子,将其当前适应值和个体历史最佳适应值(pbest)做比较,用较大者更个体新历史最佳x。
  4. Find the gbest对每个粒子,将其当前适应值和群体历史最佳适应值(gbest)做比较,用较大者更新群体历史最佳x。
  5. 用公式(1)计算更新每个粒子的v,Vx更新种群x向着最优值方向迁移。
  6. 不断重复(1)——(5)直到找到最佳适应度值。

三、蒙特卡罗算法原理也是利用了穷举所有解之后做比较的思路:

主要利用积分中值定理求复杂积分值或一些复杂几何的面积、体积

  1. 计算机可以多次随机自动的产生一组解空间的随机数,相对于在穷举。再计算出一个概率值。
  2. 直角坐标系中有个知道面积的长方形,现在用一条曲线分成两部分,要求各部分的面积。我们可以向长方形中随机扔n颗豆子,然数出各部分有多少豆子,就能得出面积。蒙特卡罗算法充分利用了计算机可随机生成解空间中的的未变量的特性。