【智能算法】雪消融优化算法(SAO)原理及实现

news2025/5/15 23:09:11

目录

    • 1.背景
    • 2.算法原理
      • 2.1算法思想
      • 2.2算法过程
    • 3.结果展示
    • 4.参考文献
    • 5.代码获取


1.背景

2023年,L Deng受到雪升华和融化行为启发,提出了雪消融优化算法(Snow Ablation Optimizer, SAO)。

在这里插入图片描述
在这里插入图片描述

2.算法原理

2.1算法思想

SAO模拟了雪的升华和融化行为,在融化过程中,雪转化为液态水,而雪可以通过升华直接转化为蒸汽。同时,融雪转化的液态水也可以通过蒸发转化为蒸汽。

在这里插入图片描述

2.2算法过程

探索阶段

当雪或由雪转化而来的液态水转化为蒸汽时,由于运动的不规则性,搜索个体呈现出高度分散的特征。因此,这一阶段利用布朗运动来模拟这种情况:
f B M ( x ; 0 , 1 ) = 1 2 π × exp ⁡ ( − x 2 2 ) (1) f_{BM}(x;0,1)=\frac1{\sqrt{2\pi}}\times\exp(-\frac{x^2}2)\tag{1} fBM(x;0,1)=2π 1×exp(2x2)(1)

在这里插入图片描述

布朗运动的一维分布以及在二维和三维搜索空间中的轨迹如图,布朗运动利用动态和均匀的步长,可以探索搜索空间中的一些潜在区域。因此,它可以很好地反映蒸汽在搜索空间中扩散的情况:
Z i ( t + 1 ) = E l i t e ( t ) + B M i ( t ) ⊗ ( θ 1 × ( G ( t ) − Z i ( t ) ) + ( 1 − θ 1 ) × ( Z ˉ ( t ) − Z i ( t ) ) ) (2) Z_i(t+1)=Elite(t)+BM_i(t)\otimes(\theta_1\times(G(t)-Z_i(t))+(1-\theta_1)\times(\bar{Z}(t)-Z_i(t)))\tag{2} Zi(t+1)=Elite(t)+BMi(t)(θ1×(G(t)Zi(t))+(1θ1)×(Zˉ(t)Zi(t)))(2)
其中,G(t)当前最优解,Elite(t)代表群体中若干精英群体中随机选出的个体:
E l i t e ( t ) ∈ [ G ( t ) , Z s e c o n d ( t ) , Z t h i r d ( t ) , Z c ( t ) ] (3) Elite(t)\in[G(t),Z_{second}(t),Z_{third}(t),Z_c(t)]\tag{3} Elite(t)[G(t),Zsecond(t),Zthird(t),Zc(t)](3)
群体质心表述为:
Z ˉ ( t ) = 1 N ∑ i = 1 N Z i ( t ) (4) \bar{Z}(t)=\frac{1}{N}\sum_{i=1}^NZ_i(t)\tag{4} Zˉ(t)=N1i=1NZi(t)(4)
其中Zsecond(𝑡)和Zthird(𝑡)分别表示当前种群中的第二优个体和第三优个体。𝑍𝑐(𝑡)表示适合度值排在前50%的个体的质心位置:
Z c ( t ) = 1 N 1 ∑ i = 1 N 1 Z i ( t ) (5) Z_{c}(t)=\frac{1}{N_{1}}\sum_{i=1}^{N_{1}}Z_{i}(t)\tag{5} Zc(t)=N11i=1N1Zi(t)(5)
式中𝑁1表示leader的数量,即𝑁1等于整个群体的一半大小。

在这里插入图片描述

开发阶段

当雪通过融化行为转化为液态水时,搜索个体被鼓励围绕当前最佳解决方案开发高质量的解决方案,而不是在解决方案空间中扩展高度分散的特征。作为最经典的融雪模型之一,利用度日法来反映融雪过程:
M = D D F × ( T − T 1 ) (6) M=DDF\times(T-T_{1})\tag{6} M=DDF×(TT1)(6)
其中,M为融雪速率,是模拟开发阶段融雪行为的关键参数。𝑇表示日平均温度。𝑇1为基温,基温通常设为0:
M = D D F × T (7) M=DDF\times T\tag{7} M=DDF×T(7)
DD表述为:
D D F = 0.35 + 0.25 × e t t max ⁡ − 1 e − 1 (8) DDF=0.35+0.25\times\frac{e^{\frac t{t_{\max}}}-1}{e-1}\tag{8} DDF=0.35+0.25×e1etmaxt1(8)

在这里插入图片描述

