模拟退火算法的应用与理解

模拟退火算法是一种受 固体退火过程 启发的元启发式优化算法,广泛应用于 组合优化 和 复杂函数优化 问题。其核心思想是通过 概率性接受劣解 的策略,逐步降低搜索的随机性,最终收敛到全局最优或近似最优解。本文以旅行商问题为例,详细阐述模拟退火算法的设计思想,并解析模拟退火算法的执行过程中的作用原理。

模拟退火算法的核心步骤包括:初始解生成 → 邻域搜索 → 接受准则判断 → 温度更新,循环迭代直至满足终止条件。

一. 以旅行商问题(TSP)为例的模拟退火算法设计

1. 问题描述

  • 旅行商问题(TSP):给定 nn 个城市及其两两之间的距离,找到一条访问每个城市恰好一次并返回起点的最短回路。
  • 目标函数:最小化路径总长度 f(π)=∑i=1ndπ(i),π(i+1)f(π)=∑i=1n​dπ(i),π(i+1)​,其中 π(n+1)=π(1)π(n+1)=π(1)。

2. 模拟退火算法设计

2.1 初始解的生成
  • 方法:随机生成一条初始路径,或使用贪心算法(如最近邻法)生成较优初始解。

    • 随机初始解:随机排列城市顺序。

    • 贪心初始解:从随机城市出发,每次选择最近的未访问城市。

  • 示例:对于51个城市的TSP(如eil51数据集),贪心初始解路径长度约为450,随机初始解可能更长。

2.2 邻域结构设计
  • 核心操作:定义如何从当前解生成邻域解。

  • 常用邻域操作

    1. 2-opt交换:随机选择两条边 (i,j)(i,j) 和 (k,l)(k,l),断开后重新连接为 (i,k)(i,k) 和 (j,l)(j,l),并反转路径段 j→kj→k。

    2. 城市插入:随机选择一个城市,插入到路径中的新位置。

    3. 城市交换:随机交换两个城市的位置。

  • 选择依据:2-opt交换能高效消除路径交叉,适合TSP的局部优化。

2.3 温度调度(退火策略)
  1. 初始温度 T0T0​

    • 需足够高以允许接受劣解。

    • 经验公式:T0=−Δfavg/ln⁡(0.5)T0​=−Δfavg​/ln(0.5),其中 ΔfavgΔfavg​ 为初始随机解的平均目标函数差值。

    • 示例:对eil51数据集,初始温度可设为 T0=1000T0​=1000。

  2. 降温策略

    • 指数降温:Tk+1=α⋅TkTk+1​=α⋅Tk​,其中 αα 为降温系数(通常取0.8~0.99)。

    • 示例:若 α=0.95α=0.95,温度每迭代100次降至 T=1000×0.95100≈5.9T=1000×0.95100≈5.9。

  3. 终止条件

    • 温度降至阈值(如 Tfinal=1Tfinal​=1)。

    • 达到最大迭代次数(如10000次)。

    • 连续若干次迭代无改进(如500次)。

