智能计算方法与实现2|模拟退火算法原理|工具箱及其应用

news2024/11/16 9:16:28

模拟退火算法原理

模拟退火算法

模拟退火算法(SimulatedAnnealing,SA)最早的思想是由N.Metropolis等人于1953年提出。
1983年,S.Kirkpatrick等成功地将退火思想引l入到组合优化领域
它是基于Monte-Carlo送代求解策略的一种随机寻优算法,其出发点是基于物理中固体物质的退火过程与一般组合优化问题之间的相似性

模拟退火算法从某一较高初温出发,伴随温度参数的不断下降,结合概率突跳特性在解空间中随机寻找目标函数的全局最优解,即在局部最优解能概率性地跳出并最终趋于全局最优。
模拟退火算法是一种通用的优化算法,理论上算法具有概率的全局优化性能,自前已在工程中得到了广泛应用,诸如VLSI、生产调度、控制工程、机器学习、神经网络、信号处理等领域

模拟退火算法是通过赋予搜索过程一种时变且最终趋于零的概率突跳性,从而可有效避免陷入局部极小并最终趋于全局最优的串行结构的优化算法

模拟退火核心思想

模拟退火算法从某一较高初温出发,伴随温度参数的不断下降,结合一定的概率突跳特性在解空间中随机寻找目标函数的全局最优解,即在局部最优解能概率性地跳出并最终趋于全局最优。
这里的”一定的概率”的计算参考了金属冶炼的退火过程,这也是模拟退火算法名称的由来。将温度T当作控制参数,目标函数值f视为内能E,而固体在某温度T时的一个状态对应一个解,然后算法试图随着控制参数T的降低,使目标函数f(内能E)也逐渐降低,直至趋于全局最小值(退火中低温时的最低能量状态),就像金属退火过程一样。

模拟退火数学原理

