【智能算法】流向算法(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.

相关推荐
I_LPL3 分钟前
day21 代码随想录算法训练营 二叉树专题8
算法·二叉树·递归
可编程芯片开发10 分钟前
基于PSO粒子群优化PI控制器的无刷直流电机最优控制系统simulink建模与仿真
人工智能·算法·simulink·pso·pi控制器·pso-pi
cpp_250111 分钟前
P8448 [LSOT-1] 暴龙的土豆
数据结构·c++·算法·题解·洛谷
lcj251111 分钟前
深入理解指针(4):qsort 函数 & 通过冒泡排序实现
c语言·数据结构·算法
fie888913 分钟前
基于MATLAB的转子动力学建模与仿真实现(含碰摩、不平衡激励)
开发语言·算法·matlab
唐梓航-求职中20 分钟前
编程大师-技术-算法-leetcode-1472. 设计浏览器历史记录
算法·leetcode
_OP_CHEN23 分钟前
【算法基础篇】(五十八)线性代数之高斯消元法从原理到实战:手撕模板 + 洛谷真题全解
线性代数·算法·蓝桥杯·c/c++·线性方程组·acm/icpc·高斯消元法
唐梓航-求职中31 分钟前
编程大师-技术-算法-leetcode-355. 设计推特
算法·leetcode·面试
少许极端38 分钟前
算法奇妙屋(二十八)-递归、回溯与剪枝的综合问题 1
java·算法·深度优先·剪枝·回溯·递归
仰泳的熊猫39 分钟前
题目1453:蓝桥杯历届试题-翻硬币
数据结构·c++·算法·蓝桥杯