Machine Learning学习笔记(八)模拟退火算法

模拟退火算法 (Simulated Annealing)

对模拟退火算法做一个归纳总结。

知识铺垫

搜索问题描述

Machine Learning学习笔记(八)模拟退火算法_第1张图片

  • 盲目搜索:按照预定的控制策略实行搜索,在搜索过程中,获取的中间信息不用来改进控制策略,成为盲目搜索。
  • 启发式搜索:反之。(1)任何有助于找到问题的解,但不能保证找到接的方法均是启发式方法。(2)有助于加速求解过程和找到较优解的方法是启发式方法。

 

  • 盲目搜索:深度优化、广度优先、代价优先、向前、向后、双向...
  • 启发式搜索:爬山法、模拟退火算法、遗传算法、粒子群算法、蚁群算法...

贪心算法

贪心算法伪代码

Machine Learning学习笔记(八)模拟退火算法_第2张图片

爬山算法(一种简单的贪心算法)

爬山算法伪代码

Machine Learning学习笔记(八)模拟退火算法_第3张图片

爬山算法的思想类似于爬山。从某点开始不断向四周相邻更高的点走去,当走到某顶峰,四周没有比当前更高的点,便认为当前点是目标。特点是能够快速收敛于局部最优解。但遇到平台则无以事从。

Machine Learning学习笔记(八)模拟退火算法_第4张图片

但爬山算法得出的一定是可行解(陷于局部最优),但不一定是最优解。

模拟退火算法

模拟退火算法是对爬山算法的改进,但仍是随机算法,不一定求出最优解。

但和爬山算法不同,模拟退火以一定概率接受一个比当前更低的点,使得摆脱局部最优点,寻找全局最优解。

而这个概率会随时间而不断减小。一定的概率是多大呢?

参考热力学公式:在温度为T时,出现能量差为dE的降温的概率为P(dE)= e^(dE/K∗T) ,其中K是玻尔兹曼常数,约等于1。

即P(dE)=e^(dE/T)  。 产生dE能量差的概率与时间T有关,是时间T的单调递减函数。

(详见下文中的metropolis算法)

给出伪代码

ans = 初始解
E = val(ans); //解的估值
while(T > T_min){
    nE = val(next);
    dE = nE - E; //能量差
    if(dE > 0 || eps(dE/T) > random(0,1){
        ans = next;
        e = nE;  //接受新点的话更新对应值
    }
    T = T * r;
} 

其中,eps(dE/T)>random(0,1)是因为dE<0,则e^(dE/T)

在具体题目的代码中,T相当于步长,初始的ans和T应能覆盖所有的解,对于当前点,仅选一个是不够的,所以可以选当前点附近的若干点,再从里面选最大。同时,初始点也可以是个点集,并行扫描效果更佳。

且eps(dE/T) > random(0,1),可以改为其他,只要符合T越小接受的几率越小就行。

模拟退火算法灵感来源

物理退火过程

退火是指将固体加热到足够高的温度,使分子呈随机排列状态,然后逐步降温使之冷却,最后分子以低能状态排列,固体达到某种稳定状态。即加温过程——等温过程——冷却(退火)过程。

Metropolis准则——以概率接受新状态

Machine Learning学习笔记(八)模拟退火算法_第5张图片

模拟退火算法

Machine Learning学习笔记(八)模拟退火算法_第6张图片

Machine Learning学习笔记(八)模拟退火算法_第7张图片

用R语言实现模拟退火算法

https://blog.csdn.net/qq_27755195/article/details/62505046

 

参考链接

https://blog.csdn.net/u012469987/article/details/51221844

https://blog.csdn.net/xianlingmao/article/details/7798647

https://blog.csdn.net/AI_BigData_wh/article/details/77943787?locationNum=2&fps=1

http://blog.jobbole.com/108559/

https://wenku.baidu.com/view/5e0cdfd376eeaeaad1f330f4.html

 

你可能感兴趣的:(优化算法)