当前位置: 首页 > news >正文

【MATLAB】模拟退火算法

模拟退火算法的MATLAB实现

  • 模拟退火算法简介
  • 模拟退火算法应用实例
  • 关于计算结果

模拟退火算法简介

1982年,Kirkpatrick 将退火思想引入组合优化领域,提出了一种能够有效解决大规模组合优化问题的算法,尤其对 NP 完全问题表现出显著优势。模拟退火算法的灵感源自固体退火过程,即先将温度升至极高,然后缓慢降温(即退火),使系统达到能量的最低点。相较于快速降温(即淬火)无法达到最低能量状态,退火的缓慢降温过程更有助于系统找到全局最优解。

模拟退火算法是一种适用于求解最小化问题或更新学习过程(随机或确定性)的随机搜索算法。在该过程中,每一步的更新长度与对应的参数成正比,这些参数类似于物理过程中的温度。在优化开始时,为了更快地实现最小化或学习,温度被设置得很高,随后逐渐降温以实现系统的稳定性。

这算法将物理系统的退火过程类比于优化问题的求解过程,优化的目标函数对应于金属的内能,优化问题的自变量组合状态空间对应于金属的内能状态空间,求解过程即是在组合状态空间中寻找目标函数值最小的组合状态。

根据 Metropolis 准则,粒子在温度 T \mathrm{T} T 时趋于平衡的概率为 exp ⁡ ( − △ E / ( k T ) ) \exp(-\bigtriangleup E/(k\mathrm{T})) exp(E/(kT)) ,其中 E E E 为温度 T \mathrm{T} T 时的内能, △ E \bigtriangleup E E 为其变化量, k k k 为 Boltzmann 常数。将固体退火过程模拟到组合优化问题中,内能 E E E 对应于目标函数值 f f f,温度 T \mathrm{T} T 演化为控制参数 t t t,从而得出模拟退火算法:从初始解 i i i 和控制参数初值 t t t 开始,对当前解反复进行 “生成新解、计算目标函数差、接受或舍弃” 的迭代,并逐步衰减 t t t 值。算法终止时的当前解即为近似最优解。这是基于蒙特卡罗迭代求解方法的一种启发式随机搜索过程。退火过程由冷却进度表(Cooling Schedule)控制,包括控制参数初值 t t t 及其衰减因子 △ t \bigtriangleup t t、每个 t t t 值时的迭代次数 L L L 和停止条件 S S S 等。

模拟退火算法应用实例

MATLAB 遗传算法和模式搜索工具箱提供了 simulannealbnd 函数,用于通过模拟退火算法求解无约束或带有边界约束的多变量最小化问题。该函数的调用语法如下:

  • x = simulannealbnd(fun, x0):从初始值 x0 开始,搜索目标函数 fun 的最小值 x。目标函数的输入为变量 x,并在 x 处返回一个标量值。x0 可以是标量或向量。
  • x = simulannealbnd(fun, x0, lb, ub):在边界条件 lb 和 ub 的约束下,优化求解目标函数 fun。
  • x = simulannealbnd(fun, x0, lb, ub, options):使用自定义的 options参数,而非默认值,进行优化求解。
  • x = simulannealbnd(problem):求解 problem,其中 problem 是一个包含输入变量的结构体。
  • [x, fval] = simulannealbnd(...):返回点 x 处的目标函数值 fval。
  • [x, fval, exitflag] = simulannealbnd(...):返回退出标志 exitflag,用于描述函数计算的退出条件。
  • [x, fval, exitflag, output] = simulannealbnd(fun, ...):返回结构体 output,其中包含优化过程中的信息。

【例1】 求解 MATLAB 自带的测试函数 De Jong 第五函数的最小值。De Jong 第五函数是一个具有多个局部极小值的二维函数。在 MATLAB 命令行中输入 dejong5fcn 可查看 De Jong 第五函数的图像,如图 1 所示。

>> dejong5fcn% 注意:命令行中输入查看 De Jong 第五函数的图像。

在这里插入图片描述

图1. De Jong 第五函数

x0 = [0 0];
[x,fval] = simulannealbnd(@dejong5fcn,x0)% 注意:.m文件名必要和simulannealbnd一样,否则报错。

运行结果:

在这里插入图片描述


另外,在具有上下边界条件约束的情况下也可以调用simulannealbnd数来求解:

