智能优化算法:水循环算法-附代码

文章目录

  • 智能优化算法:水循环算法-附代码
    • 1.算法原理
    • 2.算法结果
    • 3.参考文献
    • 4.Matlab代码

摘要:水 循 环 算 法 (water cycle alogrithm,WCA)是由Hadi Eskandar 等人受大自然水循环过程中溪流、江河、湖泊流向海洋的过程启发而提出的一种全局优化算法.目前WCA已在工程优化等领域得到应用.

1.算法原理

WCA 是一种生物启发的优化算法,它模拟自然界中的水循环过程,在种群中设定 3 类个体:海洋 Sea、河流River 及溪流 Stream. 海洋为当前种群的最优个体,河流为一定数量的仅次于海洋的个体,剩余较差的个体即为溪流.

算法开始之前需要生成大小为Npop∗DN_{pop}*DNpop​∗D 的初始总群体,其中NpopN_{pop}Npop​是种群的总数量,DDD是设计变量的个数,因此这个随机矩阵为 :
[SeaRiver1River2....StreamNsr+1StreamNsr+2...StreamNpop]=[x11x21...xD1x12x22...xD2............x1Npopx2Npop...xDNpop](1)\left[\begin{matrix} Sea\\ River_1\\ River_2\\ ....\\ Stream_{N_{sr}+1}\\ Stream_{N_{sr}+2}\\ ... Stream_{N_{pop}} \end{matrix}\right]=\left[\begin{matrix} x_1^1&x_2^1&...&x_D^1\\ x_1^2&x_2^2&...&x_D^2\\ ...&...&...&...&\\ x_1^{N_{pop}}&x_2^{N_{pop}}&...&x_D^{N_{pop}}\\ \end{matrix}\right] \tag{1} ⎣⎢⎢⎢⎢⎢⎢⎢⎢⎡​SeaRiver1​River2​....StreamNsr​+1​StreamNsr​+2​...StreamNpop​​​⎦⎥⎥⎥⎥⎥⎥⎥⎥⎤​=⎣⎢⎢⎡​x11​x12​...x1Npop​​​x21​x22​...x2Npop​​​............​xD1​xD2​...xDNpop​​​​⎦⎥⎥⎤​(1)
其中,NsrN_{sr}Nsr​ 是海洋 SeaSeaSea (数量为 1) 及河流 RiverRiverRiver 的数量之
和,这是在初始化的时候自行定义的,其余流入海洋和河流的溪流 StreamStreamStream 的数量为NstreamN_{stream}Nstream​,其表达式为:
Nstream=Npop−Nsr(2)N_{stream}=N_{pop}-N_{sr}\tag{2} Nstream​=Npop​−Nsr​(2)
紧接着,根据式(3)计算当前种群中流向海洋的溪流数量及流向对应河流的溪流数量:
Nsrn=round(∣Ctn∑s=1NCts∣Nstreams),n=1,2,...,Nsr(3)N_{sr_n}=round(|\frac{Ct_n}{\sum_{s=1}^NCt_s}|N_{streams}),n=1,2,...,N_{sr}\tag{3} Nsrn​​=round(∣∑s=1N​Cts​Ctn​​∣Nstreams​),n=1,2,...,Nsr​(3)
完成上述过程后,即可进行汇流过程,汇流过程如图 1所示. 汇流过程中,溪流、河流和海洋的位置根据式(4)随机更新:

图1汇流过程

Nstreamt+1=Xstreamt+rand∗C∗(Xrivert−Xstreamt)Nstreamt+1=Xstreamt+rand∗C∗(Xseat−Xstreamt)Nrivert+1=Xrivert+rand∗C∗(Xseat−Xrivert)(4)N_{stream}^{t+1}=X_{stream}^t + rand*C*(X_{river}^t - X_{stream}^t)\\ N_{stream}^{t+1}=X_{stream}^t + rand*C*(X_{sea}^t - X_{stream}^t)\\ N_{river}^{t+1}=X_{river}^t + rand*C*(X_{sea}^t - X_{river}^t) \tag{4} Nstreamt+1​=Xstreamt​+rand∗C∗(Xrivert​−Xstreamt​)Nstreamt+1​=Xstreamt​+rand∗C∗(Xseat​−Xstreamt​)Nrivert+1​=Xrivert​+rand∗C∗(Xseat​−Xrivert​)(4)