从上面我们知道,会结合概率突跳特性在解空间中随机寻找目标函数的全局最优解,那么具体的更新解的机制是什么呢?如果新解比当前解更优,则接受新解,否则基于Metropolis准则判断是否接受新解。
接受概率为:
P = { 1 , E t + 1 < E t e − ( E t + 1 − E t ) k T , E t + 1 ≥ E t P=\left\{\begin{matrix} 1,\qquad E_{t+1}<E_{t} \\ e^{\frac{-(E_{t+1}-E_{t})}{kT}},E_{t+1}\ge E_{t} \end{matrix}\right. P={1,Et+1<EtekT(Et+1Et),Et+1Et
如上公式,假设当前时刻搜索的解为 x t x_{t} xt,对应的系统能量(目标函数)为 E t E_{t} Et,对搜索点施加随机扰动,产生新解 x t + 1 x_{t+1} xt+1,相应地,系统能量为 E t + 1 E_{t+1} Et+1,那么系统对搜索点从 x t x_{t} xt x t + 1 x_{t+1} xt+1转变的接受概率就为上公式
![[Pasted image 20240829210414.png]]

假设开始状态在A,随着送代次数更新到B局部最优解,这时发现更新到B时,能量比A要低,则说明接近最优解了,因此百分百转移,状态到达B后,发现下一步能量上升了,如果是梯度下降则是不充许继续向前的,而这里会以一定的概率跳出这个坑,这个概率和当前的状态、能量等都有关系,如果B最终跳出来了到达C,又会继续以一定的概率跳出来,直到到达D后,就会稳定下来。

模拟退火流程

算法实质分两层循环,在任一温度水平下,随机扰动产生新解,并计算目标函数值的变化,决定是否被接受。由于算法初始温度比较高,这样,使E增大的新解在初始时也可能被接受,因而能跳出局部极小值,然后通过缓慢地降低温度,算法就最终可能收敛到全局最优解,具体流程为:

  1. T = T 0 T=T_{0} T=T0,表示开始退火的初始温度,随机产生一个初始解 x 0 x_{0} x0,并计算对应的目标函数值 E ( x 0 ) E(x_{0}) E(x0)
  2. T = k T T=kT T=kT,其中 k k k取值0到1之间,为温度下降速率;
  3. 对当前解x施加随机扰动,在其邻域内产生一个新解 x t + 1 x_{t+1} xt+1,并计算对应的目标函数值 E ( x t + 1 ) E(x_{t+1}) E(xt+1),计算
    Δ E = E ( x t + 1 ) − E ( x t ) \Delta E=E(x_{t+1})-E(x_{t}) ΔE=E(xt+1)E(xt)
  4. Δ E < 0 \Delta E<0 ΔE<0,接受新解作为当前解,否则按照概率 e − Δ E / k T e^{-\Delta E/kT} eΔE/kT判断是否接受新解;
  5. 在温度T下,重复L次扰动和接受过程,即执行步骤3和4;
  6. 判断温度是否达到终止温度水平,若是则终止算法,否则返回步骤2.
    ![[Pasted image 20240829211706.png]]

其中有几个需要注意的点:

  1. 初始点的选取对算法结果有一定的影响,最好是多次运行对结果进行综合判断
  2. 在算法运行初期,温度下降快,避免接受过多的差结果。当运行时间增加,温度下降减缓,以便于更快稳定结果。
  3. 当送代次数增加到一定次数时,结果可能已经达到稳定,但是距离算法结束还有一段时间。在设计程序时应该加入适当的输出条件,满足输出条件即可结束程序。
模拟退火算法求解TSP

![[Pasted image 20240829211907.png]]

clc; 
clear; 
close all;
%% 
tic
T0 = 1000; %初始温度 
Tend = 1e-3; %终止温度
L = 500; %各温度下的迭代次数(链长)
q = 0.9; %降温速率

%%加载数据
load CityPosition;
%%
D = Distanse(X); %计算距离矩阵
N = size(D,1); %城市的个数
%%初始解
S1 = randperm(N); %随机产生一个初始路线

%%画出随机解的路径图
DrawPath(S1,x) 
pause(0.0001)
%%输出随机解的路径和总距离 
disp('初始种群中的一个随机值:') 
OutputPath(S1);
Rlength = athLength(D,S1);
disp(['总距离:', num2str(Rlength)])

%%计算迭代的次数Time
Time = ceil(exp(log(T0/Tend)/log(q))); 
count=0; %迭代计数
Obj = zeros(Time,1); %目标值矩阵初始化
track = zeros(Time,N); %每代的最优路线矩阵初始化

%%迭代
while T0 > Tend
	count = count + 1; %更新迭代次数
	temp = zeros(L, N+1); 
	for k = 1:L
		%%产生新解
		S2 = NewAnswer(S1);
		%%Metropolis法则判断是否接受新解
		[S1, R] = Metropolis(S1, S2, D, T0);%Metropolis抽样算法
		temp(k,:) = [S1R]; %记录下一路线的及其路程 
	end
	%%记录每次迭代过程的最优路线
	[d0, index] = min(temp(:end)); %找出当前温度下最优路线 
	if count == 1 || d0 < Obj(count-1)
		obj(count) = d0;%如果当前温度下最优路程小于上一路程则记录当前路程 
	else
		Obj(count) = Obj(count-1); %如果当前温度下最优路程大于上一路程则记录上一路程 
	end
	track(count,:) = temp(index,1:end-1); %记录当前温度的最优路线 
	T0 = q * T0; %降温
	fprintf(1, '%d\n', count) %输出当前迭代次数
end
functionS2 = NewAnswer(S1)
%%输入
%S1:当前解
%%输出%S2:新解
N = length(S1); 
S2 = S1;
a = round(rand(1,2)*(N-1)+1);%产生两个随机位置用来交换 
W = S2(a(1));
S2(a(1)) = S2(a(2));
S2(a(2)) = W; %得到一个新路线
%%优化过程迭代图 
figure
plot(1: count, Obj) 
xlabel('迭代次数')
ylabel('距离') 
title('优化过程')

%%最优解的路径图
DrawPath(track(end, :), X)

%%输出最优解的路线和总距离
disp('最优解:')
S = track(end, :); 
p = OutputPath(S);
disp([总距离:num2str(PathLength(D,S)]);
disp('----------------------------------------------') 
toc

![[Pasted image 20240829213446.png]]

模拟退火算法工具箱及其应用

模拟退火算法工具箱

Matlab的Global OptimizationToolbox中集成了模拟退火算法,为了表示方便,我们称为模拟退火算法工具箱(SAT)。
它位于Matlab安装目录

\toolbox\globaloptim\globaloptim


![[Pasted image 20240829214056.png]]

下界,上界
[x, fval] = simulannealbnd(objectiveFunction, X0, lb, ub, options)
  • x,最优解,
  • fval,最优值
  • simulannealbnd,主函数
  • ObjectiveFunction,目标函数
  • x0,初始解
  • options,参数集
    参数设置
    options = saoptimset( …
    ‘Maxlter’,500,…%最大送代次数
    ‘StalllterLim’,500,…%算法终止条件’TolFun’,1e-100,…%适应度函数值偏差
    ‘AnnealingFcn’,@annealingfast, …%退火函数
    ‘Initial Temperature’, 100,…%初始温度
    ‘TemperatureFcn’,@temperatureexp,…%指数降温
    'Reanneallnterval,500,…%与Maxlter相同,表示不进行回火处理
'PlotFcns',{@saplotbestx, @saplotbestf, @saplotx, @saplotf,@saplottemperature);

PlotFcns,绘图函数
saplotbestx,最优解
saplotbestf,最优值
saplotx,解x
saplotf,x对应函数值
saplottemprature,温度

f ( x 1 , x 2 ) = 20 + x 1 2 + x 2 2 − 10 ( cos ⁡ 2 π x 1 + cos ⁡ 2 π x 2 ) f(x_{1},x_{2})=20+x_{1}^{2}+x_{2}^{2}-10(\cos 2\pi x_{1}+\cos 2\pi x_{2}) f(x1,x2)=20+x12+x2210(cos2πx1+cos2πx2)
− 1 ≤ x i ≤ 1 ,   i = 1 , 2 -1\le x_{i}\le 1,\ i=1,2 1xi1, i=1,2

![[Pasted image 20240829215759.png]]

clear 
clc

ObjectiveFunction = @Rastrigin; % Function handle to the objective function 
X0 = [0.5 0.5]; %Starting point
lb = [-1 -1]; %Lowerbound 
ub = [1 1]; %Upperbound

options = saoptimset(...
'Maxlter', 500,...
'StalllterLim', 500,...
'TolFun', 1e-100,...
'AnnealingFcn', @annealingfast,...
'InitialTemperature', 100,...
'TemperatureFcn', @temperatureexp,...
'Reanneallnterval', 5o0,...
'PlotFcns',{@saplotbestx, @saplotbestf, @saplotx, @saplotf, @saplottemperature});

[x, fval] = simulannealbnd(ObjectiveFunction, x0, lb, ub, options)
x = 1.0e-04 * 
	-0.1839    -0.2334
fval = 
	1.7517e-07

![[Pasted image 20240903082810.png]]

SAT求解压力容器设计问题

![[Pasted image 20240903083743.png]]

clear 
clc

ObjectiveFunction = @fitnessFunction; %Function handleto theobjective function
X0 = [50504545]; %Startingpoint 
lb = [001010]; %Lowerbound
ub = [100100100100]; %Upperbound
options = saoptimset(...
'Maxlter',500,...
'StalllterLim',500,...
'TolFun', 1e-100,...
'AnnealingFcn', @annealingfast,...
'InitialTemperature',100,...
'TemperatureFcn', @temperatureexp,...
'Reanneallnterval',5o0,...
'PlotFcns',{@saplotbestx, @saplotbestf, @saplotx, @saplotf, @saplottemperature})

[x,fval]= simulannealbnd(ObjectiveFunction, X0, lb, ub, options)

![[Pasted image 20240904221716.png]]

x = 
	1.8048  0.8919  93.4926  33.6489
fval = 
	2.3785e+04

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2105661.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MATLAB 仿真跳频扩频通信系统

1. 简介 跳频扩频&#xff08;FHSS&#xff09;是一种通过在不同的频率之间快速切换来对抗窄带干扰的技术。在这篇博客中&#xff0c;我们将使用 MATLAB 进行 FHSS 通信系统的仿真&#xff0c;模拟跳频过程、调制、解调以及信号在不同步骤中的变化。通过对仿真结果进行可视化&…

为虚拟机配置固定的IP地址(CentOS9)

配置虚拟网卡 首先关闭虚拟机 打开虚拟网络编辑器 选择更改配置 选择VMnet8&#xff0c;选择子网的IP和掩码 &#xff08;这里的子网掩码为255.255.255.0&#xff0c;表示前24位为网络号&#xff0c;后8位为主机号&#xff09;然后点击DHCP设置 设置开始IP地址和结束IP地址&…

远端ide ,vscode ,python 开发环境, 有些还有一建生成chatgpt功能,支持gpu功能

现在智能化的AI工具&#xff0c;可以实现智能聊天、文本生成、语言翻译等多种功能。 博主归纳总结了6个好用免费的AI工具网站&#xff0c;供大家参考。 ## 1&#xff0c;insCode 网址&#xff1a; https://inscode.csdn.net/ 简介&#xff1a; InsCode 是一个以“灵感”&am…

【知识点】图论续篇 - 最短路算法合集

我不会跟大家说我两个月前就写好了&#xff0c;只是今天才发出来。 本文概述 最短路算法&#xff0c;见名知意&#xff0c;就是用于求出图中从某个顶点到另一个顶点最短距离的算法。最短路算法的应用极其广泛。本文将会以求解最短路为中心&#xff0c;围绕着展开叙述一些常见的…

高清无损!探索PDF转JPG的最佳实践工具

在信息爆炸的今天&#xff0c;PDF文件因其跨平台兼容性和文档保护特性&#xff0c;成为了工作、学习和日常生活中不可或缺的一部分。但是很多时候我们并不需要精度那么高的文件&#xff0c;图片分享更符合快捷的要求。这次我们就一起探讨有什么PDF转jpg的工具吧。 1.福昕PDF转…

SignalR——聊天室实践

SignalR 是一个为 ASP.NET 开发者设计的库&#xff0c;它简化了在 Web 应用程序中添加实时功能的过程。实时功能指的是服务器能够在客户端没有发起请求的情况下主动向客户端推送内容的能力。这种技术使得服务器和客户端之间的通信更加动态和即时&#xff0c;非常适合需要实时更…

iOS P8证书推送测试

最近在配合服务端人员调试相关的 APNS auth key 推送的问题&#xff0c;相比于苹果的P12证书的推送&#xff0c;P8证书的推送显得方便很多&#xff0c;P8的优势在于简单&#xff0c;安全 容易生成 最重要的是不会过期。 现在我们来看下测试具体流程&#xff1a; 方法一 地址…

Hive服务部署及Datagrip工具使用

目录 Hive服务部署 Hiveserver2服务 1&#xff09;用户说明 2&#xff09;Hiveserver2部署 &#xff08;1&#xff09;Hadoop端配置 &#xff08;2&#xff09;Hive端配置 3&#xff09;测试 &#xff08;1&#xff09;启动Hiveserver2 &#xff08;2&#xff09;使用命…

GoFly企业版里的阿里图标如何增加自定义图标到后台

1.在使用的vue页面引入图标组件 <script lang"ts" setup>import {Icon} from /components/Icon;</script> 2.在具体位置使用 <template><Icon icon"svgfont-icon7" class"iconbtn" :size"18" color"#ed6…

如何进行 AWS 云监控

什么是 AWS&#xff1f; Amazon Web Services&#xff08;AWS&#xff09;是 Amazon 提供的一个全面、广泛使用的云计算平台。它提供广泛的云服务&#xff0c;包括计算能力、存储选项、网络功能、数据库、分析、机器学习、人工智能、物联网和安全。 使用 AWS 有哪些好处&…

华为云全栈可观测平台(APM)8月新功能特性

华为云应用性能管理服务&#xff08;Application Performance Management&#xff0c;简称APM&#xff09;帮助运维人员快速发现应用的性能瓶颈&#xff0c;以及故障根源的快速定位&#xff0c;为用户体验保驾护航。 您无需修改代码&#xff0c;只需为应用安装一个APM Agent&a…

Linux/Ubuntu服务器 screen 安装与使用

一、screen简单介绍 在Linux系统中&#xff0c;screen是一个非常强大的终端仿真器&#xff0c;它允许用户在一个终端窗口中创建多个子窗口&#xff0c;每个子窗口都可以运行一个独立的会话。screen的主要特点包括&#xff1a; 会话分离&#xff1a;screen允许用户在终端会话中运…

lottie-web动画库实战详解

安装 npm install lottie-web pnpm install lottie-web yarn add lottie-web <divid"animation"style"width: 700px; height: 440px; margin-top: 80px"></div>import lottie from "lottie-web"; import loginJson from ".…

大零售时代:开源 AI 智能名片、2+1 链动与 O2O 商城小程序引领融合新趋势

摘要&#xff1a;本文深入探讨了当今零售业态的发展趋势&#xff0c;指出在数据匹配的时代&#xff0c;人依然在零售中发挥着重要作用。通过对大零售理念的阐述&#xff0c;分析了跨行业跨业态融合的必然性&#xff0c;强调了业态融合的指导思想以及实现方式。同时&#xff0c;…

管理非人类身份的隐形风险

在网络安全的动态世界中&#xff0c;身份和访问管理 (IAM) 是关键的基础。确保只有授权的个人和系统才能访问公司资源至关重要。 不幸的是&#xff0c;虽然许多组织擅长管理人类身份&#xff0c;但他们通常需要更多地关注不断增长且可能更具危险的数字参与者类别&#xff0c;即…

LIN总线CAPL函数—— LIN报文响应空间长度测试

&#x1f345; 我是蚂蚁小兵&#xff0c;专注于车载诊断领域&#xff0c;尤其擅长于对CANoe工具的使用&#x1f345; 寻找组织 &#xff0c;答疑解惑&#xff0c;摸鱼聊天&#xff0c;博客源码&#xff0c;点击加入&#x1f449;【相亲相爱一家人】&#x1f345; 玩转CANoe&…

社交媒体必备,2024年免费视频编辑软件助力内容创作

平常生活放松的时候你是不是通过一些短视频来放松情绪。我身边很多人都是看着看着也想分享自己的生活。这次我们来聊一聊抖音剪辑可以用到哪些工具。 1.福昕视频剪辑 连接直达>>https://www.pdf365.cn/foxit-clip/ 这款视频剪辑软件凭借其低门槛的设计理念&#xff0c…

div3 970

Problem - D - Codeforces 关键在于如果是环的话&#xff0c;环中的每一个的值都是一样的 #include<bits/stdc.h> #define int long long using namespace std; signed main(){int nn;cin>>nn;while(nn--){int n;cin>>n;int a[n1],i0;while(i<n)cin>…

电路分析 ---- 电平移位电路

1 电平移位电路 如图所示的电平移位电路&#xff0c;用于ADC的前级驱动&#xff0c;它将一个变化范围为-10V ~ 10V的输入信号&#xff0c;线性变化成0.048V ~ 4.048V的信号&#xff0c;以满足ADC的输入范围要求。 2 电路说明 V R E F V_{REF} VREF​为电压基准源&#xff0c…

假期学习----iOS多线程

iOS多线程 https://juejin.cn/post/6844903566398717960 什么是GCD Grand Central Dispatch&#xff08;GCD&#xff09; 是 Apple 开发的一个多核编程的较新的解决方法。它主要用于优化应用程序以支持多核处理器以及其他对称多处理系统。 GCD的用处&#xff1a; GCD 可用…