模拟退火算法MATLAB实现

介绍

 算法试图随着控制参数T的降低,使目标函 数值f(内能E)也逐渐降低,直至趋于全局最 小值(退火中低温时的最低能量状态),算法 工作过程就像固体退火过程一样。

Metropolis准则——–以概率接受新状态

若在温度T,当前状态i (解1)→ 新状态 j(解2)

若E_j(目标函数f_2)<E_i(f_1),则接受 j 为当前状态;

若E_j>E_i ,概率P=e^−E_j−E_i/KT大于[0,1)区间的 随机数,则仍接受状态 j 为当前状态; 若不成立,则保留状态 I 为当前状态。

算法其他参数的说明

退火过程由一组初始参数,即冷却进度表控制,它的核心是尽量使系统达到准平衡,以使算法在有限的时间内逼近最优解。冷却进度表包括:

1.控制参数的初值T_0:冷却开始的温度;
2.控制参数T的衰减函数:要将连续的降温过程,离散成降温过程中的一系列温度点,衰减函数即计算这一系列温度的表达式;
3. 控制参数T的终值T_f(停止准则);
4. Markov链的长度L_k:任意温度T的迭代次数。

算法基本步骤

1、令T=T_0,随机生成一个初始解x_0,并计算相应的
      目标函数值E(x_0);
2、令T等于冷却进度表中的下一个值T_i ;
3、根据当前解x_i进行扰动,产生一个新解x_j ,计相应
      的目标函数值E(x_j) ,得到 ∆e= E(x_j)−E(x_i);
4、 ∆e<0,则新解x_j被接受,作为新的当前解;
       ∆e>0,则新解x_j按概率P接受;
5、在温度T_i下,重复L_k次的扰动和接受过程,即执行
      步骤(3)、(4);
6、判断T是否已达到T_f,是,则终止算法;否则转到
   (2)继续执行 

几点说明 

1、新解的产生    

  要求尽可能地遍及解空间的各个区域,这样,在某一 恒定温度下,不断产生新解时,就可能跳出局部最优解。

2、收敛的一般条件:

  • 初始温度足够高;
  • 热平衡时间足够长;
  • 终止温度足够低;
  • 降温过程足够缓慢;  

 举例

算法的MATLAB实现旅行商问题

模型:一名商人要到n 个不同的城市去推销商品,每2 个城市I 和j 之间的距离为d,如何选择一条路径使得商人每个城市走一遍后回到起点所走的路径最短。

例:有52座城市,已知每座城市的坐标,求每 个城市走一遍后回到起点,所走的路径最短。

 一、算法设计步骤

2.新解的产生(扰动)

(1)二变换法:任选序号u,v (设u<v<n),交换u,v之间 的访问顺序。

(2)三变换法:任选序号u,v,w (设u≤v<w), 将u,v之间 的路径插到w之后访问 

while t>=tffor r=1:Markov_length  if (rand < 0.5) %随机产生0~1的数,若小于0.5,则二变换ind1 = 0; ind2 = 0;while (ind1 == ind2)ind1 = ceil(rand.*amount);ind2 = ceil(rand.*amount);endtmp1 = sol_new(ind1);sol_new(ind1) = sol_new(ind2);sol_new(ind2) = tmp1;
else    %否则,三变换ind1 = 0; ind2 = 0; ind3 = 0;while (ind1 == ind2) || (ind1 == ind3) ...|| (ind2 == ind3) || (abs(ind1-ind2) == 1)ind1 = ceil(rand.*amount);ind2 = ceil(rand.*amount);ind3 = ceil(rand.*amount);endtmp1 = ind1;tmp2 = ind2;tmp3 = ind3;if (ind1 < ind2) && (ind2 < ind3)elseif (ind1 < ind3) && (ind3 < ind2)ind2 = tmp3;ind3 = tmp2;elseif (ind2 < ind1) && (ind1 < ind3)ind1 = tmp2;ind2 = tmp1;elseif (ind2 < ind3) && (ind3 < ind1)ind1 = tmp2;ind2 = tmp3; ind3 = tmp1;elseif (ind3 < ind1) && (ind1 < ind2)ind1 = tmp3;ind2 = tmp1; ind3 = tmp2;elseif (ind3 < ind2) && (ind2 < ind1)ind1 = tmp3;ind2 = tmp2; ind3 = tmp1;end      % ind1 < ind2 < ind3tmplist1 = sol_new((ind1+1):(ind2-1));  %u、v之间的城市sol_new((ind1+1):(ind1+ind3-ind2+1)) = ...sol_new((ind2):(ind3));   %将v到w的城市移到u后面sol_new((ind1+ind3-ind2+2):ind3) = ...tmplist1;     %u、v之间的城市移到w后面end

