物理背景

a为层流,b为湍流。

层流和湍流是流体流动的一种性质。流体流动时,如果流体质点的轨迹(一般说随初始空间坐标x、y、z随时间t而变)是有规则的光滑曲线(最简单的情形是直线),这种流动叫层流,没有这种性质的流动叫湍流。

算法实现

流程图

自然界中的层流和湍流给我们在优化设计中设计规则和不规则随机搜索算子提供了很好的启发。因此,可以从优化的角度对两种类型的水流进行建模。不失一般性,假设要解决的问题有要最小化的目标函数。从目标函数值大的解到目标函数值小的解,通过充分有效的迭代过程,可以找到最优解。由于自然界中水总是从高海拔的源头流向低海拔的汇,因此水流与解搜索之间存在相似性。更具体地说,如果将水粒子视为解决方案,则粒子的位置类似于解决方案的值水粒子的势能类似于目标或适应度。因此,要最小化的问题的目标函数值或要最大化的问题的倒数被定义为水粒子的势能。 WFO算法中直接将目标函数作为水粒子势能的评价函数

1)层流算子:在层流中,所有粒子均沿平行直线运动。由于水的粘度,粒子的速度可能不同,例如远离墙壁或障碍物的层中的粒子比靠近墙壁或障碍物的层中的粒子更快。这种规则运动可以通过以下等式建模:

其中t为迭代次数,i和m分别为所使用的水粒子的索引和数目,xi(t)为第i个粒子在t次迭代时的位置,yi(t)表示其可能移动的位置,随机数 s ∈ U([0, 1]) 表示水粒子的移动系数,而 ?d 向量表示所有粒子的共同运动方向共同方向随机选择两个不同粒子决定,如下所示:

其中 f (xh(t)) ≤ f (xk(t)) 表示第 j 个粒子的势能 f (xh(t)) 小于或等于第 k 个粒子的势能 f (xk(t))。特别地,如果粒子 h 固定在迄今为止找到的最佳解,则任何其他粒子都可以用作粒子 k。找到的最佳解决方案代表当前具有最低势能的位置。因此,在实施层流算子时,选择迄今为止找到的最佳解决方案作为引导粒子 h。

等式(1)和(2)在形式上类似于 DE [36] 中的简单变异算子。应该注意的是 (1) 中 s 的值随水粒子的不同而不同,但在同一迭代过程中每个水粒子的 ?d 值不变。因此,在搜索模式方面存在本质区别。WFO算法中的层流算子采用规则的并行单向搜索模式,而DE算法中的变异算子采用混沌多向搜索模式。在(1)中,s 的随机性确保不同的水粒子具有不相等的偏移,并且 ?d 的公共性保证并行单向搜索。

2) 湍流算子:

        在湍流中,水粒子以随机方式相互推挤并在相邻层上移动。由于水粒子的不规则运动,流线被打破。当快速的水流受到障碍物的干扰时,就会发生局部振荡。一旦振荡幅度足够大,剪切力就会作为扭矩推动水粒子旋转。结果,出现了涡流。如果将待求解问题的一个维度看成一层水流维度之间的数学变换可以模拟湍流中水粒子的不规则运动。自然地,湍流算子 yi 中水粒子的可能移动位置是通过在随机选择的维度上振荡产生的,即

其中 j1 ∈ {1, 2, . . . , n}是从n维中随机选取的分量,变异值v由下式确定:

其中 k ∈ {1, 2, . . . , m} 是随机选择的不同粒子的索引,k ?= i; j2 是随机选择的不同维度,j2 ?= j1,r 是 [0, 1] 范围内的随机数,pe ∈ (0, 1) 是称为涡流概率的控制参数。即,WFO 算法中的湍流算子以 pe 的概率实现有趣的涡流变换 ψ ,以 1 − pe 的概率实现一般的跨层移动变换 ϕ 。

由于涡流的形状类似于特殊的阿基米德螺线,因此湍流算子中的涡流函数由类似的方程构成

其中 θ 是 [−π, π] 范围内的随机数,ρ 由自适应规则动态确定

ρ 可以看作是第 k 个粒子对第 i 个粒子的剪切力。当然,由于 sin(θ ) = cos(θ − [π/2]),使用 (5) 中的基本正弦函数也是合理的。

