智能优化算法学习笔记(2)–模拟退火算法(SA)

这篇具有很好参考价值的文章主要介绍了智能优化算法学习笔记(2)–模拟退火算法(SA)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

模拟退火算法概述

>模拟退火算法(Simulated Annealing,简称SA)的思想最早是由Metropolis等提出的。其出发点是基于物理中固体物质的退火过程与一般的组合优化问题之间的相似性。模拟退火算法是一种通用的优化算法,其物理退火过程由以下三部分组成:

>加温过程。其目的是增强粒子的热运动,使其偏离平衡位置。当温度足够高时,固体将熔为液体,从而消除系统原先存在的非均匀状态。

>等温过程。对于与周围环境交换热量而温度不变的封闭系统,系统状态的自发变化总是朝自由能减少的方向进行的,当自由能达到最小时,系统达到平衡状态。

>冷却过程。使粒子热运动减弱,系统能量下降,得到晶体结构。

>加温过程对算法设定初温,等温过程对应算法的Metropolis抽样过程,冷却过程对应控制参数的下降。这里能量的变化就是目标函数,我们得到的最优解就是能量最低态。其中Metropolis准则是SA算法收敛于全局最优解的关键所在,Metropolis准则以一定的概率接受恶化解,这样就使算法跳离局部最优的陷阱。

模拟退火算法在优化问题的时候,采用的就是类似于物理退火让固体内部粒子收敛到一个能量最低状态的过程,实现算法最终收敛到最优解的目的。

物理退火过程和模拟退火算法的基本概念对照表

                  物理退火过程                    模拟退火算法
                物体内部的状态           问题的解空间(所有可行解)
                状态的能量           解的质量(适应度函数值)
                温度           控制参数
                熔解过程           设定初始温度
                温水冷却过程         控制参数的修改(温度参数的下降)
                状态的转移            解在领域中的变化
                能量最低状态            最优解

Metropolis准则

Metropolis准则定义了物体在某一温度 T 下从状态 i 转移到状态 j 的概率改进模拟退火算法,智能优化算法,启发式算法,如公式所示,

改进模拟退火算法,智能优化算法,启发式算法

其中e为自然对数,E(i)E(j)分别表示固体在状态i和状态j下的内能,改进模拟退火算法,智能优化算法,启发式算法,表示内能的增量,K是玻尔兹曼常数。

在某个温度T下,系统处于某种状态,由于粒子的运动,系统的状态会发生变化,并且导致系统能量的变化。如果变化是朝着减少系统能量的方向进行的,那么就接受该变化,否则以一定的概率接受这种变化。另一方面,从改进模拟退火算法,智能优化算法,启发式算法的公式可以看到,在同一温度下,导致能量增加的增加量改进模拟退火算法,智能优化算法,启发式算法越大,接受的概率越小;而且随着温度T的降低,接受系统能量增大的变化的概率将会越小。

模拟退火算法流程

1. 初始化:取初始温度T0足够大,令T = T0,任取初始解S1

2. 对当前温度T,重复第 (3) ~ (6) 步。

3. 对当前解S1随机扰动产生一个新解S2。

4. 计算S2的增量 df = f(S2) - f(S1),其中  f(S1) S1 的代价函数。

5. 若df < 0,则接受S2作为新的当前解,即S1 = S2; 否则计算S2的接受概率exp(-df/T)即随机产生(0,1)区间上均匀分布的随机数rand,若exp(-df/T) > rand,也接受S2作为新的当前解S1 = S2,否则保留当前解S1

6. 如果满足终止条件Stop,则输出当前解S1为最优解,结束程序,终止条件Stop通常取为在连续若干个Metropolis链中新解S2都没有被接受时终止算法或者是设定结束温度;否则按衰减函数衰减T后返回第(2)步。

模拟退火算法在求解最优化问题的时候,算法的基本流程图和伪代码如图所示:

改进模拟退火算法,智能优化算法,启发式算法

从流程图中可以看到模拟退火具有两层循环,内循坏模拟的是在给定的温度下系统达到热平衡的过程。在该循环中,每次都从当前解 的领域中随机找出一个新解 j,然后按照Metropolis准则概率地接受新解。算法中的random(0,1)是指在区间[0,1]上按均匀分布产生一个随机数,而所谓的内层达到热平衡也是一个笼统的说法,可以定义为循环一定的代数,或者基于接受率定义平衡等。算法的外层循环是一个降温的过程,当在一个温度下达到平衡后,开始外层的降温,然后在新的温度下重新开始内循环。降温的方法可以根据具体问题具体设计,而且算法流程图中给出的初始温度T也需要算法的使用者根据具体的问题而制定。   

