模拟退火算法(Simulated Annealing, SA)是一种基于物理退火过程(Annealing)的启发式优化算法,属于元启发式算法的一种。它由S. Kirkpatrick等在1983年提出,灵感来源于金属冶炼中的"退火"过程------通过加热后缓慢降温,使金属原子达到能量最低、结构最稳定的状态。
模拟退火算法常用于求解组合优化问题(如旅行商问题、车辆路径问题、作业调度等)以及连续优化问题,能够在搜索空间中跳出局部最优解,以一定概率接受较差解,从而有机会找到全局最优或近似最优解。
一、算法名称由来:物理退火过程
| 物理过程 | 算法对应过程 |
|---|---|
| 加热材料 | 初始高温,算法开始时接受较差解的概率较高 |
| 原子剧烈运动 | 搜索范围广,探索性强 |
| 缓慢降温 | 温度逐渐下降,接受差解的概率减小,趋向收敛 |
| 原子趋于有序排列 | 解逐渐稳定,逼近最优解 |
二、算法基本原理
模拟退火算法模拟物理退火过程,在搜索解的过程中:
-
从一个初始解出发,在邻域中生成新解;
-
根据一定准则判断是否接受新解:
-
若新解优于当前解(目标函数值更小/更大,视优化方向而定),则接受;
-
若新解较差,则以一定概率接受,该概率与"温度"和"性能差距"有关;
-
-
随着"温度"逐渐降低,接受差解的概率减小,算法逐渐收敛。
三、核心要素与公式
-
解的表示
依据实际问题定义解的形式(如路径序列、任务安排、坐标向量等)。
-
邻域结构(Neighborhood Structure)
定义如何从当前解生成一个新解(如交换两个城市、扰动某个变量)。
-
目标函数(Objective Function)
即优化的目标,例如路径长度、成本、时间等,记作 f(x)。
-
温度(Temperature, T)
控制搜索过程的全局探索能力。初始温度高,接受差解的概率大;温度下降,逐渐偏向局部搜索。
-
Metropolis 接受准则(核心公式)
当新解的目标函数值 f(new) 不如当前解 f(current) 时,算法以如下概率接受新解:
P(accept)=exp(−Tf(new)−f(current))
-
若 f(new) < f(current)(最小化问题):一定接受;
-
若 f(new) ≥ f(current):以概率 P(accept) 接受;
-
T 越高,越容易接受差解;T 越低,越难接受差解。
-
降温策略(Cooling Schedule)
控制温度如何下降,常见方法:
-
指数降温:Tk+1=α⋅Tk,其中 0<α<1(如 α=0.95)
-
线性降温:Tk+1=Tk−ΔT
-
对数降温(理论最优,但实际慢):Tk=log(k+1)C
-
-
终止条件
常见条件包括:
-
温度降到阈值以下;
-
连续若干次迭代没有改善;
-
达到最大迭代次数或运行时间。
-
四、算法流程(伪代码)
1. 初始化:
- 任选一个初始解 x_current
- 设置初始温度 T,降温系数 alpha,终止条件
2. While 不满足终止条件:
a. For i = 1 to L(每个温度下的迭代次数):
i. 生成新解 x_new = neighbor(x_current)
ii. 计算 Δf = f(x_new) - f(x_current)
iii. 如果 Δf < 0,接受 x_new
否则,以概率 exp(-Δf / T) 接受 x_new
iv. 更新 x_current
b. 降温:T = alpha * T
3. 输出最优解
五、关键参数及其影响
| 参数 | 作用 | 设置建议 |
|---|---|---|
| 初始温度 T₀ | 控制初期接受差解的能力,影响全局搜索能力 | 应足够高,使大部分差解可被接受(如90%以上) |
| 降温系数 α | 决定冷却速度,α 越小降温越快 | 常用 0.80 ~ 0.99,视问题而定 |
| 每个温度的迭代次数 L | 控制在每个温度下的搜索充分性 | 可设为固定值或与问题规模相关 |
| 终止温度 T_min | 算法停止的温度阈值 | 一般设较小值,如 1e-8 或更低 |
| 邻域生成策略 | 决定搜索空间的探索方式 | 需平衡"探索"与"开发",避免陷入局部最优 |
六、优缺点分析
✅ 优点:
-
不易陷入局部最优,有一定概率跳出;
-
简单易实现,通用性强;
-
可用于离散和连续优化问题;
-
可与其他算法(如遗传算法、局部搜索)结合形成混合算法。
❌ 缺点:
-
参数调节敏感(初始温度、降温速度等对结果影响大);
-
收敛速度较慢,尤其降温慢时;
-
不保证找到全局最优,结果具有一定随机性;
-
对邻域结构设计依赖较大。
七、典型应用场景
| 应用领域 | 示例问题 |
|---|---|
| 组合优化 | 旅行商问题(TSP)、车辆路径问题(VRP)、图着色、作业调度 |
| 工程设计优化 | 电路布局优化、天线设计、结构优化 |
| 生产与物流 | 排产优化、仓储选址、配送路径优化 |
| 图像处理 | 图像恢复、边缘检测、特征选择 |
| 机器学习 | 神经网络权重优化、超参数调优(较少用,但可行) |
八、简单 Python 示例(以最小化函数为例)
import math
import random
# 目标函数(示例:求 f(x) = x^2 的最小值)
def objective_function(x):
return x**2
# 邻域函数:在当前解附近扰动
def get_neighbor(x, step=1.0):
return x + random.uniform(-step, step)
# 模拟退火算法
def simulated_annealing():
T = 1000 # 初始温度
T_min = 1e-3 # 终止温度
alpha = 0.95 # 降温系数
current_x = random.uniform(-10, 10)
current_cost = objective_function(current_x)
best_x, best_cost = current_x, current_cost
while T > T_min:
for _ in range(100): # 每个温度下迭代次数
new_x = get_neighbor(current_x)
new_cost = objective_function(new_x)
delta = new_cost - current_cost
# 如果新解更好,或者按概率接受差解
if delta < 0 or random.random() < math.exp(-delta / T):
current_x = new_x
current_cost = new_cost
if current_cost < best_cost:
best_x = current_x
best_cost = current_cost
T *= alpha # 降温
return best_x, best_cost
# 运行算法
x_opt, f_opt = simulated_annealing()
print(f"最优解 x = {x_opt:.4f}, f(x) = {f_opt:.4f}")
九、总结
| 项目 | 内容摘要 |
|---|---|
| 核心思想 | 模拟物理退火过程,以一定概率跳出局部最优,寻找全局最优 |
| 优势 | 全局搜索能力强、适用范围广、实现简单 |
| 挑战 | 参数调节复杂、收敛慢、对邻域结构敏感 |
| 适用问题 | NP难组合优化、连续优化、多峰函数优化等 |
| 类似算法 | 可与遗传算法、禁忌搜索、局部搜索等结合形成混合优化策略 |