融雪速率:
M = ( 0.35 + 0.25 × e t t max ⁡ − 1 e − 1 ) × T ( t ) , T ( t ) = e − t t max ⁡ (9) M=(0.35+0.25\times\frac{e^{\frac t{t_{\max}}}-1}{e-1})\times T(t),T(t)=e^{\frac{-t}{t_{\max}}}\tag{9} M=(0.35+0.25×e1etmaxt1)×T(t),T(t)=etmaxt(9)
在SAO开发阶段,位置更新:
Z i ( t + 1 ) = M × G ( t ) + B M i ( t ) ⊗ ( θ 2 × ( G ( t ) − Z i ( t ) ) + ( 1 − θ 2 ) × ( Z ˉ ( t ) − Z i ( t ) ) ) (10) Z_i(t+1)=M\times G(t)+BM_i(t)\otimes(\theta_2\times(G(t)-Z_i(t))+(1-\theta_2)\times(\bar{Z}(t)-Z_i(t)))\tag{10} Zi(t+1)=M×G(t)+BMi(t)(θ2×(G(t)Zi(t))+(1θ2)×(Zˉ(t)Zi(t)))(10)

Dual-population机制

在元启发式算法中,实现探索与开发之间的平衡极其关键。这种平衡有助于算法不仅能发现潜在的好解决方案,而且能有效地利用这些解决方案来找到更优的结果。通过将种群分为两个子种群,一种专注于探索(寻找新的可能解),另一种专注于开发(优化已知解),这种双重人口机制有效地模拟了自然选择中的变异与遗传两大关键因素。