模拟退火算法在求解最优化问题的时候,涉及以下几个方面的基本要素。

1.初始温度

初始温度改进模拟退火算法,智能优化算法,启发式算法的设置是影响模拟退火算法全局搜索性能的重要因素之一。实验表明,初温越大,获得高质量解的几率越大,但花费的计算时间将越多。因此,初温的确定应折中考虑优化质量和优化效率,常用方法包括以下几种。

>均匀抽样一组状态,以各状态目标值的方差为初温;

>随机产生一组状态,确定两两状态间的最大目标值差改进模拟退火算法,智能优化算法,启发式算法,然后依据差值,利用一定的函数确定初温。例如,改进模拟退火算法,智能优化算法,启发式算法,其中改进模拟退火算法,智能优化算法,启发式算法为初始接受概率;

>利用经验公式给出初始温度。

2.领域函数

领域函数(状态产生函数)应尽可能保证产生的候选解遍布全部解空间,通常由两部分组成,即产生候选解的方式和候选解产生的概率分布。候选解一般采用按照某一概率密度函数对解空间进行随机采样来获得。概率分布可以是均匀分布、正态分布、指数分布等。

3.接受概率

指从一个状态改进模拟退火算法,智能优化算法,启发式算法(一个可行解)向另一个状态改进模拟退火算法,智能优化算法,启发式算法(另一个可行解)的转移概率,通俗的理解是接受一个新解为当前解的概率。它与当前的温度参数改进模拟退火算法,智能优化算法,启发式算法有关,随温度下降而减少,一般采用Metropolis准则。 

4.冷却控制

指从某一较高温状态改进模拟退火算法,智能优化算法,启发式算法向较低温状态冷却时的降温管理表,或者说降温方式。假设时刻k的温度用改进模拟退火算法,智能优化算法,启发式算法来表示,则经典模拟退火算法的降温方式为:

                                                改进模拟退火算法,智能优化算法,启发式算法

而快速模拟退火算法的降温方式为:

                                                改进模拟退火算法,智能优化算法,启发式算法

这两种方式都能够使得模拟退火算法收敛于全局最小点。

5.内层平衡

内层平衡也称Metropolis抽样稳定准则,用于决定在各温度下产生候选解的数目。

常用的抽样稳定准则包括以下几项。

>检验目标函数的均值是否稳定;

>连续若干步的目标值变化较小;

>预先设定的抽样数目,内循环代数。

6.终止条件

算法终止准则,常用的包括以下几项。

>设置终止温度的阈值;

>设置外循环迭代次数;

>算法搜索到的最优值连续若干步保持不变;

>检验系统熵是否稳定。

模拟退火算法的特点

>与遗传算法、粒子群优化算法和蚁群算法等不同,模拟退火算法不属于群优化算法,不需要初始化种群操作。

>收敛速度较慢。

>温度管理、退火速度等对寻优结果均有影响。

模拟退火算法代码示例

以下是一个简单的模拟退火算法的 Python 代码示例:

import math
import random

# 目标函数
def obj_func(x, y):    
    return math.sin(x) + math.cos(y)

# 初始温度
init_temp = 1000.0

# 终止温度
end_temp = 1e-8

# 冷却速率
cool_rate = 0.99

# 初始解
x = random.uniform(-10, 10)
y = random.uniform(-10, 10)

# 当前温度
cur_temp = init_temp

# 主循环
while cur_temp > end_temp:
    
    # 随机生成新解    
    new_x = x + random.uniform(-1, 1)    
    new_y = y + random.uniform(-1, 1)  
  
    # 计算新解的目标函数值    
    new_obj = obj_func(new_x, new_y)    

    # 计算能量差    
    delta_e = new_obj - obj_func(x, y)    

    # 判断是否接受新解    
    if delta_e < 0 or math.exp(-delta_e / cur_temp) > random.random():        
        x, y = new_x, new_y    

    # 降温    
    cur_temp *= cool_rate

# 输出最终解
print("x =", x, "y =", y, "obj =", obj_func(x, y))

在该示例代码中,obj_func 函数表示目标函数,init_temp 表示初始温度,end_temp 表示终止温度,cool_rate 表示冷却速率,xy 表示当前解,cur_temp 表示当前温度。在主循环中,每次随机生成一个新解,计算能量差,然后根据一定的概率接受新解或保持原解。在接受新解时,更新当前解,否则保持原解不变。随着温度的不断降低,算法逐渐收敛到全局最优解。

