【智能算法】流向算法(FDA)原理及实现

目录


1.背景

2021年,H Karami等人受到水流运动规律启发,提出了流向算法(Flow Direction Algorithm, FDA)。

2.算法原理

2.1算法思想

FDA受到了流入排水池的水流的启发,模拟了水流朝向排水池最低高度出口的方向流动 (水往低处流~) 。首先创建一个初始种群在排水池即问题的搜索空间中,然后考虑了邻近水流及其坡度对水流的影响,最后使水流流向海拔较低的位置,也就是排水池的最低海拔出口点(适应度值度量)。

2.2算法过程

创建水流领域

FDA 假设每个水流附近存在 β 个邻域,则第i个水流的第j个邻居位置为:
N ( j ) = F ( i ) + R N × Δ (1) N\left(j\right)=F\left(i\right)+R_{\mathbb{N}}\times\Delta \tag{1} N(j)=F(i)+RN×Δ(1)

其中,RN是均值为0,标准差为1的正态分布随机数;Δ 是用来控制算法搜索空间大小的控制参数,其值越小算法搜索范围越小,反之搜索空间越大.Δ的值从一个较大值线性减小到较小值,并朝向随机位置以增加多样性,表述为:
Δ = [ R × X r a n d − R × F ( i ) ] × ∥ X b e s t − F ( i ) ∥ × W (2) \begin{aligned}\Delta&=\bigl[R\times X_{\mathrm{rand}}-R\times F(i)\bigr]\times\left\|X_{\mathrm{best}}-F(i)\right\|\times W\end{aligned}\tag{2} Δ=[R×Xrand−R×F(i)]×∥Xbest−F(i)∥×W(2)

其中,Xrand为随机水流位置,Xbest为当代最优水流位置,W为非线性权重:
W = ( 1 − τ τ max ⁡ ) 2 × R N × ( R u × τ τ max ⁡ ) × R u (3) W=\left(1-\frac{\tau}{\tau_{\max}}\right)^{2\times R_{N}}\times\left(R_{\mathrm{u}}\times\frac{\tau}{\tau_{\max}}\right)\times R_{\mathrm{u}}\tag{3} W=(1−τmaxτ)2×RN×(Ru×τmaxτ)×Ru(3)

其中,τ 和 τmax分别为当前迭代次数和最大迭代次数,Ru为均匀分布的随机向量。
更新水流位置

FDA算法中水流流向海拔最低的方向,若最优邻居N(k)的适应度fN(k)小于当前水流的适应度fF(i),则当前水流流向该邻居,此时新的水流位置为:
F n e w ( i ) = F ( i ) + v F ( i ) − N ( k ) ∥ F ( i ) − N ( k ) ∥ (4) \boldsymbol{F}_{\mathrm{new}}(i)=\boldsymbol{F}(i)+v\frac{\boldsymbol{F}(i)-\boldsymbol{N}(k)}{\left\Vert\boldsymbol{F}(i)-\boldsymbol{N}(k)\right\Vert}\tag{4} Fnew(i)=F(i)+v∥F(i)−N(k)∥F(i)−N(k)(4)

其中,k为最优邻居的序号;v为水流速度,与坡度直接相关:
v = R N × S 0 ( i , k , D ) (5) v=R_\text{N}\times S_0(i,k,D)\tag{5} v=RN×S0(i,k,D)(5)

其中,S0(i,k,D)为最优邻居N(k)和水流F(i)位置之间的斜率为:
S 0 ( i , k , D ) = f F ( i ) − f N ( k ) ∥ F ( i , d ) − N ( k , d ) ∥ (6) S_0(i,k,D)=\frac{f_{\boldsymbol{F}(i)}-f_{\boldsymbol{N}(k)}}{\left\|F(i,d)-N(k,d)\right\|}\tag{6} S0(i,k,D)=∥F(i,d)−N(k,d)∥fF(i)−fN(k)(6)

如果随机水流的适应度优于当前水流的适应度,那么当前水流将沿着随机水流的方向流动。
F n e w ( i ) = F ( i ) + R N × [ F ( r ) − F ( i ) ] (7) \boldsymbol{F}{\mathrm{new}}(i)=\boldsymbol{F}(i)+R{\mathrm{N}}\times\left[\boldsymbol{F}(r)-\boldsymbol{F}(i)\right]\tag{7} Fnew(i)=F(i)+RN×[F(r)−F(i)](7)

如果当前水流的适应度优于其最优邻居的适应度,根据适应度值来决定当前水流是沿着该随机水流的方向移动,还是沿着最优水流的方向移动。
F n e w ( i ) = F ( i ) + 2 R N × [ X b e s t − F ( i ) ] (8) \boldsymbol{F}\mathrm{new}(i)=\boldsymbol{F}(i)+2R\mathrm{N}\times\left[\boldsymbol{X}_\mathrm{best}-\boldsymbol{F}(i)\right]\tag{8} Fnew(i)=F(i)+2RN×[Xbest−F(i)](8)

流程图

3.结果展示

4.参考文献

1\] Karami H, Anaraki M V, Farzin S, et al. Flow direction algorithm (FDA): a novel optimization approach for solving optimization problems\[J\]. Computers \& Industrial Engineering, 2021, 156: 107224.

相关推荐
guygg883 分钟前
基于全变差的压缩感知视频图像重构算法
算法·重构·音视频
VT LI14 分钟前
SDF在实时图形渲染中的核心原理与架构创新
算法·sdf·有号距离场
想七想八不如1140815 分钟前
408操作系统 PV专题
开发语言·算法
天一生水water16 分钟前
储层认知→技术落地→产量优化
人工智能·算法·机器学习
明洞日记19 分钟前
【VTK手册019】 深入理解 vtkProperty:从几何表达到 PBR 物理渲染
c++·图像处理·算法·vtk·图形渲染
Genevieve_xiao30 分钟前
【数据结构与算法】【xjtuse】面向考纲学习(下)
java·数据结构·学习·算法
修炼地32 分钟前
代码随想录算法训练营第二十七天 | 56. 合并区间、738.单调递增的数字、968.监控二叉树
c++·算法
仰泳的熊猫34 分钟前
1031 Hello World for U
数据结构·c++·算法·pat考试
高山上有一只小老虎41 分钟前
小红的正整数计数
java·算法
AnAnCode41 分钟前
【时间轮算法-实战】Java基于Netty的 `HashedWheelTimer`快速搭建时间轮算法系统
java·开发语言·算法·时间轮算法