x0 = [0 0];
lb = [-64 -64];  % 下边界约束
ub = [64 64];   % 上边界约束
[x,fval] = simulannealbnd(@dejong5fcn,x0,lb,ub)

运行结果:

在这里插入图片描述

在优化过程中,可以实时绘制图像,显示优化信息,包括当前迭代中的最优点、最优值、当前点和当前值等。可以使用以下 MATLAB 命令实现这一功能。

x0 = [0 0];
options = saoptimset('PlotFcns' {@saplotbestx, @saplotbestf, @saplotx, @saplotf});  %绘图参数设置
simulannealbnd(@dejong5fcn, x0, [ ], [ ], options)

运行结果:

在这里插入图片描述


在这里插入图片描述

图2. 使用模拟退火算法优化 De Jong 第5函数

在模拟退火算法的运行过程中,程序实时显示了结果的图形。最终生成的图像如图2所示,其中展示了最优点、最优值、当前点和当前值等优化信息。算法在点 (-31.9772, -31.9778) 处找到了函数的最小值。

关于计算结果

由于模拟退火算法是一种随机算法,在优化过程中存在随机选择的因素,因此每次运行相同的命令,结果可能会有所不同。有时算法可能会陷入局部最优,导致某些结果较大。为了获得更理想的解,即更小的目标函数值,通常需要多次调用优化函数,并在多次计算结果中选择最优的结果作为最终输出。

在模拟退火算法的计算过程中,MATLAB 使用了均匀随机数和正态随机数生成器。决定是否接受新的点时,算法会使用 randrandn 函数进行选择。由于每次调用 randrandn 函数时,其种子都会发生变化,因此每次调用这些函数时都会生成不同的随机数。

如果需要精确地再现计算结果,可以在调用 simulannealbnd 函数时返回 output 结构数组。output 结构数组中包含了当前随机数生成器的种子状态。在再现计算前,可以将种子设置为 output 中保存的种子。例如,在使用模拟退火算法计算 De Jong 第5函数的最优值时,可以返回变量 output,相应的 simulannealbnd 调用语法为:

[x, fval, exitflag, output]= simulannealbnd(@dejong5fcn, [0 0]);

运行结果:

随机种子包含在 output.rngstate 中,可以通过以下命令重新设置随机数生成器的状态。如果现在再次运行 simulannealbnd 命令,就可以验证是否得到与上次相同的结果。

>> set(RandStream.getGlobalStream,'State', output.rngstate.State);
>> [x, fval, exitflag, output]= simulannealbnd(@dejong5fcn, [0 0])% 注意:这两句在运行过一次退火寻优后,在命令行中直接运行。

运行结果:

在这里插入图片描述


不过,如果不需要重复验证结果,最好不要设置随机种子。因为不设置种子可以充分利用模拟退火算法的随机性,增加获得更优结果的机会。其他具有随机性的算法,如遗传算法等,也具有类似的特性,此处不再赘述。


END
2024年9月7日

相关文章:

【MATLAB】模拟退火算法

模拟退火算法的MATLAB实现 模拟退火算法简介模拟退火算法应用实例关于计算结果 模拟退火算法简介 1982年,Kirkpatrick 将退火思想引入组合优化领域,提出了一种能够有效解决大规模组合优化问题的算法,尤其对 NP 完全问题表现出显著优势。模拟…...

什么是Kubernetes RBAC?

什么是Kubernetes RBAC? 1、什么是RBAC?2、核心组件3、优势💖The Begin💖点点关注,收藏不迷路💖 在Kubernetes集群中,RBAC(基于角色的访问控制)是保障系统安全的关键。它通过角色和绑定管理不同实体对资源的访问权限,具有显著优势: 1、什么是RBAC? RBAC是Kube…...

在Spring Boot中通过自定义注解、反射以及AOP(面向切面编程)

在Spring Boot中,通过自定义注解、反射以及AOP(面向切面编程)来动态修改请求参数是一种高级且强大的技术组合,它允许开发者在不修改原始方法实现的情况下,对方法的执行过程进行干预和定制。这种技术通常用于日志记录、…...

安防监控视频平台LntonAIServer视频智能分析平台新增视频质量诊断功能