为了模拟水粒子在层上的一般行为,采用了以下转换函数:

其中 lb 和 ub 分别代表下限和上限。线性变换可以将随机选择的粒子的比例继承到所选维度中的边界。

3) 进化规则:

水往低处流,更小的值替换现在的值。

在水力学中,如果雷诺数小于阈值,则水流为层流,否则为湍流。 WFO 算法随机模拟了两种类型的水流。更具体地说,层流以 pl 的概率模拟,湍流以 1 − pl 的概率模拟。层流概率 pl ∈ (0, 1) 作为关键控制参数,类似于雷诺数的阈值,因为pl 还确定执行哪种操作(层流或湍流)。

目标在迭代过程中不断优化。因此,水流从高地到低地的趋势在 WFO 算法中通过进化计算中的共同策略来表征。更具体地说,如果可能移​​动的位置具有较低的势能,则将其选为新位置;否则,水粒子保持在当前位置。即

算法流程

A.初始化

在初始化阶段,需要给算法参数赋值,包括使用的水粒子数m、层流概率pl和涡流概率pe。除了参数设置外,每个水粒子的位置和势能都在第一阶段被初始化。水粒子的初始位置在搜索空间内随机生成。使用目标函数直接计算每个粒子的势能。

B. 进化操作

WFO 算法通过层流或湍流算子生成试验解。

根据(1)-(8)这两个算子很容易实现。但是,在实现层流算子时需要注意以下几点。

1) s 的值对于不同的粒子是不同的,但对于同一水粒子位置的每个分量是相同的。

2) ?d 的值在不同的迭代中可能不同,但在同一迭代中对于每个水粒子都是相同的;为加快收敛速度​​,目前找到的最优解是引导粒子h的最优候选

C. 约束处理

层流或湍流算子产生的试验解的值可能超过搜索范围。

解决违反边界约束问题的方法很少[37],例如随机、吸收和反射。在这项研究中,保留方案用于处理边界约束违规。更具体地说,yj i(t) = xj i(t),如果 yj i(t) > ubj 或 yj i(t) < lbj。应该注意的是,(7)产生的试验解的值不超过任何界限。减少不必要的计算消耗;因此,在通过(1)和(5)生成试解后,执行检查边界约束的操作。

还有一些方法可以处理现实世界工程问题的约束[18]、[38],例如惩罚函数、解码器、特殊修复算子以及目标函数和约束的分离。如果在解决约束问题时采用修复算子,则应在更新阶段之前嵌入基于问题知识的特殊操作,以提高 WFO 算法的效率。

伪代码

个人理解

  1.  m个水微粒,每个微粒代表一个个体,每个个体含有n维变量。
  2. 给m个例子附上初值(m应该去多少合适?)
  3. 判断是否到达终止条件

随机数rand1(),rand()1<pl,微粒判为层流,层流微粒通过向最优微粒靠近(远离),完成算法的收敛:

层流微粒的迭代方式:

公式(1)表示所有层流微粒在原位置的基础上,加上随机数s*距离向量,随机数属于[0,1],距离等于最优微粒减去任意非最优微粒的距离向量,同一次迭代中所有层流使用同一个距离向量。

随机数rand1(),rand1()>pl,判为湍流,湍流通过抽取微粒的一个值(维度)进行变异

,丰富微粒(解)的多样性,湍流分为两种情况:

情况1,随机数rand2(),rand2()>pe

对湍流微粒,随机再选择一个微粒,对它们同一个维度(值)进行阿基米德螺线求解                                

情况2,随机数rand2(),rand2()<pe

对湍流微粒,随机再选择一个微粒,对它们的不同的维度(值)进行如下操作

为了模拟水粒子在层上的一般行为,采用了以下转换函数:

其中 lb 和 ub 分别代表下限和上限。线性变换可以将随机选择的粒子的比例继承到所选维度中的边界。

        4.循环迭代

        更新最佳微粒的位置与最佳适应度值

个人疑惑

这种方式迭代速度真的快吗?层流的搜索方式,目的性太弱,但丰富多样性

湍流,变异很少,而且不一定是有利变异(从局部最优的角度看)

参考文献:Water Flow Optimizer: A Nature-Inspired Evolutionary Algorithm for Global Optimization

matlab工具包与python代码:北京航空航天大学主页平台系统 罗开平--中文主页--Codes | 程序代码

