通用局部搜索算法之模拟退火[转]

模拟退火算法解析

通用局部搜索算法之模拟退火[转]

设施区位及算法 2009-08-28 20:44:05 阅读24 评论0 字号:

爬山法从来不会“下山”,只会向值比当前节点好的方向搜索,因而肯定不完备,
很容易停留在局部极值上;

纯粹的随机行走,从后继节点集合中等概率地随机选择一个后继,然后移动到该后继,
因此是完备的,但缺乏效率;

模拟退火算法:将效率和完备性结合起来,即爬山法 + 随机行走

1. 模拟退火算法(simulated annealing)

在冶金中,退火是为了增加金属或玻璃的韧性和硬度而先将其加热到高温再让其逐渐
冷却的过程,使材料结合成一个低能量的结晶态。

模拟退火算法与爬山法类似,但是它没有选择最佳的移动,而是选择随机的移动。如果
该移动使情况得到改善,那么接受该移动;否则,算法以某个概率接受该移动。该概率
与移动的“恶劣程度”(即变坏的梯度值)成指数级下降,同时该概率也随着“温度”T的降
低而下降,即:
                                 p = e^(delta_E / T),此时delta_E < 0.

开始时,温度较高,“坏的”移动更可能被接受,而T越低就越拒绝坏的移动。可以证明,
如果T下降的足够慢,模拟退火算法找到全局最优解的概率逼近于1.

function Simulated-Annealing(problem, schedule) return a solution state
    input: problem
              schedule, 从时间到温度T的一个映射
    local variables: current, 一个节点
                              next, 一个节点
                              T, 一个温度值,用于控制下降步骤的概率
    current = Make-Node(Initial-State[problem]);
    for t = 1 to 无穷 do
        T = schedule[t];
        if T == 0 then return current ;
        next = 随机选择current节点的一个后继;
        delta_E = VALUE[next] - VALUE[current] ;
        if delta_E > 0 then current = next ;
        else current = next with probability p = e^(delta_E / T) ;
转自:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值