3.目标函数

访问所有城市的路径总长度:

模拟退火算法求出目标函数的最小值 

 % 计算目标函数即内能E_new = 0;for i = 1 : (amount-1)E_new = E_new + ...dist_matrix(sol_new(i),sol_new(i+1));end%从第一个城市到最后一个城市的距离E_new = E_new + ...dist_matrix(sol_new(amount),sol_new(1));

 

if E_new < E_currentE_current = E_new;sol_current = sol_new;if E_new < E_best% 冷却过程中最好的解保存下来´E_best = E_new;sol_best = sol_new;endelse% 若新解的目标函数大于当前解的,% 则以一定的概率接受新解if rand < exp(-(E_new-E_current)./t)E_current = E_new;sol_current = sol_new;elsesol_new = sol_current;endend

 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ROS话题(Topic)通信:通信模型、Hello World与拓展

文章目录 一、话题通讯模型二、Topic Hello World2.1 创建并初始化功能包2.2 确定Topic名称及消息格式2.3 实现发布者与订阅者&#xff08;C版&#xff09;2.4 实现发布者与订阅者&#xff08;Python版&#xff09;2.5 关于Topic Hello World的注意 拓展1&#xff1a;devel下其…

预览PDF并显示当前页数

这里写目录标题 步骤实例实例效果图 步骤 1.安装依赖 npm install --save vue-pdf2.在需要的页面&#xff0c;引入插件 import pdf from vue-pdf3.使用 单页pdf可以直接使用 <pdf :src"获取到的pdf地址"></pdf>多页pdf通过循环实现 html标签部分 &l…

Banana Pi BPI-M5 Boot Log 导出说明

准备&#xff1a; Preparation: 1、 一块bpi的开发板&#xff0c;一根ttl的串口线&#xff0c;以及一张烧录好镜像的sd/tf卡&#xff08;烧录到eMMC也行&#xff09;。 1. A BPI development board, a TTL serial port cable, and an SD/TF card with a burned image (it ca…

高并发架构设计(三大利器:缓存、限流和降级)

引言 高并发背景 互联网行业迅速发展&#xff0c;用户量剧增&#xff0c;系统面临巨大的并发请求压力。 软件系统有三个追求&#xff1a;高性能、高并发、高可用&#xff0c;俗称三高。三者既有区别也有联系&#xff0c;门门道道很多&#xff0c;全面讨论需要三天三夜&#…

Rust编程中的共享状态并发执行

1.共享状态并发 虽然消息传递是一个很好的处理并发的方式&#xff0c;但并不是唯一一个。另一种方式是让多个线程拥有相同的共享数据。在学习Go语言编程过程中大家应该听到过一句口号:"不要通过共享内存来通讯"。 在某种程度上&#xff0c;任何编程语言中的信道都类…

stm32超声波测距不准的解决方法(STM32 delay_us()产生1us)及stm32智能小车超声波测距代码(C语言版本)

首先要说明一下原理&#xff1a;使用stm32无法准确产生1us的时间&#xff0c;但是超声波测距一定要依赖时间&#xff0c;时间不准&#xff0c;距离一定不准&#xff0c;这是要肯定的&#xff0c;但是在不准确的情况下&#xff0c;要测量一个比较准确的时间&#xff0c;那么只能…

PHP中$_SERVER全局变量

在PHP中&#xff0c;$_SERVER 是一个全局数组变量&#xff0c;它包含了有关服务器和当前脚本的信息。$_SERVER 数组中的每个元素都是服务器环境的一个参数&#xff0c;如请求的方法、请求的 URI、客户端 IP 地址等。 PATH 系统环境变量的值&#xff0c;包含了多个目录的路径…

【Word自定义配置,超简单,图文并茂】自定义Word中的默认配置,比如标题大小与颜色(参考科研作图配色),正文字体等

▚ 01 自定义样式Styles中的默认标题模板 &#x1f4e2;自定义标题的显示效果&#xff0c;如下图所示&#xff1a; 1.1 自定义标题的模板Normal.dotm 1.1.1 选择所需修改的标题 新建一个空白Word文档&#xff0c;依次选择菜单栏的开始Home&#xff0c;样式Styles&#xff0c;…

