超详细 | 模拟退火算法及其MATLAB实现
模拟退火算法(simulated annealing,SA)是20世纪80年代初期发展起来的一种求解大规模组合优化问题的随机性方法。它以优化问题的求解与物理系统退火过程的相似性为基础,利用Metropolis算法并适当地控制温度的下降过程实现模拟退火,从而达到求解全局优化问题的目的。
它具有适用范围广 ,求得全局最优解的可靠性高 ,算法简单 ,便于实现等优点。模拟退火算法在搜索策略上与传统的随机搜索方法不同 ,它不仅引入了适当的随机因素 ,而且还引入了物理系统退火过程的自然机理。 这种自然机理的引入使模拟退火算法在迭代过程中不仅接受使目标函数值变“好”的试探点 ,而且还能够以一定的概率接受使目标函数值变“差”的试探点,接受概度随着温度的下降逐渐减小。模拟退火算法的这种搜索策略有利于避免搜索过程因陷入局部最优解而无法自拨的弊端 ,有利于提高求得全局最优解的可靠性。
本文将对模拟退火算法原理进行讲解并给出其代码实现。
00 文章目录
1 模拟退火算法原理
2 问题导入
3 MATLAB程序实现
4 展望
01 模拟退火算法原理
模拟退火算法最早由 Kirkpatrick 等应用于组合优化领域,它是基于蒙特卡罗迭代求解策略的一种随机寻优算法,它借鉴了物理上金属退火的原理,即将热力学的理论套用到统计学上,其出发点是基于物理中固体物质的退火过程与一般组合优化问题之间的相似性。
SA算法的基本思想是从选定的初始解开始,在借助于控制参数t递减时产生的一系列Markov链中,利用一个新解产生装置和接受准则,重复进行“产生新解 一计算目标函数差一判断是否接受新解一接受或舍弃新解”,不断对当前解迭代,从而使目标函数最优的执行过程。由于固体退火必须缓慢降温,才能使固体在每一温度下都达到热平衡,最终趋于平衡状态。因此,控制参数t的值必须缓慢衰减,才能确保模拟退火算法最终趋于优化问题的整体最优解。
模拟退火算法结合概率突跳特性在解空间中随机寻找目标函数的全局最优解,即局部最优解能概率性地跳出并最终趋于全局最优。模拟退火算法是一种通用的优化算法,理论上算法具有概率的全局优化性能。
其求解步骤如下:
(1) 从可行解空间中任选一初始状态x0,计算其目标函数值f(x0),并选择初始控制温度T0和马尔可夫链的长度;
(2) 在可行解空间中产生一个随机扰动,用状态产生函数产生一个新状态x1,计算其目标函数值f(x1);
(3) 根据状态接受函数判断是否接受:如果f(x1)<f(x0),则接受新状态x1为当前状态,否则按Metropolis准则判断是否接受x1,若接受,则令当前状态等于x1,若不接受,则令当前状态等于x0;
(4) 根据某个收敛准则,判断抽样过程中是否终止,是则转5,否则转2
(5) 按照某个温度冷却方案降低控制温度T;
(6) 根据某个收敛准则,判断退火是否终止,是则转7,否则转2;
(7) 当前解作为最优解输出;
02 问题导入
引入一个多峰的非线性函数来验证SA算法的性能,函数如下:
其图像如下:
其极限位置是在(0,0)附近取得极大值,极大值为1.0054
03 MATLAB程序实现
按照算法的求解步骤,其部分主程序如下:
完整程序可在评论区或私信我你的邮箱,我看到了会发你
执行程序后得到如下结果
由于模拟退火的迭代机制与前面介绍过的算法不同,因此通常模拟退火算法迭代次数是很大的,但由于它的比较方式是两两比较,因此迭代速度是很快的。
04 展望
4.1 传统模拟退火算法局限性
虽然模拟退火算法存在有限度地接受劣解、可以跳出局部最优解、原理简单、使用灵活、适合求解出优化问题的全局最优或近似全局最优解等优点,但它明显地存在以下缺点:
(1)求解时间太长。在变量多、目标函数复杂时, 为了得到一个好的近似解,控制参数T需要从一个较大的值开始,并在每一个温度值T下执行多次 Metropolis算法,因此迭代运算速度慢。
(2)温度T的初值和减小步长较难确定。如果T的初值选择较大,减小步长太小,虽然最终能得到较好的解,但算法收敛速度太慢;如果T的初值选择较小, 减小步长过大,很可能得不到全局最优解。
(3)搜索过程中由于执行概率接受环节而遗失当前遇到的最优解。
4.2 模拟退火算法改进[1]
模拟退火算法理论上是用一个马尔科夫链描述模拟退火算法的变化过程,因此具有全局最优性。实际应用中的模拟退火算法是一个启发式算法。它有诸多的参数需要调整,如起始温度,温度下降的方案、固定温度式的迭代 长度及终止规则等,这样就需要人为地调整。
在确保一定要求的优化质量基础上,提高模拟退火算法的搜索效率(时间性能),是对SA算法进行改进的主要内容。可行的方案包括:
(1)增加升温或重升温过程。在算法进程的适当时机,将温度适当提高,从而可激活各状态的接受概率,以调整搜索进程中的当前状态,避免算法在局部极小解处停滞不前。
(2)增加记忆功能。为避免搜索过程中由于执行概率接受环节而遗失当前遇到的最优解,可通过增加存储环节,将“Best So Far”的状态记忆下来。
(3)增加补充搜索过程。即在退火过程结束后,以搜索到的最优解为初始状态,再次执行模拟退火过程或局部趋化性搜索。
(4)对每一当前状态,采用多次搜索策略,以概率接受区域内的最优状态,而非标准SA的单次比较方 式。
(5)结合其他搜索机制的算法,如遗传算法、混沌搜索等。
参考文献
[1]朱颢东,钟勇.一种改进的模拟退火算法[J].计算机技术与发展,2009,19(06):32-35.
另:如果有伙伴有待解决的优化问题(各种领域都可),可以发我,我会选择性的更新利用优化算法解决这些问题的文章。
如果这篇文章对你有帮助或启发,可以点击右下角的赞(ง •̀_•́)ง(不点也行),若有定制需求,可私信作者。
相关文章:

