mahuan1279 发表于 2020-6-23 20:01:52

水波算法

优化算法笔记(十四)水波算法 - 简书https://www.jianshu.com/p/a9d83e245a33
1. 水波算法简介(以下描述,均不是学术用语,仅供大家快乐的阅读)
  水波算法(Water wave optimization)是根据水波理论提出的优化算法。什么是水波理论?简单来说就是水波的宽度越小,其频率越高,频率与水波宽度的平方根成反比(具体细节我也不懂,物理方面的)。水波算法也算是一种受物理现象(理论)启发而提出的算法,提出时间并不长,还有大量的研究和应用可以深入进行。
  在水波算法中,水波有三种形式来对空间进行搜索。1.传播,2.折射,3.碎浪。传播即水波向周围扩散开来,折射是水波的高度趋近与0时改变了传播的方向(我是真的理解不能,光可以折射,水也能折射的咯?),碎浪即水波的高度较高时,水波破碎形成浪花。可以看出水波的传播是贯穿整个算法流程的,而折射只会发生在水波高度减少至0时,碎浪则发生在水波过高时。
(强行解释最为致命,作者开心就好)。

2. 算法流程将每一个水波想象成一个独立的个体,那么每个水波将拥有3个属性:位置X,波长 以及波高h。
  在每一次迭代过程中,每个水波都会通过传播的形式来对空间进行搜索同时水波的高度h会减少1。其位置更新公式如下:
https://math.jianshu.com/math?formula=X_i%5E%7B't%7D%3DX_i%5E%7Bt%7D%2Brand(-1%2C1)%5Clambda(l_%7Bmax%7D-l%7Bmin%7D)
  其中https://math.jianshu.com/math?formula=%5Clambda为该水波的波长,https://math.jianshu.com/math?formula=l_%7Bmax%7D%2Cl_%7Bmin%7D为当前搜索空间的上下界。https://math.jianshu.com/math?formula=%5Clambda的值会随着迭代的进行而改变:
https://math.jianshu.com/math?formula=%5Clambda%20%3D%20%5Clambda%20%5Calpha%5E%7B-(f(X)-f_%7Bmin%7D%2B%5Cxi)%2F(f_%7Bmax%7D-f_%7Bmin%7D%2B%5Cxi)%7D
  其中 https://math.jianshu.com/math?formula=%5Calpha为波长的衰减系数,https://math.jianshu.com/math?formula=%5Cxi 为一个较小的数以保证分母不为0。
每次传播后,如果当前的水波优于传播前的水波,则传播到该位置,否则波浪的高度h会减少1,即:
https://math.jianshu.com/math?formula=%5Cbegin%7Bcases%7D%20X_i%5E%7B't%7D%3DX_i%5E%7Bt%7D%2Brand(-1%2C1)%5Clambda(l_%7Bmax%7D-l%7Bmin%7D)%20%2Cf(X_i%5E%7B't%7D)%3Ef(X_i%5E%7Bt%7D)%20%5C%5C%20h%3Dh-1%2Cf(X_i%5E%7B't%7D)%20%5Cleq%20f(X_i%5E%7Bt%7D)%20%5C%5C%20%5Cend%7Bcases%7Df(X_i^{t}) \\ h=h-1,f(X_i^{'t}) \leq f(X_i^{t}) \\ \end{cases}" mathimg="1">
  上式中适应度函数值越大,表明位置越优。


2.2折射在一个水波进行传播之后,该水波有可能进行折射。每次传播,水波的高度h会减少1,当h减少到0时,该水波将发生折射,同时其高度和波长也会改变,折射及高度波长改变公式如下:
https://math.jianshu.com/math?formula=X_i%5E%7B't%7D%3DrandGauss((X_%7Bbest%7D%2BX_i%5Et)%2F2%2C%7CX_%7Bbest%7D-X_i%5Et%7C%2F2)
  折射后的位置正态分布在以当前水波和最优水波中点为均值,当前水波与最优水波距离为方差的位置。
  在折射后水波的高度将会重新初始化为最大高度:
https://math.jianshu.com/math?formula=h%3Dh_%7Bmax%7D
  折射后,https://math.jianshu.com/math?formula=%5Clambda会重新计算该水波的波长 :
https://math.jianshu.com/math?formula=%5Clambda%3D%5Clambda%5Cfrac%7Bf(X)%7D%7Bf(X%5E%7B'%7D)%7D


2.3碎浪在水波进行传播之后,到达了一个优于当前最优水波的位置,则该水波将会进行碎浪,并将当前最优水波传播到碎浪产生的位置。
  碎浪位置的产生公式如下:
https://math.jianshu.com/math?formula=X_i%5E%7B't%7D%3D%20%5Cbegin%7Bcases%7D%20X_i%5E%7Bt%7D%2BrandGauss(0%2C1)%5Cbeta(l_%7Bmax%7D-l%7Bmin%7D)%20%2Cd%20%5Cin%20%7Bd_%7Br1%7D%2Cd_%7Br2%7D%2C...%2Cd_%7Bk%7D%7D%20%5C%5C%20X_i%5E%7Bt%7D%2Cd%20%5Cnotin%20%7Bd_%7Br1%7D%2Cd_%7Br2%7D%2C...%2Cd_%7Bk%7D%7D%20%5C%5C%20%5Cend%7Bcases%7D
  k为一个随机数,每次碎浪将会随机选择k个维度来进行改变。https://math.jianshu.com/math?formula=%5Cbeta 为一个常数。如果碎浪得到的结果优于当前最优水波,则改变当前最优水波到碎浪的位置。






作者:stronghorse
链接:https://www.jianshu.com/p/a9d83e245a33
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。



qjchen 发表于 2020-6-25 19:37:32

谢谢分享老马兄的智能算法笔记,学习了~

mahuan1279 发表于 2020-6-25 19:49:22

qjchen 发表于 2020-6-25 19:37
谢谢分享老马兄的智能算法笔记,学习了~

这是别人写的,转载过来学习下新算法
页: [1]
查看完整版本: 水波算法