【概述】

模拟退火(Simulated Annealing,SA),其类似于物理学上金属退火的过程,故称为模拟退火,其是一个随机化与贪心结合的算法,在你 RP 较好或数据范围比较小的时候,可以轻松解决许多难题。

模拟退火的原理与金属退火的原理近似:

  • 将热力学的理论套用到统计学上
  • 将搜寻空间内每一点想像成空气内的分子
  • 搜寻空间内的每一点,也像空气分子一样带有动能,其用于表示该点对命题的合适程度
  • 演算法先以搜寻空间内一个任意点作起始:每一步先选择一个相邻的点,然后再计算从现有位置到达相邻点的概率

【主要思路】

我们模拟物理退火的三个过程:加温、等温、冷却,来归纳一下模拟退火算法的主要思路:

首先,确定一个初始温度 T,这个参数是随机选择的,初始温度选择的越好,算法表现就越好,但具体该选何值,没有一个明确的界定方法,只能依靠 RP 来选,不过据说有些大佬可以根据题目推出最优初始温度

然后,当温度大于一个边界值时,我们将当前状态的答案与下一状态的答案进行比较:

  • 如果 res<newRes,转移答案
  • 如果 res>newRes,有一定概率转移答案

在扩展状态时有一个小方法:nextSta=nowSta+(rand()∗2−RAND_MAX)∗T,这样的原理是:(rand()∗2−RANDMAX) 的范围是从负数到正数的,这样在扩展坐标的时候就可以多方向扩展,不会只在一个方向上更新。

其次,确定转移答案的概率,由于转移答案的概率需要随着时间的推移res 和 newRes 差值的增大而增大,因此常表示为:,其中

最后,我们模拟降温过程,对 T 乘以一个小于但十分接近于 1 的数 delta,以体现时间对答案的影响。

这样,随着温度不断降低,变化幅度也越来越小,接受一个更劣的解的概率也越来越小。

void SA(double nowSta){int T = ****; //初始温度double delta=0.99;int res=getRes(nowSta);//初始状态能得到的答案while (T > EPS) { // EPS是一个大于0的极小值,用于精度的比较,一般取1E-9~1E-15int nextSta = nowSta + (rand() * 2 - RAND_MAX)*T; //扩展状态int newRes = getRes(nextSta); //记录下一个状态能得到的答案double pr = exp((res - newRes) / T) * RAND_MAX;//一定的概率if (res < newRes || pr > rand()){//新的代价小于当前代价,或在一定概率下nowSta = nextSta;//更新当前状态res = newRes;//更新新状态的答案}T *= delta; //降温的过程,将温度减小}
}

搜索 —— 启发式搜索 —— 模拟退火相关推荐

  1. 人工智能-搜索----启发式搜索

    搜索算法的形式化描述: <状态state.动作motion.状态转移state transition.路径path.测试目标test target> 一.启发式搜索(有信息搜索)(Heur ...

  2. 局部搜索、模拟退火和遗传算法求解TSP问题

    模拟退火和遗传算法求解TSP问题 源代码传送门:GITHUB 数据传送门:TSPLIB 文章目录 模拟退火和遗传算法求解TSP问题 摘要 1 导言 1.1 问题重述 1.2 TSP问题选择 1.3 思 ...

  3. 旅行商问题的近似最优解(局部搜索、模拟退火、遗传算法)

    旅行商问题的近似最优解(局部搜索.模拟退火.遗传算法) 关键字:旅行商问题,TSP,局部搜索,模拟退火,遗传算法 TSP问题(Traveling Salesman Problem)是一个组合优化问题. ...

  4. 搜索 —— 启发式搜索

    [概述] 启发式搜索算法,就是在状态空间中的搜索对每一个搜索的位置进行评估,得到最好的位置,再从这个位置进行搜索直到目标. 有时我们会遇到这样的一类题:题目描述的是一道时间复杂度很高的 NP 问题,我 ...

  5. AcWing进阶算法课Level-4 第六章 搜索 (模拟退火,爬山)

    AcWing进阶算法课Level-4 第六章 搜索 模拟退火 AcWing 3167. 星星还是树110人打卡 AcWing 2424. 保龄球78人打卡 AcWing 2680. 均分数据72人打卡 ...

  6. 三种典型启发式算法(禁忌搜索,模拟退火,遗传算法)

    启发式算法 启发式算法:用来求解非常好的可行解,但不一定是最优解:该类算法可处理非常大的问题,可用来解决NP hard问题,是一种成熟的迭代算法,每次迭代结果可能导致比先前最佳解更好的新解,当算法经过 ...

  7. 2018-4-8使用兔子的例子对比说明遗传算法,局部搜索,禁忌搜索,模拟退火方法

    文章的来源: [图文]智能优化算法_数学建模_王成章_模拟退火法_2011_百度文库 https://wenku.baidu.com/view/335c56e94afe04a1b071de13.htm ...

  8. 搜索 —— 启发式搜索 —— 爬山法

    [概述] 爬山法(Hill Climbing,HC)是一种局部择优的贪心搜索算法,其本质上是梯度下降法. 该算法每次从当前的节点开始,与周围的邻接点进行比较: 若当前节点是最大的,那么返回当前节点,作 ...

  9. 搜索 —— 启发式搜索 —— A* 算法

    [概述] A*(A-Star)算法是一种在静态路网中,求解最短路的最有效的直接搜索方法,也是解决许多搜索问题的有效算法之一. A* 算法实际上是对 Dijkstra 算法的优化后得到的,关于 Dijk ...

最新文章

  1. 8张图带你理解Java整个只是网络(转载)
  2. ReadFile 和 补充CreateFile
  3. 蜗牛慢慢爬 LeetCode 6. ZigZag Conversion [Difficulty: Medium]
  4. Redis Master/Slave 实践
  5. Z字变换Python解法
  6. Node — 第一天
  7. HTML JS正方形轮播,js,html一个页面里面多个页面轮播
  8. 【LeetCode笔记】剑指 Offer 36. 二叉搜索树与双向链表(Java、二叉树、链表、原地算法)
  9. Python系列之入门篇——HDFS
  10. 区块链必读的书_最好的区块链:5条必读
  11. 视频PPT互动问答丨Oracle Groundbreak亚太巡演2021(中国区)
  12. vue-cli3 中 sockjs-node/info?t=报错 的解决方法
  13. FastReport.Net使用:[17]线(Line)控件使用
  14. 自定义OutputFormat案例实操
  15. uniapp H5 扫码 扫一扫 功能
  16. Redis 哨兵安装-Centos
  17. 听说你还在纠结自己没访问量?成不了“博客专家”?
  18. 焱融科技加入多家行业协会与产业联盟,加速产业互联生态跃迁
  19. Opencascade 帮助手册学习1 Overview
  20. 租房小程序怎么样?租房小程序可以提供哪些价值?

热门文章

  1. 【转】[你必须知道的.NET] 第八回:品味类型---值类型与引用类型(上)-内存有理...
  2. 干货:12个案例教你用Python玩转数据可视化(建议收藏)
  3. 以朋友圈为例,腾讯资深架构师揭秘鹅厂大数据平台是怎样运营的
  4. asp sql 导出 excel_Mysql数据导出到excel基于python
  5. Redis 分布式锁遇到的序列化问题
  6. 一文看懂华为鸿蒙 OS 2.0
  7. 浪费超9000亿美金,数字化转型失败罪魁祸首在DevOps?
  8. 开发指南专题五:JEECG微云快速开发平台代码生成器
  9. json对象合并的方法
  10. 基于css和jQuery实现轮播图