模拟退火 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的更多相关文章

  1. [学习笔记] 模拟退火 (Simulated Annealing)

    真没想到这东西真的在考场上用到了...顺便水篇blog以示诈尸好了(逃 模拟退火算法 模拟退火是一种随机化算法, 用于求函数的极值qwq 比如给出一个问题, 我们要求最优解的值, 但是可能的方案数量极 ...

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

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

  3. Monte Carlo simulated annealing

    蒙特·卡罗分子模拟计算 使用蒙特·卡罗方法进行分子模拟计算是按照以下步骤进行的: 1. 使用随机数发生器产生一个随机的分子构型. 2. 对此分子构型的其中粒子坐标做无规则的改变,产生一个新的分子构型. ...

  4. BZOJ.3680.吊打XXX(模拟退火/爬山算法)

    题目链接 一个比较好的解释? 模拟退火(Simulated Annealing,SA): (1)初始化一个温度(充分大).初始解状态S.每个T值的迭代次数. (2)对i=1,...,L,做(3)至(7 ...

  5. 使用模拟退火算法优化 Hash 函数

    背景 现有个处理股票行情消息的系统,其架构如下: 由于数据量巨大,系统中启动了 15 个线程来消费行情消息.消息分配的策略较为简单:对 symbol 的 hashCode 取模,将消息分配给其中一个线 ...

  6. 六.随机神经网络Boltzmann(玻尔兹曼机)

    Hopfield网络具有最优计算功能,然而网络只能严格按照能量函数递减方式演化,很难避免伪状态的出现,且权值容易陷入局部极小值,无法收敛于全局最优解. 如果反馈神经网络的迭代过程不是那么死板,可以在一 ...

  7. 最优化算法——常见优化算法分类及总结

    之前做特征选择,实现过基于群智能算法进行最优化的搜索,看过一些群智能优化算法的论文,在此做一下总结. 在生活或者工作中存在各种各样的最优化问题,比如每个企业和个人都要考虑的一个问题"在一定成 ...

  8. Vector Bin Packing 华为讲座笔记

    Vector bin packing:first fit / best fit / grasp 成本:性价比 (先验) 设计评价函数: evaluation function:cosine simil ...

  9. 模拟退火算法(SA)求解TSP 问题(C语言实现)

    这篇文章是之前写的智能算法(遗传算法(GA).粒子群算法(PSO))的补充.其实代码我老早之前就写完了,今天恰好重新翻到了,就拿出来给大家分享一下,也当是回顾与总结了. 首先介绍一下模拟退火算法(SA ...

随机推荐

  1. AcWing 1275. 最大数

    #include<bits/stdc++.h> #define N 1000100 using namespace std; struct node { int l,r; int data ...

  2. Java实验项目三——职工类对象数组按照职工生日排序

    Program: 修改项目三(1)中的第3题,实现比较方法,将对象数组的数据按照生日的大小给职工排序. Description:令日期类MyDate和员工类Worker类实现接口Comparable, ...

  3. mac 下彻底卸载node和npm

    以下链接可供参考: https://segmentfault.com/a/1190000007445643 https://www.cnblogs.com/ChenGuangW/p/11398367. ...

  4. MySQL服务器 IO 100%的分析与优化方案

    前言 压力测试过程中,如果因为资源使用瓶颈等问题引发最直接性能问题是业务交易响应时间偏大,TPS逐渐降低等.而问题定位分析通常情况下,最优先排查的是监控服务器资源利用率,例如先用TOP 或者nmon等 ...

  5. EXCEL:宏 考场考号打印

    Sub addwork() Rem 当前宏是根据学生数量 .每考场人数计算工作表数Dim i As IntegerRem xx为每个考场的人数Rem yy为当前专业标记Rem mm为当前专业考生人数R ...

  6. c语言:DEV-C++5.10调试设置

    DEV-C++调试设置方法:默认不能调试,打开调试的方法: 1.点击"工具"菜单--编译选项--"代码生成/优化"--连接器--"产生调试信息&quo ...

  7. flex布局制作自适应网页

    网页布局是css的一个重点应用.传统的布局都是依赖display.position.float属性来实现的,但是特殊布局就不易实现,如垂直居中. 01 flex布局是什么?‍ Flex 是 Flexi ...

  8. P6295 有标号 DAG 计数

    P6295 有标号 DAG 计数 题意 求 \(n\) 个点有标号弱联通 DAG 数量. 推导 设 \(f_i\) 表示 \(i\) 个点有标号 DAG 数量(不保证弱联通),有: \[f(i)=\s ...

  9. 【贪心+排序】凌乱的yyy / 线段覆盖 luogu-1803

    题目描述 现在各大oj上有n个比赛,每个比赛的开始.结束的时间点是知道的. yyy认为,参加越多的比赛,noip就能考的越好(假的) 所以,他想知道他最多能参加几个比赛. 由于yyy是蒟蒻,如果要参加 ...

  10. odoo14开发之脚本自动生成代码

    通过解析excel,自动生成odoo代码实现 一.首先做一个字段配置的excel模板 第二步.读取excel里面的模板,并写入到txt文件里 逻辑代码: # -*- coding: utf-8 -*- ...