一文搞懂什么是模拟退火算法SImulated Annealing【附应用举例】
本文参考了很多张军老师《计算智能》的第十章知识。
本文来源:https://blog.csdn.net/qq_44186838/article/details/109181453
模拟退火算法
1.1 算法思想
一听这个名字我想多数人头脑都会冒出“???”,这咋还得退火嘞,难不成还能上火的吗?
其实模拟退火(SImulated Annealing)算法的思想就是来源于物理的退火原理,也就是降温原理。先在一个高温状态下(相当于算法随机搜索),然后逐渐退火,在每个温度下(相当于算法的每一次状态转移)徐徐冷却(相当于算法局部搜索),最终达到物理基态(相当于算法找到最优解)。
不多说,上图:
1.2 基本流程
先附上模拟退火算法求解最优化问题的基本流程图和伪代码
先声明:上图给出的只是模拟退火算法的基本框架,针对具体问题时还需要具体的设计。
从图中我们不难发现发现,模拟退火其实有两层循环,分为内循环和外循环。
内循环模拟的是在给定温度下系统达到平衡的过程。在内循环中,每次都从当前解i的邻域(怎么构建邻域后面会讲)中随机找出一个新解j,然后按照Metropolis准则(后面会给公式)概率地接受新解。那啥时候达到热平衡呢?你可以定义为循环一定的代数,或者基于接受率定义平衡等。
外层循环是一个降温的过程,当内循环结束,即在一个温度下达到平衡后,开始外层的降温,然后再新的温度下重新开始内循环。
模拟退火算法在求解最优化问题的时候,会包含以下几个方面的基本要素。分别为:初始温度、邻域函数、接受概率、冷却控制、内层平衡、终止条件。具体意义以及设置方法如下图所示。
1.3 应用举例
问题:已知背包的装载量为c=8,现有n=5个物品,它们的重量和价值分别是(2, 3, 5, 1, 4)和(2, 5, 8, 3, 6)。试使用模拟退火算法求解该背包问题,写出关键的步骤。
在开始求解之前我们先分析一下问题。
分析:背包问题本身是一个组合优化问题,也是一个典型的NP难问题。如果使用枚举的方法,我们需要找到n个物品的所有子集,然后在那些满足约束条件的子集中比较物品的总价值,找到总价值最大的子集,也就是问题的最优解。但是我们知道,大小为n的集合的子集数目为 2 n 2^n 2n ,所以当背包问题的规模变大(n变大)的时候,要找出所有的子集是一个不现实的做法,因为计算复杂度的指数级增长已经使得问题在规模稍大的时候就无法在可以接受的时间内得到解决。因此背包问题需要采用一些计算复杂度较低的,但是能够提供令人满意的解的算法,而模拟退火算法是解决背包问题的重要手段。
大量的实验证明,模拟退火算法能够处理规模较大的背包问题,而且能够鲁棒地得到满意的解。
求解:假设问题的一个可行解用0和1的序列表示,例如i=(1010)表示选择第1和第3个物品,而不选择第2和第4个物品。用模拟退火算法求解例10.1的关键过程如图所示:
一文搞懂什么是模拟退火算法SImulated Annealing【附应用举例】相关推荐
- 一文搞懂什么是遗传算法Genetic Algorithm【附应用举例】
代码链接放文末. 本文参考了很多张军老师<计算智能>的第四章内容. 本文来源:https://blog.csdn.net/qq_44186838/article/details/10918 ...
- 数学建模——模拟退火算法(Simulated Annealing,SA)
模拟退火算法 一.模拟退火算法概述 二.算法步骤 三.算法特点 四.模拟退火算法理解(图解) 五.Metropolis准则 六.模拟退火算法的应用 七.模拟退火算法Matlab代码 工具箱求解非线性函 ...
- 一文搞懂戴克斯特拉算法-dijkstra
大学学习数据结构那会,当时记得终于把 dijkstra 算法搞明白了,但是今天碰到的时候,大脑又是一片空白,于是我就又学习了下,把自己的理解写下来,希望你也可以通过本文搞懂 dijkstra 算法. ...
- 【opencv450-samples】旅行商问题(模拟退火算法Simulated Annealing,SA)
运行结果 视频演示 源码: #include <opencv2/core.hpp> #include <opencv2/imgproc.hpp> #include <op ...
- 模拟退火算法(Simulated Annealing)
模拟退火算法 说说什么是算法?有人理解是输入数据经过一些步骤的处理,最后输出.在我理解来看就是一种优化问题或者说是数值分析,无论机器学习中的算法还是深度学习的算法,寻找最优模型都是解最小损失的函数.最 ...
- 一文搞懂k近邻(k-NN)算法(一)
原文链接 一文搞懂k近邻(k-NN)算法(一) 前几天和德川一起在学习会上讲解了k-NN算法,这里进行总结一下,力争用最 通俗的语言讲解以便更多同学的理解. 本文目录如下: 1.k近邻算法的基本概念, ...
- 一文搞懂 Raft 算法
一文搞懂Raft算法 正文 raft是工程上使用较为广泛的强一致性.去中心化.高可用的分布式协议.在这里强调了是在工程上,因为在学术理论界,最耀眼的还是大名鼎鼎的Paxos.但Paxos是:少数真正理 ...
- 一文搞懂HMM(隐马尔可夫模型)-Viterbi algorithm
***一文搞懂HMM(隐马尔可夫模型)*** 简单来说,熵是表示物质系统状态的一种度量,用它老表征系统的无序程度.熵越大,系统越无序,意味着系统结构和运动的不确定和无规则:反之,,熵越小,系统越有序, ...
- 《一文搞懂NMS发展历程》Soft-NMS、Weighted NMS、IoU-Net、Softer-NMS、Adaptive NMS、DIoU-NMS
<一文搞懂NMS发展历程>Soft-NMS.Weighted NMS.IoU-Net.Softer-NMS.Adaptive NMS.DIoU-NMS 文章目录 <一文搞懂NMS发展 ...
最新文章
- js 控制选中文字
- 【Android 安装包优化】开启 ProGuard 混淆 ( 压缩 Shrink | 优化 Optimize | 混淆 Obfuscate | 预检 | 混淆文件编写 | 混淆前后对比 )
- Android中使用EventBus事件发布/订阅框架实现事件传递
- 蓝牙最新版本6.0_FIIL新品 T1 Lite,蓝牙5.2加持下的TWS耳机
- 为什么说 Web 开发永远不会退出历史舞台?
- MapXtreme 2005 学习心得 了解新建MapXtreme项目结构(二)
- 成功解决TypeError: Encoders require their input to be uniformly strings or numbers.
- Java五子棋(人机版),昨天买的棋子今天就用不上了
- 选修课计算机应用基础学什么,网络选修课-计算机应用基础 -期末考.docx
- MyEclipse10激活方法
- 基于Docker-compose搭建Redis高可用集群-哨兵模式(Redis-Sentinel)
- IDEA配置注释模板
- vuex报错Computed property “xxx“ was assigned to but it has no setter.
- Python 入门 26 —— ASCII 编码、Unicode 编码、 UTF-32、 UTF-16、 UTF-8、 GB2312 编码、 GBK 编码
- 如何把pyecharts的炫酷延续到PPT里!?
- NLP资源汇总和工具汇总
- rs232读取智能电表_跟大家聊一聊智能电表上的铭牌认识,和电表的防窃电。
- 平面上的点——Point类 (VI)
- 盛大网络董事长陈天桥 三十年河东三十年河西
- 解决Excel中VBA批量打印速度慢的问题