Water Flow Optimizer 水流优化器相关推荐

  1. 【pytorch】optimizer(优化器)的使用详解

    目录 1 创建一个 Optimizer 一个简单的例子:求目标函数的最小值 Per-parameter 的优化器 2 Taking an optimization step 开始优化 optimize ...

  2. MySQL 5.7-8.9.3 Optimizer Hints(优化器提示)

    One means of control over optimizer strategies is to set the optimizer_switch system variable (see S ...

  3. mysql optimizer mrr_MySQL优化器功能开关optimizer_switch

    MySQL 8.0新增特性 use_invisible_indexes:是否使用不可见索引,MySQL 8.0新增可以创建invisible索引,这一开关控制优化器是否使用invisible索引,on ...

  4. How to choose optimizer ?训练时,如何选择优化器?

     站在巨人的肩膀上:肩膀左.肩膀右.+1.+2.+3.+4 当学习神经网络到一定程度时,不难发现优化器和损失函数是神经网络模型不可缺少的部分. 优化器Optimizer 目录 1 优化器Optimiz ...

  5. 优化器optimizer

    1.首先谈的第一个重要的 zero_grad() 梯度清零. 由于每次梯度计算完成后,网络中的优化器梯度不会自动清零,所以需要手动输入函数进行优化器梯度清零.例子: for i, data in en ...

  6. 优化器统计信息_高水位_柱状图等

    本文章为网络笔记,看了warehouse老师的视频受益匪浅,更是感觉自己技术太过初级,特写了本笔记,方便以后反复学习! 如有任何不妥,请发邮件至102448567@qq.com删除文章! 关于ware ...

  7. pytorch优化器与学习率设置详解

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者 | 小新 来源 | https://a.3durl.cn/Yr ...

  8. MaxCompute理解数据、运算和用户的大脑:基于代价的优化器

    摘要: 回顾大数据技术领域大事件,最早可追溯到06年Hadoop的正式启动,而环顾四下,围绕着数据库及数据处理引擎,业内充斥着各种各样的大数据技术.在云栖社区2017在线技术峰会大数据技术峰会上,阿里 ...

  9. PyTorch 学习笔记(七):PyTorch的十个优化器

    本文截取自<PyTorch 模型训练实用教程>,获取全文pdf请点击:https://github.com/tensor-yu/PyTorch_Tutorial 文章目录 1 torch. ...

最新文章

  1. CTFshow php特性 web107
  2. Google zerotouch方案介绍
  3. K均值算法matlab代码实现
  4. HTML与CSS基础之伪类选择器(三)
  5. java 并发 同步信号_Java并发教程–信号量
  6. 一文告诉你,如何在 Kubernetes 的容器引擎中运行 KVM 和 VMware VM!
  7. maven settings.xml国内仓库配置
  8. concat特征融合_MSFNet:多重空间融合网络进行实时语义分割(北航和旷视联合提出)...
  9. 条款三 : 操作符is或as优于强制转型
  10. 势高,则围广:TiDB 的架构演进哲学
  11. ffmpeg 从内存中读取数据(或将数据输出到内存)
  12. android 清空剪贴板,清空剪贴板app
  13. 服务器运维需要学什么,运维工程师要学什么?运维工程师是做什么的?
  14. Android App 授权机制简析
  15. 我要你觉得,我不要我觉得--根据企业现状实施DevOps
  16. 共享锁和排他锁的区别
  17. 自动化登录网易云音乐
  18. 百度智能小程序巡检调度方案演进之路
  19. SAP ABAP-获取屏幕字段数据
  20. 交通事故风险预测——《TA-STAN: A Deep Spatial-Temporal Attention Learning Framework...》

热门文章

  1. L1-057 PTA使我精神焕发 (5 分)C语言
  2. 什么灯适合学生在暑假使用?照度国AA级的舒适护眼灯
  3. RK3399 io操作GPIO
  4. 农村信息化服务亟待破解五大难题
  5. js数组交集、并集、差集
  6. VC++获取系统当前时间并显示
  7. 2018 ,请领取您Power BI 年终报告
  8. 简单实现一个苹果菜单
  9. oracle安装时创建应答文件,12c 应答方式安装 (二) 创建cdb+pdb+netca
  10. JDK源码分析--HashMap深入理解