模拟退火算法(Simulated Annealing) - 原理与代码实例讲解
作者:禅与计算机程序设计艺术
1. 背景介绍
1.1 优化问题与启发式算法
在计算机科学和运筹学领域,优化问题是一类非常重要且应用广泛的问题。它旨在从一组可能的候选解中找到最优解,使得预设的目标函数值最大化或最小化。很多实际问题都可以抽象为优化问题,如生产调度、旅行商问题(TSP)、图着色等。
然而,很多优化问题属于NP-hard问题,即随着问题规模的增大,求解难度呈指数级增长。传统的精确算法(如动态规划、分支定界等)难以在可接受的时间内求得最优解。因此,人们提出了一系列启发式算法,通过一定的策略高效地搜索解空间,以期在合理的时间内找到近似最优解。
1.2 模拟退火算法的诞生
模拟退火算法(Simulated Annealing, SA)就是一种经典的启发式优化算法。它的灵感来源于固体退火过程。在冶金学中,退火是一种金属热处理工艺,将金属加热到一定温度,保持足够长的时间,然后以适当速度冷却。通过这个过程,金属内部粒子得到充分的热运动,最终达到低能量的稳定结晶状态,从而消除金属内部的缺陷,改善其物理性能。
1983年,Kirkpatrick等人首次将固体退火过程与组合优化问题建立了联系,提出了模拟退火优化算法。它借鉴了统计物理中Metropolis准则,通过模拟高温下粒子的热运动,以一定概率接受劣解,跳出局部最优,最终在温度降低到零时得到全局最优解或近似最