堆优化模拟退火(List-Based Simulated Annealing|LBSA)
申明
本文部分内容来自List-Based Simulated Annealing Algorithm for Traveling Salesman Problem[1]
如有侵权,请联系删除
引入
模拟退火是用于求解连续函数的极值的随机化算法,由爬山算法优化得来
普通模拟退火对参数值极为敏感,经常要调很久
最近了解到一种进阶版模拟退火,即堆优化模拟退火 LBSA
,全称 List-Based Simulated Annealing
,较于普通的的模拟退火,它对参数的敏感度较低,得到最优解的概率较高,不失为一种优秀的骗分算法
算法过程
预处理
\(LSBA\) 首先要生成初始温度堆,步骤如下:
-
生成初始解 \(x\) ,建立温度堆 \(L\) ,定义堆长度 \(L_{\max}\) ,定义初始接受概率 \(p_0\)
-
随机生成 \(x\) 的临近解 \(y\) ,如果 \(y\) 优于 \(x\) ,则令 \(x=y\)
-
将温度 \(t=\frac { -( f(y) - f(x) ) } { \ln{ p_0} }\) 放入 \(L\) 中
-
重复这一过程,直到放满 \(L_{\max}\) 个温度
求解
-
初始化温度堆\(L\)
-
取出(pop)堆中的最大值\(t_{\max}\)
-
随机生成 \(x\) 的临近解 \(y\) ,如果 \(y\) 比 \(x\) 优,则令 \(x=y\),跳至第5步;否则执行第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\)
-
重复3~4步 \(M\) 次
-
如果 $c \not = 0 $, 将 \(L\) 中的最大值换为 \(\frac{t}{c}\),清空 \(c\)
-
重复2~6步 \(K\) 次
本文来自博客园,作者:lnw143,转载请注明原文链接:https://www.cnblogs.com/lnw143/p/17636880.html