模拟退火 Simulated annealing
模拟退火 Simulated annealing
看看有空把图片完善一下好了
模拟退火算法的一些背景
既然要说模拟退火算法,就应该说一下模拟退火算法的背景,模拟退火算法是局部搜索算法的一种扩展,该算法的思想最早由Metropolis在1953年提出,然后又由其他人在1983年成功将模拟退火算法用作求解组合优化问题,将其作为一种可以有效求解复杂组合优化问题的一种有效方法
模拟退火算法顾名思义,就是根据复杂组合优化问题和现实中的固体退火的过程的相似点建立联系得到的,收到固体退火思想的影响,Kirkpatrick等人才意识到组合优化问题与固体退火过程的类似性,将组合优化问题类比成固体退火的过程,从而提出了模拟退火算法
模拟退火算法是一种基于概率的算法(是基于Monte-Carlo迭代求解策略的一种随机寻优算法),将固体的温度加到很高的温度,然后再让其慢慢冷却,在固体温度增加的时候,固体内部粒子随温度的上升会变成无序状态,固体的内能增大,在慢慢冷却的时候,固体内部粒子慢慢趋于有序的状态,内部粒子在每个温度点都达到平衡态,最后在常温时达到基态,固体的内能此时到达最小
组合优化过程和固体退火过程进行对比
在固体退火过程中,物理系统中的一个状态,就等同于组合优化问题中的组合优化问题的解
在固体退火过程中,状态的能量,就等同于组合优化问题中的解的指标函数
在固体退火过程中,能量最低状态,就等同于组合优化问题中的最优解
在固体退火过程中,温度,就等同于组合优化问题中的控制参数
模拟退火算法的描述
模拟退火算法的描述如下
第一步,随机选择一个解i,此时k=0,t0=Tmax(初始温度),计算指标函数f(i)
第二步,如果满足结束条件,则输出结果并结束
第三步,如果在该温度内达到了平衡条件,则tk+1=Drop(tk),k=k+1
第四步,从i的邻域N(i)中随机选择一个解j,计算指标函数f(j),如果f(j)<f(i),则i=j,f(i)=f(j),然后回到第三步
第五步,计算pt(i=>j)=exp(-f(j)-f(i)/t),如果pt(i=>j)>Random(0,1),则i=j,f(i)=f(j),然后回到第三步
最后结束
三个重要的条件
在上面模拟算法中没有提及的有三个重要的条件,这三个条件很关键
第一个是初始的温度必须足够高
第二个是在每个温度下,状态的交换必须足够充分
第三,温度T的下降必须足够缓慢
参数的确定
在模拟退火的过程中,给定温度下状态的转移可以视为是一个马尔科夫链,而且我们在使用模拟算法的时候要对一些参数或准则进行选取
在使用的时候的需要的参数和准则有:
①初始温度
②温度的衰减函数,即温度的下降方法
③算法的终止准则,用终止温度或者终止条件给出
④每个温度下的马尔科夫链的长度
寻找合适的初始温度
首先,给定一个希望的初始接受概率P0,给定一个较低的初始温度t0,然后,随机产生一个状态序列,并计算该序列的接受率(接受的状态数/产生的状态总数),如果接受率大于给定的初始接受概率P0,则直接结束,否则,提高温度,更新t0,然后继续上一步,直到结束,其中更新t0可以采用每次加倍的方法,也可以采用每次加固定值的方法
温度下降的方法
常用的温度下降方法有三种:
①等比例下降
②等值下降
③基于距离参数的下降方法
其中①和②都是独立于具体问题的方法,③是与具体问题有关的温度下降方法
每一种温度下的停止准则
一般有以下几种常用的停止准则:
①固定长度方法
②基于接受率的停止准则
算法的终止原则
一般有以下几种确定算法的终止的方法:
①零度法
②循环总控制法
③无变化控制法
④接受概率控制法
⑤领域平均概率控制法
⑥相对误差估计法
具体有空完善一下内容