其中,ttt 是迭代数;1≤C≤21\leq C\leq21≤C≤2 ,CCC 的最优值可以选为 2;randrandrand是 0 和 1 之间均匀分布的随机数;XstreamtX_{stream}^tXstreamt​及Xstreamt+1X_{stream}^{t+1}Xstreamt+1​分别表示第 ttt 次及第t+1t+1t+1 次迭代时溪流的位置;XrivertX_{river}^tXrivert​及Xrivert+1X_{river}^{t+1}Xrivert+1​ 分别表示第 ttt 次及第 t+1t+1t+1 次迭代时河流的位置;XseatX_{sea}^tXseat​及Xseat+1X_{sea}^{t+1}Xseat+1​ 分别表示第 ttt 次及第 t+1t+1t+1 次迭代时海洋的位置. 式(4)中分别为流向河流的溪流、流向海洋的溪流及流向海洋的河流的位置更新公式. 溪流在每次更新过后,计算出相应的适应度值,若该值优于与其相连的河流的适应度值,则将该溪流的位置与该河流的位置进行交换. 河流与海洋、溪流与海洋之间也有类似的交换. 在没有满足设定要求之前,海洋、河流和溪流的位置将根据相应的公式不断地更新.

所有的寻优算法都要考虑收敛过快而陷入局部最优的问题,水循环算法引入蒸发过程来避免该问题的发生. 在水循环过程中,那些流速过慢还有无法达到大海的溪流和河流最终都会蒸发,蒸发过程的出现会引来新的降水. 因此,必须检查河流及溪流是否足够靠近海洋,若距离较远则进行蒸发过程,蒸发过程的判断条件为
∣Xseat−Xrivert∣<dmax,t=1,2,...,Nsr−1(5)|X_{sea}^t - X_{river}^t|<d_{max},t=1,2,...,N_{sr}-1 \tag{5} ∣Xseat​−Xrivert​∣<dmax​,t=1,2,...,Nsr​−1(5)
其中,dmaxd_{max}dmax​是接近零的小数. 蒸发过程结束后,应用降雨过程并在不同的位置形成新的溪流或河流(类似遗传算法的突变过程). 较大的可dmaxd_{max}dmax​以防止额外搜索,但是会降低在海洋附近区域的搜索强度. 因此,dmaxd_{max}dmax​的值应该自适应地降低:
dmaxt+1=dmaxt−dmaxttmax(6)d_{max}^{t+1}=d_{max}^t - \frac{d_{max}^t}{t_{max}}\tag{6} dmaxt+1​=dmaxt​−tmax​dmaxt​​(6)
其中,tmaxt_{max}tmax​ 为最大迭代数.
循环过程中的蒸发作用对河流和海洋的影响很小,所以在进行降雨过程之后影响的是溪流的位置. 降雨过程后溪流的新位置为 :
Xstreamnew=LB+rand∗(UB−LB)(7)X_{stream}^{new}=LB+rand*(UB-LB)\tag{7} Xstreamnew​=LB+rand∗(UB−LB)(7)
其中,L B (lower bound)和 U B (upper bound)分别表示设计变量的下界和上界.

算法步骤:

(1) 初始化算法参数.
(2) 随机生成初始种群,形成初始溪流(雨滴)、河流和海洋.
(3)计算每个雨滴的适应度函数值.

(4) 利用式(3)确定雨滴流向河流和海洋的强度;利用式(4)更新溪流位置;更新河流位置.

(5) 若溪流给出的适应度值比其相连的河流好,则河流和溪流的位置对换;若河流给出的适应度值比其相连的海洋好,则海洋和河流的位置对换。

(6) 判断 是 否满 足 蒸 发 条件.若 满 足 蒸 发 条件,利用式(7)进入降水过程,形成新的降水。

(7) 利用式(6)减小dmaxd_{max}dmax​值;判断算法是否满足终止条件,若满足,则转到 (8);否则,重复执行(3) - (6)

(8) 输出最优解。

2.算法结果

3.参考文献

[1] Eskandar H, Sadollah A, Bahreininejad A, et al. Water cycle algorithm - A novel metaheuristic optimization method for solving constrained engineering optimization problems[J]. Computers & Structures, 2012, 110: 151-166.

[2] 金爱娟,苏俊豪,李少龙.基于水循环算法的开关磁阻电机性能优化[J/OL].信息与控制:1-12[2020-09-12].https://doi.org/10.13976/j.cnki.xk.2020.2048.

4.Matlab代码

个人资料介绍