随着安防行业的快速发展,视频监控系统已经成为维护公共安全和个人隐私的重要工具。然而,由于各种因素的影响,视频流的质量可能会受到影响,从而导致监控效果不佳。为了解决这一问题,LntonAIServer推出了全新的视频质量诊…...

vscode从本地安装插件

1. 打开VSCode。 2. 点击左侧菜单中的“扩展”(或按CtrlShiftX)。 3. 点击“更多操作”(三个点)> “从VSIX安装”。 4. 选择下载的.vsix文件。 5. 点击“安装”即可安装插件。...

Superset二次开发之新增复选框Checkbox筛选器

一. 背景 Superset目前支持的筛选类型:值、数值范围、时间列、时间粒度、时间范围 5种类型,显然无法满足业务需求。根据产品需要,需要支持复选框、单选框、级联选择等类型的筛选器。本文探讨复选框、单选框的技术实现方式。 二. 效果预览 三. 实现思路 复用 值 筛选器模块,…...

PromQL 语法

什么是 PromQL PromQL (Prometheus Query Language) 是 Prometheus 监控系统中用于查询时间序列数据的语言。它允许用户编写查询,以从 Prometheus 中检索并处理监控数据。 PromQL 的基础概念 1. 时间序列 Prometheus 中的时间序列由以下几个部分组成:…...

掌握Go语言中的时间与日期操作

Go语言中的时间与日期操作 在编写程序时,处理时间和日期看似是一项无关紧要的任务,但在需要同步多个任务或从文本文件中读取时间时,它的重要性便凸显出来。Go语言中的time包为我们提供了丰富的时间与日期操作功能。本文将详细介绍如何在Go语…...

4G模块、WIFI模块、NBIOT模块通过AT指令连接华为云物联网服务器(MQTT协议)

MQTT协议概述 MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息传输协议,它被设计用来提供一对多的消息分发和应用之间的通讯,尤其适用于远程位置的设备和高延迟或低带宽的网络。MQTT协议基于客户端-服务器架构&…...

spring数据校验Validation

文章目录 需要的依赖创建校验对象Validator 需要的依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId> </dependency>创建校验对象Validator 测试的实体类 //创建…...

Uniapp基于uni拦截器+Promise的请求函数封装

最近在学Uniapp&#xff0c;到封装请求的时候本来还想用axios&#xff0c;但是看到一些教学视频有更简单的方法&#xff0c; 基于uni的拦截器和Promise封装的请求函数 但是他们是用TS写的&#xff0c;还没学到TS&#xff0c;我就把JS写了&#xff0c;最终也是请求成功 // src/…...

【工具】使用 Jackson 实现优雅的 JSON 格式化输出

说明 在 Java 开发中&#xff0c;我们经常需要处理 JSON 数据。无论是从服务器端返回的数据&#xff0c;还是本地存储的数据&#xff0c;JSON 格式都因其轻量级和易于解析的特点而被广泛使用。当我们需要查看或调试 JSON 数据时&#xff0c;优雅、格式化的输出将大大提高我们的…...

ApacheKafka中的设计

文章目录 1、介绍1_Kafka&MQ场景2_Kafka 架构剖析3_分区&日志4_生产者&消费者组5_核心概念总结6_顺写&mmap7_Kafka的数据存储形式 2、Kafka的数据同步机制1_高水位&#xff08;High Watermark&#xff09;2_LEO3_高水位更新机制4_副本同步机制解析5_消息丢失问…...

.NET 自定义过滤器 - ActionFilterAttribute

这个代码片段定义了一个自定义的 ASP.NET Core 过滤器&#xff08;GuardModelStateAttribute&#xff09;&#xff0c;用于在控制器动作执行之前验证模型状态&#xff08;ModelState&#xff09;。如果模型状态无效&#xff0c;则构造一个 ProblemDetails 对象来描述错误&#…...

VMware Fusion Pro 13 for Mac虚拟机软件

Mac分享吧 文章目录 效果一、下载软件二、开始安装安装完成&#xff01;&#xff01;&#xff01; 效果 一、下载软件 下载软件 地址&#xff1a;www.macfxb.cn 二、开始安装 安装完成&#xff01;&#xff01;&#xff01;...

HarmonyOS应用开发环境搭建

本文主要讲述的是HarmonyOS应用开发环境的搭建&#xff0c;HUAWEI DevEco Studio是基于IntelliJ IDEA Community开源版本打造&#xff0c;为运行在HarmonyOS系统上的应用和服务提供一站式的开发平台。具体下载链接DevEco Studio 一、下载 DevEco Studio 只需要下载对应的版本&…...

