zoukankan      html  css  js  c++  java
  • 浅谈模拟退火

    核心思想

    模拟退火十分好写,它的核心思想就是:

    每一次降温都可以从当前状态转移到另一种相近状态(没有严格定义,可以自己想产生相近解的方法)

    如果那个相近状态的答案更优,当然转移到那种状态!

    但如果更劣,也需要一定的概率转移到那种状态(防止陷入局部最优解)

    那个概率就是:

    [P=e^{frac{nowVal-nextVal}{T}} ]

    这里的T就是当前温度,Val是对应状态的答案

    要注意(frac{nowVal-nextVal}{T})是一个负值,因此必定有(0<P<1)

    可以看出,当那种相近状态越劣((nowVal-nextVal)越小),就有越小的概率转移到那种状态

    而当前温度越低,也是越稳定的

    (这里针对的是答案越小越优的题目)

    参数设置

    模拟退火是一个十分依赖参数的随机化算法,大致有以下几个参数

    ①初始温度(startT)

    ②温度变化率(deltaT)

    ③温度下限(lowT)

    ④随机种子(seed)

    初始温度大致可以设在100~10000,防止一开始活跃性太高,陷入太劣的解

    温度变化率宜设置在0.99~0.999

    温度下限可以很小,大概在1e-15~1e-10之间

    至于(seed)...

    大致流程

    综上,模拟退火的大致流程就是:

    ①初始化温度

    ②产生相近状态

    ③利用上述方法判断是否转移,并同时改变记录的答案值

    ④降温,goto ②

    直到温度低于下限结束

    最后说一下,四个参数的调整对算法效率影响很大,可以自己做题体会一下

    例题

    提供几道例题练手

    [JSOI2004]平衡点

    [NOIp提高组2017]宝藏

  • 相关阅读:
    暴力+前缀和——cf1335E
    【经典】区间dp——cf1336E
    简单几何+并查集 —— 2015NAQ K
    spring mvc 文件上传 和 异常页面处理
    ajax 入门
    Codeforces Round #558 (Div. 2)
    [SDOI2019]热闹又尴尬的聚会(图论+set+构造)
    [SDOI2019]移动金币(博弈论+阶梯Nim+按位DP)
    [ZJOI2019]浙江省选(半平面交)
    [ZJOI2019]开关(生成函数+背包DP)
  • 原文地址:https://www.cnblogs.com/ytxytx/p/9705916.html
Copyright © 2011-2022 走看看