堆优化模拟退火(List-Based Simulated Annealing|LBSA)

申明

本文部分内容来自List-Based Simulated Annealing Algorithm for Traveling Salesman Problem[1]
如有侵权,请联系删除

引入

模拟退火是用于求解连续函数的极值的随机化算法,由爬山算法优化得来

普通模拟退火对参数值极为敏感,经常要调很久

最近了解到一种进阶版模拟退火,即堆优化模拟退火 LBSA ,全称 List-Based Simulated Annealing ,较于普通的的模拟退火,它对参数的敏感度较低,得到最优解的概率较高,不失为一种优秀的骗分算法

算法过程

预处理

\(LSBA\) 首先要生成初始温度堆,步骤如下:

  1. 生成初始解 \(x\) ,建立温度堆 \(L\) ,定义堆长度 \(L_{\max}\) ,定义初始接受概率 \(p_0\)

  2. 随机生成 \(x\) 的临近解 \(y\) ,如果 \(y\) 优于 \(x\) ,则令 \(x=y\)

  3. 将温度 \(t=\frac { -( f(y) - f(x) ) } { \ln{ p_0} }\) 放入 \(L\)

  4. 重复这一过程,直到放满 \(L_{\max}\) 个温度

求解

  1. 初始化温度堆\(L\)

  2. 取出(pop)堆中的最大值\(t_{\max}\)

  3. 随机生成 \(x\) 的临近解 \(y\) ,如果 \(y\)\(x\) 优,则令 \(x=y\),跳至第5步;否则执行第4步

  4. 设概率 \(p = \exp{ (\frac{-(f(y)-f(x))} { t_{\max} } )}\) ,随机一个 \(r\in[0,1)\) ,若 \(r \lt p\) ,则令\(t=t+\frac{-(f(y)-f(x))}{\ln r}\)并累计执行次数 \(c\)\(x=y\)

  5. 重复3~4步 \(M\)

  6. 如果 $c \not = 0 $, 将 \(L\) 中的最大值换为 \(\frac{t}{c}\),清空 \(c\)

  7. 重复2~6步 \(K\)


  1. https://www.hindawi.com/journals/cin/2016/1712630/ ↩︎

posted @ 2023-08-17 15:15  lnw143  阅读(60)  评论(0编辑  收藏  举报