演化算法:乌鸦搜索算法 (Crow Search Algorithm)
前言
如果你对这篇文章感兴趣,可以点击「【访客必读 - 指引页】一文囊括主页内所有高质量博客」,查看完整博客分类与对应链接。
在机器学习中,我们所要优化的问题很多时候难以求导,因此通常会采用一些演化算法(又称零阶优化 / 黑盒优化)来近似求解。
这些演化算法通常是根据一些生物的行为置顶,有如下分类:
本文所要介绍的乌鸦搜索算法 (CSA) 就是其中的一种,属于演化算法。
乌鸦搜索算法
乌鸦搜索算法受乌鸦的行为所启发,即在乌鸦种群中,每只乌鸦都在干三件事:
- 寻找藏食物的地点;
- 想要发现其它乌鸦藏食物的地点;
- 不想被其它乌鸦发现自己藏食物的地点。
每只乌鸦 iii 在每一轮会选择一只乌鸦 jjj 进行跟踪,此时有两种情况:
- 乌鸦 jjj 未发现乌鸦 iii,则乌鸦 iii 向乌鸦 jjj 藏食物的地点前进;
- 乌鸦 jjj 发现了乌鸦 iii,决定进行误导,即乌鸦 iii 的位置变成随机位置。
为进一步说明上述过程,定义如下符号:
- 向量 xitx_i^{t}xit 表示第 iii 只乌鸦第 ttt 轮的位置;
- memitmem_i^tmemit 表示第 iii 只乌鸦第 ttt 轮的历史最优解;
- APitAP_i^tAPit 表示第 iii 只乌鸦第 ttt 轮的警觉概率;
- flitfl_i^tflit 表示第 iii 只乌鸦第 ttt 轮的跟随步长;
- rir_iri 表示第 iii 只乌鸦的随机概率,范围在 (0,1)(0,1)(0,1) 之间。
将 xitx_i^{t}xit 理解为第 ttt 轮搜索到的位置,memitmem_i^tmemit 即为到第 ttt 轮时的历史最优解。具体迭代过程如下:
- 一共有 tMAXt_{MAX}tMAX 轮迭代,NNN 只乌鸦;
- 每一轮迭代,遍历每一只乌鸦;
- 当遍历到第 iii 只乌鸦时,随机选择第 jjj 只乌鸦进行跟踪;
- 如果 rj≥APjtr_j\geq AP_j^trj≥APjt,即乌鸦 jjj 未发现,则乌鸦 iii 进行如下更新:
xit+1=xit+ri⋅flit⋅(memjt−xit),x_i^{t+1}=x_i^t+r_i\cdot fl_i^t \cdot (mem_j^t-x_i^t), xit+1=xit+ri⋅flit⋅(memjt−xit), - 如果 rj<APjtr_j<AP_j^trj<APjt,则 xit+1x_i^{t+1}xit+1 变为随机值;
- 如果 rj≥APjtr_j\geq AP_j^trj≥APjt,即乌鸦 jjj 未发现,则乌鸦 iii 进行如下更新:
- 每一轮迭代结束后,遍历每一只乌鸦,若 f(xit+1)>f(memit)f(x_i^{t+1})>f(mem_i^t)f(xit+1)>f(memit),则更新 memit+1=xit+1mem_i^{t+1}=x_i^{t+1}memit+1=xit+1,否则不更新,即 memit+1=memitmem_i^{t+1}=mem_i^{t}memit+1=memit。
完整算法如下:
参考资料
- Learn Crow Search Algorithm Step-by-Step with Example
- [ESWA22 - Behrouz Samieiyan] Novel optimized crow search algorithm for feature selection