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

模拟退火算法详解(Python实现智能优化方法)

在解决复杂的组合优化问题时,传统的穷举法往往效率低下。这时,模拟退火算法(Simulated Annealing, SA)作为一种受物理退火过程启发的智能优化方法,能够有效跳出局部最优解,找到全局近似最优解。本文将带你从零开始,用Python优化算法实现一个完整的模拟退火算法。

什么是模拟退火算法?

模拟退火算法灵感来源于金属热处理中的“退火”过程:高温下原子自由移动,随着温度缓慢下降,原子逐渐趋于低能态,最终形成规则晶体结构。在算法中:

  • “能量”对应目标函数值(越小越好)
  • “温度”控制接受劣解的概率
  • 高温时允许“上山”(接受更差解),低温时趋于“下山”(只接受更好解)
模拟退火算法详解(Python实现智能优化方法) 模拟退火算法 Python优化算法 智能优化方法 组合优化问题 第1张

算法核心步骤

  1. 初始化:设定初始温度 T、降温系数 α、终止温度
  2. 在当前解附近随机生成新解
  3. 计算新旧解的目标函数差 ΔE
  4. 若 ΔE < 0(更优),接受新解;否则以概率 exp(-ΔE/T) 接受劣解
  5. 降温:T = α * T
  6. 重复直到温度低于终止温度

Python代码实现

下面是一个求解函数 f(x) = x² + 10*sin(5x) 最小值的完整示例(x ∈ [-10, 10]):

import mathimport randomdef objective_function(x):    """目标函数:需要最小化的函数"""    return x ** 2 + 10 * math.sin(5 * x)def simulated_annealing():    # 参数设置    initial_temp = 100      # 初始温度    final_temp = 1e-3       # 终止温度    alpha = 0.95            # 降温系数    current_x = random.uniform(-10, 10)  # 随机初始解    current_energy = objective_function(current_x)    best_x = current_x    best_energy = current_energy        temp = initial_temp    while temp > final_temp:        # 在当前解附近生成新解(步长与温度相关)        new_x = current_x + random.uniform(-1, 1) * temp        # 确保新解在定义域内        new_x = max(-10, min(10, new_x))        new_energy = objective_function(new_x)                # 计算能量差        delta_energy = new_energy - current_energy                # Metropolis准则:接受更优解或以概率接受劣解        if delta_energy < 0 or random.random() < math.exp(-delta_energy / temp):            current_x = new_x            current_energy = new_energy                        # 更新全局最优解            if current_energy < best_energy:                best_x = current_x                best_energy = current_energy                # 降温        temp *= alpha        return best_x, best_energy# 运行算法best_x, best_energy = simulated_annealing()print(f"最优解: x = {best_x:.4f}, f(x) = {best_energy:.4f}")

关键参数说明

参数 作用 建议值
初始温度 控制初期接受劣解的概率 足够高(如50-1000)
降温系数α 控制降温速度 0.8~0.99(常用0.95)
终止温度 算法停止条件 1e-3 ~ 1e-8

为什么选择模拟退火?

相比梯度下降等局部搜索算法,模拟退火算法具有以下优势:

  • 能跳出局部最优,适合非凸、多峰函数
  • 实现简单,仅需目标函数值(无需导数)
  • 理论上有收敛到全局最优的概率

应用场景

智能优化方法广泛应用于:

  • 旅行商问题(TSP)
  • 电路布线优化
  • 机器学习超参数调优
  • 物流路径规划等组合优化问题

通过本教程,你已掌握用Python优化算法实现模拟退火的核心思想。尝试修改目标函数和参数,观察不同设置对结果的影响吧!