• 模拟退火 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可以采用每次加倍的方法,也可以采用每次加固定值的方法

    温度下降的方法

    常用的温度下降方法有三种:

    ①等比例下降

    ②等值下降

    ③基于距离参数的下降方法

    其中①和②都是独立于具体问题的方法,③是与具体问题有关的温度下降方法

    每一种温度下的停止准则

    一般有以下几种常用的停止准则:

    ①固定长度方法

    ②基于接受率的停止准则

    算法的终止原则

    一般有以下几种确定算法的终止的方法:

    ①零度法

    ②循环总控制法

    ③无变化控制法

    ④接受概率控制法

    ⑤领域平均概率控制法

    ⑥相对误差估计法

    具体有空完善一下内容

    感谢观看,文笔有限,博客不出彩,还请多多见谅
  • 相关阅读:
    Web前端 --- jQuery
    关于前端 jQuery 面试的知识点
    面试官:讲讲mysql表设计要注意啥
    Python中的单例模式的几种实现方式的及优化
    HTTP协议【详解】——经典面试题
    Web前端 --- BOM和DOM
    基于css文件编写一个简单的html前端页面
    Web前端 --- JavaScript
    Linux 命令(一) find&grep文件查找命令
    线程池
  • 原文地址:https://www.cnblogs.com/jokingremarks/p/14364997.html
Copyright © 2020-2023  润新知