参考文献:计算智能 张军文章来源地址https://www.toymoban.com/news/detail-751791.html

到了这里,关于智能优化算法学习笔记(2)–模拟退火算法(SA)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数学建模(三):模拟退火算法(SA)

    1、 算法简介 模拟退火算法(simulated annealing,SA)来源于固体退火原理,是一种基于概率的算法。 模拟退火算法(SA)来源于固体退火原理,是一种基于概率的算法。将固体加温至充分高的温度,再让其徐徐冷却,加温时,固体内部粒子随温升变为无序状,内能增大,分子和原

    2023年04月17日
    浏览(66)
  • Matlab数学建模算法之模拟退火算法(SA)详解

    🔗 运行环境:Matlab 🚩 撰写作者:左手の明天 🥇 精选专栏:《python》 🔥  推荐专栏:《算法研究》 🔐####  防伪水印——左手の明天 #### 🔐 💗 大家好🤗🤗🤗,我是 左手の明天 !好久不见💗 💗今天分享 matlab数学建模算法 —— 模拟退火算法 💗

    2024年01月16日
    浏览(46)
  • 97基于matlab的改进的带记忆的模拟退火算法求解TSP问题

    基于matlab的改进的带记忆的模拟退火算法求解TSP问题,采用多普勒型降温曲线描述迭代过程,在传统算法的基础上增加记忆功能,可测试中国31/64/144以及att48城市的数据,也可自行输入数据进行测试,测试结果基本达到当前最优水平。duoci.m为主文件。数据可更换自己的,程序

    2024年02月05日
    浏览(53)
  • 数学建模之模拟退火法(SA)

    模拟退火算法(SA)是一种模拟物理退火过程而设计的优化算法。 它的基本思想最早在1953年就被Metropolis提出,但直到1983年,Kirkpatrick等人才设计出真正意义上的模拟退火算法并进行应用。 模拟退火算法采用类似于 物理退火 的过程。先在一个高温状态下,然后逐渐退火,在

    2024年01月17日
    浏览(43)
  • matlab智能算法之模拟退火算法

    2023年04月29日
    浏览(48)
  • 【智能算法1】模拟退火算法_Python实现

    1.1 固体退火的原理 加热使得固体融化,然后缓慢地降低温度,以此来让固体内部的粒子排布更加均匀。 分为四个阶段: 升温阶段、降温阶段、等温阶段、达到目标温度退火完成 等温阶段就是在塑造形状。 1.2 Metropolis准则 概率接受新状态,称为Metropolis准则。 假设前一状态

    2024年02月05日
    浏览(36)
  • 模拟退火算法与遗传算法求解多目标优化问题的算法实现(数学建模)

    模拟退火算法是一种全局优化算法,解决的问题通常是找到一个最小化(或最大化)某个函数的全局最优解。它通过模拟物理退火的过程来搜索解空间,在开始时以一定的温度随机生成初始解,然后一步步降低温度,同时在当前解的周围随机搜索新的解,并根据一定概率接受

    2024年02月02日
    浏览(57)
  • 【人工智能】—局部搜索算法、爬山法、模拟退火、局部剪枝、遗传算法

    在某些规模太大的问题状态空间内,A*往往不够用 问题空间太大了 无法访问 f 小于最优的所有状态 通常,甚至无法储存整个边缘队列 解决方案 设计选择更好的启发式函数 Greedy hill-climbing (fringe size = 1) Beam search (limited fringe size) 瓶颈:内存不足,无法存储整个边缘队列 爬山搜

    2023年04月22日
    浏览(52)
  • 超详细 | 模拟退火-粒子群自适应优化算法及其实现(Matlab)

    作者在前面的文章中介绍了经典的优化算法——粒子群算法(PSO),各种智能优化算法解决问题的方式和角度各不相同,都有各自的适用域和局限性,对智能优化算法自身做的改进在算法性能方面得到了一定程度的提升,但算法缺点的解决并不彻底。 为了克服使用单一智能优化

    2024年02月05日
    浏览(74)
  • 25.6 matlab里面的10中优化方法介绍——模拟退火算法(matlab程序)

    1. 简述        相信没有相关物理知识背景的小伙伴看到“退火”二字是一脸懵逼的...固体的退火过程指的是将固体加热至足够高的温度,再使其慢慢冷却的过程。在加热过程中,原本有序排列的内部粒子开始无序运动,此时固体的内能不断增大;而在降温过程中,粒子的排

    2024年02月15日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包