DAY12 超参数调整专题2

三种启发式算法的示例代码:遗传算法、粒子群算法、退火算法

模拟退火算法(Simulated Annealing)是一种受金属退火过程启发的全局优化算法,通过模拟降温过程中的热力学平衡来避免陷入局部最优。以下是其核心实现逻辑:


1. 算法核心思想

允许以一定概率接受比当前解更差的解,随着温度降低逐渐减少这种概率,从而平衡全局探索(高温阶段)和局部收敛(低温阶段)。


2. 实现步骤

(1) 初始化参数
  • 初始温度(T):较高值(如1000),保证充分探索。

  • 终止温度(T_min):极低值(如1e-5),决定算法何时停止。

  • 降温系数(α):0.8~0.99,控制温度下降速度。

  • 迭代次数/链长(L):每个温度下的扰动次数(如100次)。

  • 初始解(x_current):随机生成或启发式选择。

(2) 主循环(温度下降过程)
while T > T_min:
    for _ in range(L):  # 每个温度下多次扰动
        # 生成新解(微小扰动)
        x_new = perturb(x_current)
        
        # 计算能量差(目标函数差值)
        delta_E = evaluate(x_new) - evaluate(x_current)
        
        # 决定是否接受新解
        if delta_E < 0:  # 新解更优
            x_current = x_new
        else:  # 以概率接受较差解
            p = exp(-delta_E / T)
            if random() < p:
                x_current = x_new
    
    # 降温(指数降温)
    T = T * alpha
(3) 关键操作详解
  • 生成新解(perturb
    对当前解进行微小随机扰动,例如:

    • 连续问题x_new = x_current + random_normal() * step_size

    • 离散问题(如TSP):随机交换两个城市的位置

  • 接受准则(Metropolis准则)
    接受差解的概率:p = exp(-ΔE / T)

    • ΔE < 0:新解更优,必然接受。

    • ΔE ≥ 0:以概率p接受,温度越低接受概率越小。

(4) 终止条件
  • 温度降至T_min

  • 连续多次迭代解未改进。


3. 关键参数调整建议

参数 影响 典型值
初始温度 (T) 过高导致计算慢,过低易陷入局部最优 100~1000
降温系数 (α) 接近1时降温慢、搜索充分但耗时,较小值降温快、可能漏掉最优解 0.85~0.99
链长 (L) 每个温度下的扰动次数,影响局部搜索能力 50~200

4. 应用示例(函数最小化)

假设优化目标为 f(x) = x²,实现步骤:

  1. 初始化:随机选择x_current = 5T=100alpha=0.95.

  2. 生成新解x_new = x_current + random.uniform(-1, 1).

  3. 计算ΔE:若x_new² < x_current²则接受;否则以概率exp(-(ΔE)/T)接受。

  4. 降温:重复直至T < 1e-5,最终逼近x=0


5. 算法特性

  • 优点:避免局部最优,适用于离散/连续、非凸、多峰问题。

  • 缺点:参数敏感,收敛速度较慢。

  • 对比:相比遗传算法,更简单;相比梯度下降,能跳出局部最优。


通过合理设置参数和扰动方式,模拟退火能有效平衡探索与开发,是解决复杂优化问题的有力工具。

 

你可能感兴趣的:(python学习,python)