【一个蒟蒻的挣扎】模拟退火 (Simulated Annealing,SA)
一、简介
模拟退火算法(Simulated Annealing,SA)最早的思想是由N. Metropolis [1] 等人于1953年提出。1983 年,S. Kirkpatrick 等成功地将退火思想引入到组合优化领域。它是基于Monte-Carlo迭代求解策略的一种随机寻优算法,其出发点是基于物理中固体物质的退火过程与一般组合优化问题之间的相似性。模拟退火算法从某一较高初温出发,伴随温度参数的不断下降,结合概率突跳特性在解空间中随机寻找目标函数的全局最优解,即在局部最优解能概率性地跳出并最终趋于全局最优。模拟退火算法是一种通用的优化算法,理论上算法具有概率的全局优化性能,目前已在工程中得到了广泛应用,诸如VLSI、生产调度、控制工程、机器学习、神经网络、信号处理等领域。模拟退火算法是通过赋予搜索过程一种时变且最终趋于零的概率突跳性,从而可有效避免陷入局部极小并最终趋于全局最优的串行结构的优化算法。
二、原理及算法模型
模拟退火算法的模型
模拟退火算法的步骤
- 模拟退火算法与初始值无关,算法求得的解与初始解状态S(是算法迭代的起点)无关;
- 模拟退火算法具有渐近收敛性,已在理论上被证明是一种以概率l 收敛于全局最优解的全局优化算法;
- 模拟退火算法具有并行性。
一些个人理解:
Greedy
算法,但是它的搜索过程引入了随机因素。模拟退火算法以一定的概率来接受一个比当前解要差的解,因此有可能会跳出这个局部的最优解,达到全局的最优解。而它的优势就在于它概率接受当前非最优解的解,那么就有概率跳出当前局部最优解,有了可以搜索到全局最优解的可能性。模拟现实中固体退火原理,随着温度的降低,解逐渐稳定下来,并逐渐集中在最优解附近。它具有跳出局部最优陷阱的能力。在Boltzmann机中(神经网络方面),即使系统落入了局部最优的陷阱,经过一段时间后,它还能再跳出来,系统最终将往全局最优值的方向收敛。三、应用
实际应用方面和算法竞赛方面
待补充
四、模拟退火算法的参数控制问题
模拟退火算法的应用很广泛,可以求解
NP
完全问题,但其参数难以控制,其主要问题有以下三点:(1) 温度
T
的初始值设置问题。
温度T的初始值设置是影响模拟退火算法全局搜索性能的重要因素之一、初始温度高,则搜索到全局最优解的可能性大,但因此要花费大量的计算时间;反之,则可节约计算时间,但全局搜索性能可能受到影响。实际应用过程中,初始温度一般需要依据实验结果进行若干次调整。
(2) 退火速度问题。
模拟退火算法的全局搜索性能也与退火速度密切相关。一般来说,同一温度下的“充分”搜索(退火)是相当必要的,但这需要计算时间。实际应用中,要针对具体问题的性质和特征设置合理的退火平衡条件。
(3) 温度管理问题。
温度管理问题也是模拟退火算法难以处理的问题之一。实际应用中,由于必须考虑计算复杂度的切实可行性等问题,常采用如下所示的降温方式:T(t+1)=k×T(t)
式中
k
为正的略小于1.00
的常数,t
为降温的次数。
五、总结
一个理解原理不算难(贪心和模拟现实中的退火过程都还算好理解),但是实现和解题都有一些小槛的算法,比如调参,比如怎么结合题目实现。
这篇笔记只能说学了些极其基本的东西,(毕竟暂时不太用)以后学深了再来补叭
最后的最后
一些无关的题外话
高一的时候乱逛看到的算法, 当时觉得好有趣,和朋友说好打完比赛去看看这个是个什么东西蛮好玩的
然后我们都不再打比赛了,可能逐渐也快忘记了吧
算下来已经过去三年了啊
参考学习资料:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律