申明

本文部分内容来自List-Based Simulated Annealing Algorithm for Traveling Salesman Problem[1]

如有侵权,请联系删除

引入

模拟退火是用于求解连续函数的极值的随机化算法,由爬山算法优化得来

普通模拟退火对参数值极为敏感,经常要调很久

最近了解到一种进阶版模拟退火,即堆优化模拟退火 LBSA ,全称 List-Based Simulated Annealing ,较于普通的的模拟退火,它对参数的敏感度较低,得到最优解的概率较高,不失为一种优秀的骗分算法

算法过程

预处理

\(LSBA\) 首先要生成初始温度堆,步骤如下:

  1. 生成初始解 \(x\) ,建立温度堆 \(L\) ,定义堆长度 \(L_{\max}\) ,定义初始接受概率 \(p_0\)

  2. 随机生成 \(x\) 的临近解 \(y\) ,如果 \(y\) 优于 \(x\) ,则令 \(x=y\)

  3. 将温度 \(t=\frac { -( f(y) - f(x) ) } { \ln{ p_0} }\) 放入 \(L\) 中

  4. 重复这一过程,直到放满 \(L_{\max}\) 个温度

求解

  1. 初始化温度堆\(L\)

  2. 取出(pop)堆中的最大值\(t_{\max}\)

  3. 随机生成 \(x\) 的临近解 \(y\) ,如果 \(y\) 比 \(x\) 优,则令 \(x=y\),跳至第5步;否则执行第4步

  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\)

  5. 重复3~4步 \(M\) 次

  6. 如果 $c \not = 0 $, 将 \(L\) 中的最大值换为 \(\frac{t}{c}\),清空 \(c\)

  7. 重复2~6步 \(K\) 次


  1. https://www.hindawi.com/journals/cin/2016/1712630/

堆优化模拟退火(List-Based Simulated Annealing|LBSA)的更多相关文章

  1. 模拟退火 Simulated annealing

    模拟退火 Simulated annealing 看看有空把图片完善一下好了 模拟退火算法的一些背景 既然要说模拟退火算法,就应该说一下模拟退火算法的背景,模拟退火算法是局部搜索算法的一种扩展,该算法 ...

  2. 【智能算法】用模拟退火(SA, Simulated Annealing)算法解决旅行商问题 (TSP, Traveling Salesman Problem)

    喜欢的话可以扫码关注我们的公众号哦,更多精彩尽在微信公众号[程序猿声] 文章声明 此文章部分资料和代码整合自网上,来源太多已经无法查明出处,如侵犯您的权利,请联系我删除. 01 什么是旅行商问题(TS ...

  3. uva10986 堆优化单源最短路径(pas)

    var n,m,s,t,v,i,a,b,c:longint;//这道题的代码不是这个,在下面 first,tr,p,q:..]of longint; next,eb,ew:..]of longint; ...

  4. 最短路模板(Dijkstra & Dijkstra算法+堆优化 & bellman_ford & 单源最短路SPFA)

    关于几个的区别和联系:http://www.cnblogs.com/zswbky/p/5432353.html d.每组的第一行是三个整数T,S和D,表示有T条路,和草儿家相邻的城市的有S个(草儿家到 ...

  5. 堆优化的Dijkstra

    SPFA在求最短路时不是万能的.在稠密图时用堆优化的dijkstra更加高效: typedef pair<int,int> pii; priority_queue<pii, vect ...

  6. codeforces 449B Jzzhu and Cities (Dij+堆优化)

    输入一个无向图<V,E>    V<=1e5, E<=3e5 现在另外给k条边(u=1,v=s[k],w=y[k]) 问在不影响从结点1出发到所有结点的最短路的前提下,最多可以 ...

  7. POJ 1511 - Invitation Cards 邻接表 Dijkstra堆优化

    昨天的题太水了,堆优化跑的不爽,今天换了一个题,1000000个点,1000000条边= = 试一试邻接表 写的过程中遇到了一些问题,由于习惯于把数据结构封装在 struct 里,结果 int [10 ...

  8. POJ 2502 - Subway Dijkstra堆优化试水

    做这道题的动机就是想练习一下堆的应用,顺便补一下好久没看的图论算法. Dijkstra算法概述 //从0出发的单源最短路 dis[][] = {INF} ReadMap(dis); for i = 0 ...

  9. Bzoj 2834: 回家的路 dijkstra,堆优化,分层图,最短路

    2834: 回家的路 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 62  Solved: 38[Submit][Status][Discuss] D ...

  10. Dij的堆优化

    #include<algorithm> #include<iostream> #include<cstdio> #include<cstring> #i ...

随机推荐

  1. springboot整合视频点播

    1 //上传视频到阿里云 2 @Override 3 public String uploadAyl(MultipartFile file) { 4 try { 5 //accessKeyId,acc ...

  2. OpenHarmony后代组件双向同步,跨层级传递:@Provide装饰器和@Consume装饰器

     @Provide和@Consume,应用于与后代组件的双向数据同步,应用于状态数据在多个层级之间传递的场景.不同于上文提到的父子组件之间通过命名参数机制传递,@Provide和@Consume摆脱参 ...

  3. IDEA快捷键快速补齐类和对象名

    CTRL+ALT+V  ----------快速补齐 类和对象名 如:   new String("123") 光标放到最后 按下快捷键补齐为红色部分  String s = ne ...

  4. 《深入理解Java虚拟机》读书笔记:虚拟机性能监控与故障处理工具

    一.JDK的命令行 虚拟机性能监控与故障处理工具 工具 1.jps:虚拟机进程状况工具 jps主要用来输出JVM中运行的进程状态信息,它的功能也和ps命令类似:可以列出正在运行的虚拟机进程,并显示虚拟 ...

  5. Windows XP Vmware 无法自适应窗口

    之前在吾爱破解上找到一个 WindowsXP SP3 的精简系统(目前找不到在哪了),自带 VMtools 和 52 破解工具包,很适合 XP 系统下的逆向和病毒分析.目前准备学习一下<恶意代码 ...

  6. spark dstaframe 多字段统计

    val aggCols = List("Pclass","Age","Fare") .map(colName=>functions.a ...

  7. centos8 \CentOS 9 Stream rpm 安装mysql8.0.28

    centos8 rpm 安装mysql8.0.28 检查 检测系统是否自带安装 MySQL 命令如下: rpm -qa | grep mysql 如果如下存在已安装的包,就需要卸载 mysql80-c ...

  8. linux 性能自我学习 ———— cpu 快速定位问题 [六]

    前言 主要介绍一下cpu如何快速定位问题. 正文 cpu 的一些性能指标: 1. cpu 使用率 cpu 使用率描述了非空闲时间占总cpu时间的百分比,根据cpu上运行任务的不同,又被分为用户cpu. ...

  9. 推荐一个计算Grad-CAM的Python库

    前言 类激活图CAM(class activation mapping)用于可视化深度学习模型的感兴趣区域,增加了神经网络的可解释性.现在常用Grad-CAM可视化,Grad-CAM基于梯度计算激活图 ...

  10. vue使用 elementUI中el-upload的遇到的问题总结

    使用场景,使用el-upload上传文件,选择文件后不立即上传到服务器上,点击提交按钮时与其他form表单数据一起提交,类似的需求,相信有很多小伙伴遇到,可能也会遇到跟我一起的问题,在这里记录一下 & ...