超详细 | 模拟退火算法及其MATLAB实现
模拟退火算法(simulated annealing,SA)是20世纪80年代初期发展起来的一种求解大规模组合优化问题的随机性方法。它以优化问题的求解与物理系统退火过程的相似性为基础,利用Metropolis算法并适当地控制温度的下降过程实现模拟退火,从而达到求解…...

在线餐饮油烟实时监测系统的设计与实现
安科瑞 华楠 摘 要:为了解决传统油烟检测方法中成本高、效率低、实时性差等问题,设计开发了一种在线油烟实时监测系统;系统由采集、通讯、服务器和用户交互四个模块组成;采集模块采集油烟数据,通过GPRS通讯技术将数据发…...
7-2 凯撒密码 (20分)
7-2 凯撒密码 (20分) 为了防止信息被别人轻易窃取,需要把电码明文通过加密方式变换成为密文。输入一个以回车符为结束标志的字符串(少于80个字符),再输入一个整数offset,用凯撒密码将其加密后输出。恺撒密码是一种简单…...
LeetCode_贪心算法_中等_763.划分字母区间
目录 1.题目2.思路3.代码实现(Java) 1.题目 给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍…...

【算法提高:动态规划】1.5 状态压缩DP TODO
文章目录 状态压缩DP例题列表棋盘式1064. 小国王⭐🐂(好题!)做题套路总结 327. 玉米田(好题!🐂 和1064. 小国王差不多的题目)292. 炮兵阵地(和上面两道题差不多ÿ…...

建网站一般使用Windows还是liunx好?
建网站一般使用Windows还是liunx好? 1;服务器配置比较低时,最好使用linux系统。 对于一个电脑新手,刚开始做网站时,都会选择入门级的服务器,我刚开始做网站时,就是这样的。我购买了一台入门级服…...

NodeJs后端项目使用docker打包部署
docker安装看之前的文章 默认已经安装好docker并且配置没有问题 拉取项目 https://gitee.com/coder-msc/docker-node 本地跑一个看看 pnpm install pnpm start 本地访问 http://localhost:1301/getname?name%E5%93%88%E5%88%A9%E6%B3%A2%E7%89%B9项目整个上传服务器 查看…...

ARM单片机中断处理过程解析
前言 中断,在单片机开发中再常见不过了。当然对于中断的原理和执行流程都了然于胸,那么对于ARM单片机中断的具体处理行为,你真的搞清楚了吗? 今天来简单聊一聊,ARM单片机中断处理过程中的具体行为是什么样的…...
关于SEDEX会员与平台的相关问题汇总
【关于SEDEX会员与平台的相关问题汇总】 01.会员资格有效期是多久? Sedex会员资格有效期为12个月,您也可以选择更长期的会员资格。您支付会员年费时,在“订阅信息”框下的“延长订阅期限”中输入年数,即可获得更长的会员资格时效。…...

解读Spring-context的property-placeholder
在spring中,如果要给程序定义一些参数,可以放在application.properties中,通过<context:property-placeholder>加载这个属性文件,然后就可以通过value给我们的变量自动赋值,如果你们的程序可能运行在多个环境中&…...

【Rust】枚举类型创建单链表以及常见的链表操作方法
目录 单链表 用枚举表达链表 枚举enum Box容器 创建节点 1. 创建并打印 2. match 匹配 3. 节点初始化 4.节点嵌套 追加节点 1. 尾插法 2. 链表追加方法 3. 头插法 4. 改写成单链表方法 遍历链表 1. 递归法 2. 递推法 3. 改写成单链表方法 自定义Display tr…...

Excel 两列数据中相同的数据进行同行显示
一、要求 假设您有两个列,分别是A列和B列,需要在C列中找出A列对应的B列的值。 二、方案 方法1:寻常思路 凸显重复项对A列单独进行筛选–按颜色进行排序,然后升序对B列重复上述操作即可 方法2:两个公式 VLOOKUP 纵向查找…...

Windows本地安装配置Qcadoo MES系统
简介 Qcadoo MES是一款功能强大且灵活的开源MES(制造执行系统),旨在为制造业务提供全面的管理和监控解决方案。本篇博客将教您如何在Windows操作系统上安装和配置Qcadoo MES系统,以便您能够轻松管理和监控制造过程。 环境要求 …...

涛思数据与拾贝云达成战略合作,携手赋能工业数字化转型
2023 年 7 月 27 日,北京涛思数据科技有限公司(以下简称“涛思数据”)与广州拾贝云科技有限公司(以下简称“拾贝云”)于广州签署战略合作协议。双方围绕电力行业的需求与痛点展开积极讨论,就如何量身打造最…...

nginx 配置多域名多站点 Ubuntu
nginx 配置多域名多站点 Ubuntu 一、安装 nginx apt install nginx二、配置文件说明 nginx 的配置文件在 /etc/nginx 目录下,它的默认内容是这样的 root2bd0:/etc/nginx# ll total 72 drwxr-xr-x 8 root root 4096 Jul 31 15:21 ./ drwxr-xr-x 104 root root …...
Docker实践:使用Docker搭建个人开发环境(极简版)
文章目录 说明教程1. 编写 Dockerfile2. 编写 docker-compose.yml3. 使用容器创建容器启动容器进入容器命令行VSCode 4. 关闭容器5. 备份容器导出导入 6. 重置容器 相关资料文章合集详细了解本文在个人电脑上安装 Docker容器使用 NVIDIA 显卡托管镜像运行GUI程序 说明 本文是在…...

SQL从三个表中根据时间分别查询并汇总数量一行展示
需求:如果您要从三个表中根据时间分别查询并汇总数量,然后将结果以时间和数量一行展示,可以使用子查询和条件聚合。 入库主表 入库明细表 出库主表 出库明细表 退货主表 退货明细表 SQL代码 SELECT time,sum(a.inQty) as inQty,sum(a.outQty…...

同样是跨端框架,React会不会被VUE取代?
看到知乎上有比较多的类似问题,正好这两个框架在以往的一些项目中都有实践过,就借着本篇文章说说我个人的看法。 先摆个结论:不会,毕竟各有千秋,除非跨端框架有被更好的概念所替代,又或者App已经彻底过气了…...

Excel·VBA定量装箱、凑数值金额、组合求和问题
如图:对图中A-C列数据,根据C列数量按照一定的取值范围,组成一个分组装箱,要求如下: 1,每箱数量最好凑足50,否则为47-56之间; 2,图中每行数据不得拆分; 3&…...

通过Jmeter压测存储过程
目录 一、存储过程准备: 二、测试工具准备: 三、工具配置及执行: 1、配置JDBC Connection Configuration: 2、配置吞吐量控制器(可跳过): 3、配置JDBC Request: 对于存储过程…...
在软件开发中正确使用MySQL日期时间类型的深度解析
在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...

3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...

YSYX学习记录(八)
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用
文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...
人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent
安全大模型训练计划:基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标:为安全大模型创建高质量、去偏、符合伦理的训练数据集,涵盖安全相关任务(如有害内容检测、隐私保护、道德推理等)。 1.1 数据收集 描…...
适应性Java用于现代 API:REST、GraphQL 和事件驱动
在快速发展的软件开发领域,REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名,不断适应这些现代范式的需求。随着不断发展的生态系统,Java 在现代 API 方…...
字符串哈希+KMP
P10468 兔子与兔子 #include<bits/stdc.h> using namespace std; typedef unsigned long long ull; const int N 1000010; ull a[N], pw[N]; int n; ull gethash(int l, int r){return a[r] - a[l - 1] * pw[r - l 1]; } signed main(){ios::sync_with_stdio(false), …...

Java设计模式:责任链模式
一、什么是责任链模式? 责任链模式(Chain of Responsibility Pattern) 是一种 行为型设计模式,它通过将请求沿着一条处理链传递,直到某个对象处理它为止。这种模式的核心思想是 解耦请求的发送者和接收者,…...
Q1起重机指挥理论备考要点分析
Q1起重机指挥理论备考要点分析 一、考试重点内容概述 Q1起重机指挥理论考试主要包含三大核心模块:安全技术知识(占40%)、指挥信号规范(占30%)和法规标准(占30%)。考试采用百分制,8…...