在这里插入图片描述
SAO算法的完整位置更新:
Z i ( t + 1 ) = { E l i t e ( t ) + B M i ( t ) ⊗ ( θ 1 × ( G ( t ) − Z i ( t ) ) + ( 1 − θ 1 ) × ( Z ˉ ( t ) − Z i ( t ) ) ) , i ∈ i n d e x a M × G ( t ) + B M i ( t ) ⊗ ( θ 2 × ( G ( t ) − Z i ( t ) ) + ( 1 − θ 2 ) × ( Z ˉ ( t ) − Z i ( t ) ) ) , i ∈ i n d e x b (11) \left.Z_{i}(t+1)=\left\{\begin{array}{c}Elite(t)+BM_i(t)\otimes(\theta_1\times(G(t)-Z_i(t))\\+(1-\theta_1)\times(\bar{Z}(t)-Z_i(t))),i\in index_a\\M\times G(t)+BM_i(t)\otimes(\theta_2\times(G(t)-Z_i(t))\\+(1-\theta_2)\times(\bar{Z}(t)-Z_i(t))),i\in index_b\end{array}\right.\right.\tag{11} Zi(t+1)= Elite(t)+BMi(t)(θ1×(G(t)Zi(t))+(1θ1)×(Zˉ(t)Zi(t))),iindexaM×G(t)+BMi(t)(θ2×(G(t)Zi(t))+(1θ2)×(Zˉ(t)Zi(t))),iindexb(11)

伪代码

在这里插入图片描述

3.结果展示

使用测试框架,测试SAO性能 一键run.m

  • 【智能算法】省时方便,智能算法统计指标——一键运行~

CEC2017-F20

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.参考文献

[1] Deng L, Liu S. Snow ablation optimizer: A novel metaheuristic technique for numerical optimization and engineering design[J]. Expert Systems with Applications, 2023, 225: 120069.

5.代码获取

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1654224.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微信云小程序快速上手云数据库+云函数+云存储的操作

🚀 作者 :“二当家-小D” 🚀 博主简介:⭐前荔枝FM架构师、阿里资深工程师||曾任职于阿里巴巴担任多个项目负责人,8年开发架构经验,精通java,擅长分布式高并发架构,自动化压力测试,微服务容器化k…

JSP技术讲解

目录 1、JSP简介 2、JSP体验 3、JSP运行原理 4、JSP基本语法 5、JSP指令 6、JSP内置九大对象 7、JSP标签 8、JSP配置 9、JSP排错 10、总结 在前面的Servlet学习中发现Servlet本质是一个java程序,因此Servlet更加擅长编写程序的业务逻辑,而如果要…

Java特性之设计模式【代理模式】

一、代理模式 概述 在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式 在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口 主要解决: 在直接访问…

Apple强大功能:在新款 iPad Pro 和 iPad Air 中释放 M4 芯片潜力

Apple 的最新强大功能:在新款 iPad Pro 和 iPad Air 中释放 M4 芯片的潜力 概述 Apple 推出配备强大 M4 芯片的最新 iPad Pro 和 iPad Air 型号,再次突破创新界限。新一代 iPad 有望彻底改变我们的工作、创造和娱乐方式。凭借无与伦比的处理能力、令人惊…

CTF-reverse,逆向分析,对“左移4或右移4,即(x<<4) | (x >>4)的加密探讨

博主在刷题过程中遇上这样一个有意思的加密(如下图),苦苦思索其逆向运算,被硬控了很久,也没搜到什么资料来解释这个问题(也许是太简单??蒟蒻博主怀疑人生……) 经过博主不…

【MATLAB源码-第205期】基于matlab的LDPC译码算法仿真,对比BF算法,最小和算法,对数BP和概率BP四种算法。

操作环境: MATLAB 2022a 1、算法描述 LDPC 码简介 LDPC码是一种通过稀疏奇偶校验矩阵定义的线性分组码,1962年由Gallager首次提出。这种码具有高效的解码性能,尤其在接近香农极限的情况下,其性能表现尤为突出。LDPC码的核心特…

Logstash分析MySQL慢查询日志实践

删除匹配到的行,当前行信息不记录到message中

VMware Workstation 虚拟机学习 安装centos7.9

1打开VMware Workstation--文件--新建虚拟机 #选择对应的,本例选择最新的 2开始安装centos #网卡配置 vi /etc/sysconfig/network-scripts/ifcfg-ens33 TYPEEthernet PROXY_METHODnone BROWSER_ONLYno BOOTPROTOstatic DEFROUTEyes IPV4_FAILURE_FATALno IPV6INITy…

Linux:进程通信(二)信号的保存

目录 一、信号的处理是否是立即处理的? 二、信号如何保存 1、阻塞、未决、递达 2、信号集 3、信号集操作函数 4、sigprocmask函数 5、sigpending 函数 上篇文章我们讲解了信号的产生:Linux:进程信号(一)信号的产…

【C语言】字符函数和字符串函数--超详解

前言: 在编程的过程中,我们经常要处理字符和字符串,为了⽅便操作字符和字符串,C语⾔标准库中提供了 ⼀系列库函数,接下来我们就学习⼀下这些函数。 1. 字符分类函数 C语⾔中有⼀系列的函数是专⻔做字符分类的&#…

实战BACnet/IP标准通信网关在楼宇自动化中的应用

智慧楼宇建设实现不同设备间的互联互通是一项巨大挑战,尤其是在那些历史悠久的建筑中,新旧系统并存的情况尤为普遍。某大型商业综合体就面临着这样的困境:老旧的暖通空调系统采用Modbus RTU协议,而新部署的能源管理系统却要求BACn…

一文搞懂MySQL索引的数据结构

一、引言 在数据库管理系统中,索引是提高查询性能的关键所在。对于MySQL这类关系型数据库来说,索引更是其优化查询不可或缺的一部分。索引能够大大加快数据的检索速度,减少数据库的I/O操作,提高数据库的整体性能。本文将从索引的…

第2章.STM32开发C语言常用知识点

目录 0. 《STM32单片机自学教程》专栏总纲 2.1. STM32嵌入式开发C语言编程的不同 2.2. C语言常用知识点 2.2.1 位操作 2.2.2 define 宏定义 2.2.3 条件编译 2.2.3.1 #ifdef 2.2.3.2 #ifndef 2.2.3.3 #if !defined 2.2.4 extern 变量声明 2.2.5 typedef 类型别名 …

PPP点对点协议

概述 Point-to-Point Protocol,点到点协议,工作于数据链路层,在链路层上传输网络层协议前验证链路的对端,主要用于在全双工的同异步链路上进行点到点的数据传输。 PPP主要是用来通过拨号或专线方式在两个网络节点之间建立连接、…

Mysql:Before start of result set

解决方法:使用resultSet.getString()之前一定要调用resultSet.next() ResultSet resultSet statement1.executeQuery();while (resultSet.next()){String username1 resultSet.getString("username");int id1 resultSet.getInt…

识货小程序逆向

声明 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!wx a15018601872,x30184483x…

java io模型

目录 BIO 模型模型一:单线程服务器模型二:多线程服务器 NIO 模型模型一:遍历轮训 select/poll模型二:基于事件响应机制的 epoll BIO BIO 模型 模型一:单线程服务器 执行过程:阻塞等待 connection&#xff…

JS-拖拽元素放大缩小

效果左右布局&#xff0c;拖拽后&#xff0c;宽度放大缩小 其实自己写也可以&#xff0c;不过还是发现了两个好用的js库&#xff0c;既然不需要自己写&#xff0c;当然是能偷懒就偷懒 1、resizerjs 官网地址&#xff1a;https://github.com/eknowles/resizerjs <!doctype …

SPSS多元线性回归

&#xff08;要满足&#xff09;模型的假设条件需要对数据进行怎样处理&#xff1f;&#xff1f; 为了使数据满足多元线性回归的条件&#xff0c;通常需要进行以下预处理步骤&#xff1a; 1. 数据清洗&#xff1a;处理缺失值、异常值和重复值&#xff0c;确保数据质量。 2. 特…

Linux基础之git与调试工具gdb

目录 一、git的简单介绍和使用方法 1.1 git的介绍 1.2 git的使用方法 1.2.1 三板斧之git add 1.2.2 三板斧之git commit 1.2.3 三板斧之git push 二、gdb的介绍和一些基本使用方法 2.1 背景介绍 2.2 基本的使用方法 一、git的简单介绍和使用方法 1.1 git的介绍 Git是一…