智能优化算法:水循环算法-附代码相关推荐

  1. 遗传算法_粒子群算法优化支持向量机分类预测-附代码

    遗传算法/粒子群算法优化支持向量机分类预测-附代码 文章目录 遗传算法/粒子群算法优化支持向量机分类预测-附代码 1. 支持向量机简介与参数优化的原理 1.1 支持向量机SVM简介 1.2 优化参数的 ...

  2. 基于灰狼算法优化的lssvm回归预测-附代码

    基于灰狼算法优化的lssvm回归预测 - 附代码 文章目录 基于灰狼算法优化的lssvm回归预测 - 附代码 1.数据集 2.lssvm模型 3.基于灰狼算法优化的LSSVM 4.测试结果 5.Mat ...

  3. 基于麻雀搜索算法优化的支持向量机回归预测-附代码

    基于麻雀搜索算法优化的支持向量机预测及其MATLAB代码实现 文章目录 基于麻雀搜索算法优化的支持向量机预测及其MATLAB代码实现 1. 基于麻雀搜索算法优化的支持向量机预测简介 1.1 支持向量机 ...

  4. 基于强化学习的智能机器人路径规划算法研究(附代码)

    目录 一.摘要 二.路径规划技术的研究进展 1.研究现状 2.算法分类 2.1 全局路径规划算法 2.2 局部路径规划算法 三.本文采用的路径规划算法--强化学习 1. 概念 2. 与其他机器学习方式 ...

  5. python排序算法——归并排序(附代码)

    python排序算法 --归并排序 文章目录 python排序算法 --归并排序 一.前言 二.算法描述 三.代码实现 总结 一.前言 相关知识来自<python算法设计与分析>.初级排序 ...

  6. python排序算法 ——冒泡排序(附代码)

    python排序算法 --冒泡排序 文章目录 python排序算法 --冒泡排序 一.前言 二.算法描述 三.代码实现 总结 一.前言 相关知识来自<python算法设计与分析>.初级排序 ...

  7. python有效边界_Markowitz有效边界和投资组合优化基于Python(附代码)

    原标题:Markowitz有效边界和投资组合优化基于Python(附代码) 本期作者:Bernard Brenyah 本期翻译:Barry 未经授权,严禁转载 哈里马科维茨对金融和经济学的世界的贡献是 ...

  8. 智能优化算法——粒子群算法原理(附代码)

    目录 基本概念 算法实现 粒子群算法的构成要素分析 C++程序测试Sphere函数 总结 visual studio2017c++源代码 源文件下载地址 基本概念 粒子群优化算法(particle s ...

  9. 群智能优化之果蝇算法

    是的,今天要说的就是果蝇算法,"果蝇"就是你理解的那个果蝇,这是在2011年由Wen-Tsao Pan提出的有一种新型的群体智能优化算法. 1,引言: 演化式计算是一种共享名词,系 ...

  10. 独家 | 决策树VS随机森林——应该使用哪种算法?(附代码链接)

    作者:Abhishek Sharma 翻译:陈超 校对:丁楠雅 本文长度为4600字,建议阅读20分钟 本文以银行贷款数据为案例,对是否批准顾客贷款申请的决策过程进行了算法构建,并对比了决策树与随机森 ...

最新文章

  1. OpenCV 仿射变换
  2. Gearman 异步处理委派任务
  3. 模板类的析构函数如何写_顶尖文案如何写?这6大模板、29个方法,奥美大咖都在用!|优惠最后1天...
  4. 用python计算ln函数_python-含参函数
  5. 邢台职业技术学院计算机专业分数线,邢台职业技术学院录取分数线2021是多少分(附历年录取分数线)...
  6. linux的cache过高的原因定位与解决echo 3 > /proc/sys/vm/drop_caches
  7. linux环境systwm.img解包,[教程] system.img解包打包的方法,方便菜鸟们制作直刷ROM...
  8. springmvc工作流程_springMVC工作原理及流程详细讲解
  9. 全链路压测原理篇(方案 概念 架构 实现)
  10. 使用PS蒙版功能去水印以及Word中的图片合并功能合并公司Logo图片
  11. 神舟K650D-G4D2安装ubuntu18.04出现的[Firmware Bug]
  12. 毕业生写论文必备!! 设置奇数偶数页眉不同,奇数页是对应本章章节名,偶数页为论文名
  13. 疫情已经结束,快递行业现状如何
  14. layui外部引入_layui use 定义js外部引用函数的方法
  15. android通用ui库设计规范,难查的ANDROID APPUI设计规范总览
  16. “马红名师+”习作专题送教送培第二站活动安排
  17. 各种交通工具旅游路线查询程序(C++)
  18. SSL/TLS深度解析--OpenSSL的基本使用
  19. ArcEngine简单教程——要素的属性查询、空间查询
  20. 移动开发UI设计尺寸规范

热门文章

  1. -bash: vi: command not found -bash: ls: command not found
  2. springmvc配置servlet
  3. 腐蚀单机服务器怎么不稳定,腐蚀有什么指令?基本指令及服务器指令汇总
  4. python用户输出怎么命名变量_python变量及用户交互,用户名格式化输出
  5. python实验总结心得体会_如何更有效地“肝”论文?这里有份最全工具总结
  6. 可变车道怎么走不违章_可变车道怕走错扣分罚款,学学老司机的办法,新手司机学会不吃亏...
  7. 论文笔记_SLAM_An Overview of SLAM_SPIE
  8. opencv图像分析与处理(4)- 频率域滤波的基础概念
  9. 机器学习笔记——感知机理解(自行取用,并不一定适合每个人)
  10. Mac Os的java开发环境以及MySql环境配置