当前位置: 首页 > article >正文

模拟退火算法

模拟退火算法(SA) 是一种导向性随机搜索的启发式算法,它是受加热金属的 退火规律所启发而提出的一种求解组合优化问题的逼近算法。这个规律就是,在某 个温度下,金属分子停留在能量小的状态的概率比停留在能量大的状态的概率要大。

1 受热金属物体分子状态分

在温度度t下,金属物体的分子呈现出不同的状态,停留在状态r满足Boltzmann 概率分布

 其中 ,E(r)表示分子在状态r 的能量,k>0为Boltzmann 常数, 而\bar{E}表示分子能量的一个随机变量。设分子状态空间U是有限的,那么Z(t)应为

根据Boltzmann概率分布,分子有如下运动规律:

  1. 温度t很高时,金属物体的分子停留在任何状态的概率近似相等;
  2. 在同一温度t下,金属物体的分子停留在能量低的状态比在能量高的状态的概率大;
  3. 分子在能量最低状态的概率关于温度t下降;
  4. 分子停留在最低能量状态的概率随温度降低趋于1;
  5. 分子在非能量最低状态的概率随温度降低趋于0。

设金属分子的状态概率分布为

 其中状态取为r=2,3,4,5,6, 而

 可以由以下Boltzmann 函数曲线直观的看到上述分子运动规律。

2 基本模拟退火算法

基本步骤:

  1. 初始化可行解和温度; 
  2. 根据 Boltzmann 概率退火;
  3. 重复第2步直到稳定状态(内循环);
  4. 降温;
  5. 重复第2步至第4步直到满足终止条件或直到给定的步数(外循环);
  6. 输出最好的解作为最优解。

 3 模拟退火算法实现技术

3.1 初始化过程

初始可行解:s_{0},根据问题随机产生;

初始温度t_{0},理论上要求应保证平稳分布中产生任意可行解的概率相等,即exp(-\Delta f_{ij}/t_{0})\approx 1,其中\Delta f_{ij}=f(s_{i})-f(s_{i})。取t_{0}=K\Delta _{0}KK 为充分大的数,而

 3.2 退火

退火过程就是在一给定温度下,由一个状态变到另一个状态,每一个状态到达的次数服从一个概率分布,即基于Metropolis 接受准则的过程,该过程达到平稳时停止。在状态s_{i}时,产生的状态s_{j}被接受的概率为

3.3 降温

一种降温方式为t_{k+1}=d(t_{k}),其中d(t_{k})=\alpha t_{k}

另一种降温方法为t_{k}=\frac{M-k}{M}t_{0},其中M为温度下降的总次数。

3.4 内循环终止准则

  1. 固定步数:即在每一温度迭代相同的步数;
  2. 由接受和拒绝的比率控制迭代步数:
    给定一个迭代步数上限U和一个接受次数指标r,在温度t实施退火过程,当接受次数等于r时,不再迭代,否则一直迭代到步数上限U。
    或者给定一个接受指标R和迭代步数下限L,在温度t实施退火过 程,迭代到步数L时,开始计算接受次数与总次数的比率,一旦比率超过R,不再 迭代,否则一直迭代到步数上限U。
    同样可以用拒绝次数控制终止准则。

3.5外循环终止准则

  1. 设置终止温度的阈值(比较小的正数)\varepsilon > 0,当温度下降到t_{k}< \varepsilon时,算法停止。
  2. 设置循环总数。迭代次数达到指定数 目时,算法停止。
  3. 基于不改进规则。若连续若干步搜索到的最优解不再改进,算法停止。
  4. 设置接受概率。给定指标\chi > 0是一个比较小的数,在温度t,除局部最优解外,其他状态的接受概率均小于\chi,算法停止。

4 参考原文


http://www.kler.cn/a/429672.html

相关文章:

  • golang运维开发-gopsutil(2)
  • 怎么理解编码器与解码器?
  • 探索图像编辑的无限可能——Adobe Photoshop全解析
  • 【Elasticsearch复合查询】
  • RCE漏洞
  • Day05-后端Web基础——TomcatServletHTTP协议SpringBootWeb入门
  • 计算机网络练习题
  • Python教程104:生成26个英文字母有哪些方法?
  • LEED认证是什么?LEED认证银级和金级之间的区别在哪里
  • Agent AI: Surveying the Horizons of Multimodal Interaction---医疗保健、视频音频、多模态
  • python学习笔记—4—数据类型与数据类型转换
  • Linux上的C语言编程实践
  • JVM(Java虚拟机)类加载子系统是Java运行时环境的重要组成部分
  • 【opencv入门教程】14. 矩阵乘除运算
  • 企业防盗版:SPN安全上网解决方案,您的智能防护盾
  • 基于Hadoop大数据音乐推荐系统的设计与实现
  • 数据结构之初始二叉树(1)
  • Vue中key值的作用?
  • 获取缓存大小与清除 Web 缓存 - 鸿蒙 HarmonyOS Next
  • 《深入浅出HTTPS》读书笔记(17):公开密钥算法
  • 【C++算法】34.位运算_丢失的数字
  • 三维测量与建模笔记 - 6.1 双目立体视觉系统
  • 监控组态软件的构成与功能
  • Windows11设置windows暂停更新100年
  • 大文件分块上传后端服务器
  • C++实现一个经典计算器(逆波兰算法)附源码