模拟退火 Simulated annealing的更多相关文章
- [学习笔记] 模拟退火 (Simulated Annealing)
真没想到这东西真的在考场上用到了...顺便水篇blog以示诈尸好了(逃 模拟退火算法 模拟退火是一种随机化算法, 用于求函数的极值qwq 比如给出一个问题, 我们要求最优解的值, 但是可能的方案数量极 ...
- 【智能算法】用模拟退火(SA, Simulated Annealing)算法解决旅行商问题 (TSP, Traveling Salesman Problem)
喜欢的话可以扫码关注我们的公众号哦,更多精彩尽在微信公众号[程序猿声] 文章声明 此文章部分资料和代码整合自网上,来源太多已经无法查明出处,如侵犯您的权利,请联系我删除. 01 什么是旅行商问题(TS ...
- Monte Carlo simulated annealing
蒙特·卡罗分子模拟计算 使用蒙特·卡罗方法进行分子模拟计算是按照以下步骤进行的: 1. 使用随机数发生器产生一个随机的分子构型. 2. 对此分子构型的其中粒子坐标做无规则的改变,产生一个新的分子构型. ...
- BZOJ.3680.吊打XXX(模拟退火/爬山算法)
题目链接 一个比较好的解释? 模拟退火(Simulated Annealing,SA): (1)初始化一个温度(充分大).初始解状态S.每个T值的迭代次数. (2)对i=1,...,L,做(3)至(7 ...
- 使用模拟退火算法优化 Hash 函数
背景 现有个处理股票行情消息的系统,其架构如下: 由于数据量巨大,系统中启动了 15 个线程来消费行情消息.消息分配的策略较为简单:对 symbol 的 hashCode 取模,将消息分配给其中一个线 ...
- 六.随机神经网络Boltzmann(玻尔兹曼机)
Hopfield网络具有最优计算功能,然而网络只能严格按照能量函数递减方式演化,很难避免伪状态的出现,且权值容易陷入局部极小值,无法收敛于全局最优解. 如果反馈神经网络的迭代过程不是那么死板,可以在一 ...
- 最优化算法——常见优化算法分类及总结
之前做特征选择,实现过基于群智能算法进行最优化的搜索,看过一些群智能优化算法的论文,在此做一下总结. 在生活或者工作中存在各种各样的最优化问题,比如每个企业和个人都要考虑的一个问题"在一定成 ...
- Vector Bin Packing 华为讲座笔记
Vector bin packing:first fit / best fit / grasp 成本:性价比 (先验) 设计评价函数: evaluation function:cosine simil ...
- 模拟退火算法(SA)求解TSP 问题(C语言实现)
这篇文章是之前写的智能算法(遗传算法(GA).粒子群算法(PSO))的补充.其实代码我老早之前就写完了,今天恰好重新翻到了,就拿出来给大家分享一下,也当是回顾与总结了. 首先介绍一下模拟退火算法(SA ...
随机推荐
- centos 8 chown命令详解
chown命令简介 chown将指定文件的拥有者改为指定的用户或组,用户可以是用户名或者用户ID:组可以是组名或者组ID: 文件是以空格分开的要改变权限的文件列表,支持通配符. 系统管理员经常使用ch ...
- 小程序之app.json not found
起因 最近在部署几款小程序时,发现ext.json文件会被忽略不上传,查了一下资料发现原来是需要升级开发者工具了. 没想到升级以后,再开发项目时,就报错 app.json not found 解决方法 ...
- c语言的自动类型转换(转)
一.自动转换遵循以下规则: 若参与运算量的类型不同,则先转换成同一类型,然后进行运算. 转换按数据长度增加的方向进行,以保证精度不降低.如int型和long型运算时,先把int量转成long型后再进行 ...
- 一文看懂HTTPS、证书机构(CA)、证书、数字签名、私钥、公钥(转)
说到https,我们就不得不说tls/ssl,那说到tls/ssl,我们就不得不说证书机构(CA).证书.数字签名.私钥.公钥.对称加密.非对称加密.这些到底有什么用呢,正所谓存在即合理,这篇文章我就 ...
- 【重学Java】多线程进阶(线程池、原子性、并发工具类)
线程池 线程状态介绍 当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态.线程对象在不同的时期有不同的状态.那么Java中的线程存在哪几种状态呢?Java中的线程 状态被定 ...
- SpringBoot自动装配原理之Configuration以及@Bean注解的使用
Configuration以及Bean注解的使用 该知识点在Spring中应该学过,没有学过或者遗忘的的朋友需要预习或温习前置知识点.SpringBoot其实就是Spring的进一步简化,所以前置知识 ...
- 使用 Java 和 Maven (JBake) 生成静态网站
使用 JBake("mvn generate-resources")构建您的静态网站或博客.使用布局.宏和数据文件. 我们迁移了整个www.optaplanner.org网站(13 ...
- PYTHON2.7安装 pyinstaller出错,不能正常安装
解决方法: pip2.7 install pyinstaller==3.4
- Nacos源码分析-事件发布机制
温馨提示: 本文内容基于个人学习Nacos 2.0.1版本代码总结而来,因个人理解差异,不保证完全正确.如有理解错误之处欢迎各位拍砖指正,相互学习:转载请注明出处. Nacos的服务注册.服务变更等功 ...
- CentOS更换网易yum源
最新内容和地址参见http://mirrors.163.com/.help/centos.html 1 首先备份/etc/yum.repos.d/CentOS-Base.repo mv /etc/yu ...