Python生成随机数插件Faker的用法

目录 引言 一、Faker库的安装 二、Faker库的基本用法 1、导入Faker类 2、创建Faker对象 3、使用Faker对象生成随机数据 三、Faker库的高级用法 1、自定义数据生成规则 2、使用子模块进行特定领域的数据生成 3、与其他库结合使用 四、Faker库的应用场景 1、单元测试…

TCP与UDP

文章目录 TCP与UDP传输层的作用端口号UDPTCPUDP首部的格式TCP首部格式 TCP与UDP TCP/IP中有两个具有代表性的传输层协议&#xff0c;它们分别是TCP和UDP。TCP提供可靠的通信传输&#xff0c;而UDP则常被用于让广播和细节控制交给应用的通信传输。总之&#xff0c;根据通信的具…

MTK Camera2 的OPEN API流程认知

MTK的设计架构 再了解Camera的open api调用之前我们&#xff0c;需要了解Camera的架构&#xff0c;这样才能提高阅读代码的效率。 代码跟读&#xff1a; 在这个图中大致介绍了OpenCamera的具体调用&#xff0c;下面我们逐步分析Camera的open调用流程。 逐步分析 一、 我们抛…

如何使用PHPStudy本地快速搭建网站并实现远程访问

文章目录 [toc]使用工具1. 本地搭建web网站1.1 下载phpstudy后解压并安装1.2 打开默认站点&#xff0c;测试1.3 下载静态演示站点1.4 打开站点根目录1.5 复制演示站点到站网根目录1.6 在浏览器中&#xff0c;查看演示效果。 2. 将本地web网站发布到公网2.1 安装cpolar内网穿透2…

Flutter笔记:绘图示例 - 一个简单的(Canvas )时钟应用

Flutter笔记 绘图示例 - 一个简单的&#xff08;Canvas &#xff09;时钟应用 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://blog.csdn.net/qq_2855…

【算法|动态规划 | 区间dp No.2】AcWing 1068.环形石子合并

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【AcWing算法提高学习专栏】【手撕算法系列专栏】 &#x1f354;本专栏旨在提高自己算法能力的同时&#xff0c;记录一下自己的学习过程&a…

内衣洗衣机和手洗哪个干净?好用的内衣洗衣机推荐

在日常生活中&#xff0c;我们的衣服不可避免地会沾染上各种细菌、毛发和污渍&#xff0c;将它们与贴身衣物混合清洗&#xff0c;很容易发生交叉感染&#xff0c;而被感染后&#xff0c;贴身衣物也有可能导致我们人体引起皮肤病。这也是为什么大部分人都喜欢用手洗的原因&#…

Android WebView专题

WebView 专题 第一个WebView程序&#xff1a;加载远程网址 Layout添加WebView组件&#xff1b; <WebViewandroid:id"id/webView_first"android:layout_width"match_parent"android:layout_height"match_parent"/>初始化组件&#xff0c;加…

Socket网络编程(服务端和客户端代码示例)

本文主要讲解Socket网络编程。 首先介绍socket&#xff0c;包括TCP和UDP通信过程&#xff1b;然后介绍常用的函数&#xff1b;最后编写client-server例子&#xff0c;并进行测试。 文章目录 Socket介绍TCP通信过程服务器端通信过程&#xff1a;客户端通信过程&#xff1a; UDP通…

SA实战 ·《SpringCloud Alibaba实战》第13章-服务网关:项目整合SpringCloud Gateway网关

大家好,我是冰河~~ 一不小心[SpringCloud Alibaba实战》专栏都更新到第13章了,再不上车就跟不上了,小伙伴们快跟上啊! 在《SpringCloud Alibaba实战》专栏前面的文章中,我们实现了用户微服务、商品微服务和订单微服务之间的远程调用,并且实现了服务调用的负载均衡。也基于…

FusionDiff:第一个基于扩散模型实现的多聚焦图像融合的论文

文章目录 1. 论文介绍2. 研究动机3. 模型结构3.1 网络架构3.2 前向扩散过程3.3 逆向扩散过程3.4 训练和推理过程 4. 小样本学习4. 实验结果 1. 论文介绍 题目&#xff1a;FusionDiff: Multi-focus image fusion using denoising diffusion probabilistic models 作者&#xf…

【Mysql系列】Mysql基础篇

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…