YOLOv8改进实战 | 注意力篇 | 引入ICCV2023顶会LSKNet:大选择性卷积注意力模块LSKA,助力小目标检测

YOLOv8专栏导航:点击此处跳转 前言 YOLOv8 是由 YOLOv5 的发布者 Ultralytics 发布的最新版本的 YOLO。它可用于对象检测、分割、分类任务以及大型数据集的学习,并且可以在包括 CPU 和 GPU 在内的各种硬件上执行。 YOLOv8 是一种尖端的、最先进的 (SOTA) 模型,它建立在以前…...

00Mac安装playwright

文章目录 前言一、执行以下命令安装二、安装如果报错zsh: command not found: pip三、安装浏览器驱动 前言 现在常用的三个自动化测试&#xff08;或者爬虫&#xff09;库&#xff0c;是Selenium、Puppeteer、Playwright。Playwright是未来趋势&#xff0c;主要学习Playwright…...

materail3 CircularProgressIndicator和LinearProgressIndicator有难看的白块和断点

看看&#xff0c;就是这个垃圾效果&#xff1a; 圆圈的进度条有断点&#xff0c;不连接&#xff1b; 横线进度条&#xff0c;有尾部亮色&#xff0c;进度处又有分割。 它的原出处在这里&#xff1a;https://m3.material.io/components/progress-indicators/overview&#xff0…...

菜鸟入门Docker

初始Docker Docker的概念 Docker的用途 DOcke的安装 Docker架构 配置Docker镜像加速器 Docker常用命令 Docker服务相关的命令。 Docker镜像相关的命令 Docker容器相关的命令 容器的数据卷 数据卷的概念和作用 配置数据卷 Docker应用部署 Docker部署mysql Docker…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天&#xff0c;再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至&#xff0c;这不仅是开发者的盛宴&#xff0c;更是全球数亿苹果用户翘首以盼的科技春晚。今年&#xff0c;苹果依旧为我们带来了全家桶式的系统更新&#xff0c;包括 iOS 26、iPadOS 26…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

&#x1f31f; 什么是 MCP&#xff1f; 模型控制协议 (MCP) 是一种创新的协议&#xff0c;旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议&#xff0c;它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

AspectJ 在 Android 中的完整使用指南

一、环境配置&#xff08;Gradle 7.0 适配&#xff09; 1. 项目级 build.gradle // 注意&#xff1a;沪江插件已停更&#xff0c;推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!

简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求&#xff0c;并检查收到的响应。它以以下模式之一…...

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.

ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #&#xff1a…...

LOOI机器人的技术实现解析:从手势识别到边缘检测

LOOI机器人作为一款创新的AI硬件产品&#xff0c;通过将智能手机转变为具有情感交互能力的桌面机器人&#xff0c;展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家&#xff0c;我将全面解析LOOI的技术实现架构&#xff0c;特别是其手势识别、物体识别和环境…...

LLaMA-Factory 微调 Qwen2-VL 进行人脸情感识别(二)

在上一篇文章中,我们详细介绍了如何使用LLaMA-Factory框架对Qwen2-VL大模型进行微调,以实现人脸情感识别的功能。本篇文章将聚焦于微调完成后,如何调用这个模型进行人脸情感识别的具体代码实现,包括详细的步骤和注释。 模型调用步骤 环境准备:确保安装了必要的Python库。…...

倒装芯片凸点成型工艺

UBM&#xff08;Under Bump Metallization&#xff09;与Bump&#xff08;焊球&#xff09;形成工艺流程。我们可以将整张流程图分为三大阶段来理解&#xff1a; &#x1f527; 一、UBM&#xff08;Under Bump Metallization&#xff09;工艺流程&#xff08;黄色区域&#xff…...

《Offer来了:Java面试核心知识点精讲》大纲

文章目录 一、《Offer来了:Java面试核心知识点精讲》的典型大纲框架Java基础并发编程JVM原理数据库与缓存分布式架构系统设计二、《Offer来了:Java面试核心知识点精讲(原理篇)》技术文章大纲核心主题:Java基础原理与面试高频考点Java虚拟机(JVM)原理Java并发编程原理Jav…...