2.4 接受准则(Metropolis准则)
  • 新解接受概率

    P={1if Δf≤0,e−Δf/Tif Δf>0.P={1e−Δf/T​if Δf≤0,if Δf>0.​
    • 说明:若新解更优(Δf=fnew−fold<0Δf=fnew​−fold​<0),直接接受;若更差,以概率 e−Δf/Te−Δf/T 接受。

二. 5城市TSP 问题的模拟退火优化过程

3.问题定义

  • 城市坐标(假设为二维平面坐标):

    • A(0,0)

    • B(2,0)

    • C(2,1)

    • D(1,2)

    • E(0,1)

  • 目标:找到访问所有城市一次且总距离最短的回路。

4. 模拟退火算法参数设置

  • 初始温度 T0=100T0​=100

  • 降温系数 α=0.95α=0.95(每迭代一次温度降低5%)

  • 终止条件:温度降至 T<1T<1 或连续20次迭代无改进。

  • 邻域操作:2-opt交换(随机选择两条边断开并重新连接)。

  • 初始解:随机生成路径 A→B→C→D→E→A,总长度计算如下:
    L初始​=d(A,B)+d(B,C)+d(C,D)+d(D,E)+d(E,A)=2+1+1.41+1.41+1=6.82

5. 优化过程详细步骤

以下为模拟退火算法的逐次迭代过程:

注意:其中接受概率P的阈值为每次迭代中动态生成的随机数,用来模拟概率接受的过程

迭代1(T=100)
  • 当前解A→B→C→D→E→A(长度6.82)

  • 生成邻域解:随机选择两条边(如B-C和D-E),执行2-opt交换:

    • 原路径段:B→C→D→E

    • 新路径段:B→D→C→E(断开B-C和D-E,连接B-D和C-E)

    • 新解A→B→D→C→E→A

    • 新长度:L新​=d(A,B)+d(B,D)+d(D,C)+d(C,E)+d(E,A)=2+1.41+1.41+2.24+1=8.06

    • Δf = 8.06 - 6.82 = 1.24(劣解)

    • 接受概率

      P=e−1.24/100≈0.988P=e−1.24/100≈0.988
    • 结果:以98.8%概率接受劣解,更新当前解为 A→B→D→C→E→A

    • 温度更新:T=100×0.95=95T=100×0.95=95。

迭代2(T=95)
  • 当前解A→B→D→C→E→A(长度8.06)

  • 生成邻域解:选择边B-D和C-E,执行2-opt交换:

    • 原路径段:B→D→C→E

    • 新路径段:B→C→D→E(恢复原始路径)

    • 新解A→B→C→D→E→A(长度6.82)

  • Δf = 6.82 - 8.06 = -1.24(优解)

  • 结果:直接接受优解,更新当前解为原始路径。

  • 温度更新:T=95×0.95=90.25T=95×0.95=90.25。

迭代3(T=90.25)
  • 当前解A→B→C→D→E→A(长度6.82)

  • 生成邻域解:选择边C-D和E-A,执行2-opt交换:

    • 原路径段:C→D→E→A

    • 新路径段:C→A→E→D(路径变为 A→B→C→A→E→D→A,但需修复为合法路径)

    • 修正后新解A→B→C→E→D→A

    • 新长度

      L新=d(A,B)+d(B,C)+d(C,E)+d(E,D)+d(D,A)=2+1+2.24+1.41+2.24=8.89L新​=d(A,B)+d(B,C)+d(C,E)+d(E,D)+d(D,A)=2+1+2.24+1.41+2.24=8.89
    • Δf = 8.89 - 6.82 = 2.07(劣解)

    • 接受概率

      P=e−2.07/90.25≈0.978P=e−2.07/90.25≈0.978
    • 结果:以97.8%概率接受劣解,更新当前解为 A→B→C→E→D→A

    • 温度更新:T=90.25×0.95≈85.74T=90.25×0.95≈85.74。

 迭代循环直到满足结束条件。。。

6. 关键优化阶段总结

  1. 高温阶段(T=100~50)

    • 频繁接受劣解(如迭代1和3),路径长度在6.82~9.3之间波动。

    • 探索不同路径结构,可能发现潜在优质区域(如 A→B→C→D→E→A)。

  2. 中温阶段(T=50~10)

    • 接受劣解概率逐渐降低(如 T=50T=50 时,Δf=2 的接受概率为 e−2/50≈0.96e−2/50≈0.96)。

    • 路径长度波动范围缩小(如6.82~8.0),逐步逼近较优解。

  3. 低温阶段(T=10~1)

    • 几乎仅接受优解(如 T=5T=5 时,Δf=1 的接受概率为 e−1/5≈0.82e−1/5≈0.82,但实际优化已接近尾声)。

    • 最终收敛到局部最优解 A→E→D→C→B→A(长度6.24),路径如下:

      L=d(A,E)+d(E,D)+d(D,C)+d(C,B)+d(B,A)=1+1.41+1.41+1+2=6.82L=d(A,E)+d(E,D)+d(D,C)+d(C,B)+d(B,A)=1+1.41+1.41+1+2=6.82
    • :实际最优解为 A→B→C→D→E→A(长度6.82)或其他对称路径。

7. 温度变化与搜索优化关系

  • 温度曲线

    • 初始温度 T0=100T0​=100,按 Tk+1=0.95TkTk+1​=0.95Tk​ 指数降温。

    • 迭代20次后温度降至 T≈35.85T≈35.85,迭代50次后 T≈7.69T≈7.69。

  • 搜索行为变化

    • 高温(T>50):路径长度大幅波动,接受劣解概率高(>90%)。

    • 中温(10<T<50):波动减小,逐步收敛至较优解。

    • 低温(T<10):仅在当前解邻域微调,最终稳定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值