【数学建模学习(9):模拟退火算法】

news2024/12/23 12:39:45

模拟退火算法(Simulated Annealing, SA)的思想借 鉴于固体的退火原理,当固体的温度很高的时候,内能比
较大,固体的内部粒子处于快速无序运动,当温度慢慢降 低的过程中,固体的内能减小,粒子的慢慢趋于有序,最
终,当固体处于常温时,内能达到最小,此时,粒子最为 稳定。模拟退火算法便是基于这样的原理设计而成。

在这里插入图片描述模拟退火算法过程
(1)随机挑选一个单元k,并给它一个随机的位移,求出系统因此而产生的能
量变化ΔEk。
(2)若ΔEk⩽ 0,该位移可采纳,而变化后的系统状态可作为下次变化的起点;
若ΔEk>0,位移后的状态可采纳的概率为
在这里插入图片描述
式中T为温度,然后从(0,1)区间均匀分布的随机数中挑选一个数R,若R<Pk,
则将变化后的状态作为下次的起点;否则,将变化前的状态作为下次的起点。
(3)转第(1)步继续执行,知道达到平衡状态为止。
在这里插入图片描述
利用模拟退火算法工具箱求解问题:

%%
clc;clear;
%%普通的目标函数
fun = @dejong5fcn %目标函数
%[x,fval] = simulannealbnd(fun,[0,0])%[0,0]凭经验猜测的初始值,没有的话,随意写就行
options = saoptimset('PlotFcns',{@saplotbestx,@saplotbestf,@saplotx,@saplotf})
x0 = [0,0];
lb = [-64,-64];%下限
ub = [64,64];%下限
[x,fval] = simulannealbnd(fun,x0,lb,ub,options);
%%
求:
% min f(x) = (4 - 2.1*x1^2 + x1^4/3)*x1^2 + x1*x2 + (-4 + 4*x2^2)*x2^2;
% 写成函数形式
% function y = simple_objective(x)
%    y = (4 - 2.1*x(1)^2 + x(1)^4/3)*x(1)^2 + x(1)*x(2) + (-4 + 4*x(2)^2)*x(2)^2;
%%
fun = @simple_objective;%注意需要将其放在最前面
X0 = [0.5 0.5];   % 初始点
lb = [-64 -64];
ub = [64 64];
[x,fval,exitFlag,output] = simulannealbnd(fun,X0,lb,ub);
fprintf('The number of iterations was : %d\n', output.iterations);
fprintf('The number of function evaluations was : %d\n', output.funccount);
fprintf('The best function value found was : %g\n', fval);
%%

%  求:
% min f(x) = (a - b*x1^2 + x1^4/3)*x1^2 + x1*x2 + (-c + c*x2^2)*x2^2;
% 
% 写成函数形式
% function y = parameterized_objective(x,a,b,c)
%    y = (a - b*x(1)^2 + x(1)^4/3)*x(1)^2 + x(1)*x(2) + (-c + c*x(2)^2)*x(2)^2;
%%带有常数的目标函数
a = 4; b = 2.1; c = 4;    % define constant values
fun = @(x) parameterized_objective(x,a,b,c);
X0 = [0.5 0.5];
options = saoptimset('PlotFcns',{@saplotbestx,@saplotbestf,@saplotx,@saplotf})
[x,fval] = simulannealbnd(fun,X0,options)
%自定义目标函数1
function y = parameterized_objective(x,a,b,c)
   y = (a - b*x(1)^2 + x(1)^4/3)*x(1)^2 + x(1)*x(2) + (-c + c*x(2)^2)*x(2)^2;
end
%自定义目标函数2
function y = simple_objective(x)
    y = (4 - 2.1*x(1)^2 + x(1)^4/3)*x(1)^2 + x(1)*x(2) + (-4 + 4*x(2)^2)*x(2)^2;
end

运行效果
在这里插入图片描述

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

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

相关文章

无涯教程-Perl - defined函数

描述 如果 EXPR 的值不是undef值,则此函数返回true&#xff1b;如果未指定 EXPR ,则检查$_的值。它可以与许多功能一起使用以检测操作失败,因为如果出现问题,它们将返回undef。简单的布尔测试不会区分false,零,空字符串或字符串.0。 如果 EXPR 是函数或函数引用,则在定义函数…

ORCA优化器浅析——CFunctionProp function properties

CFunctionProp CFunctionProp代表了function properties函数属性&#xff0c;主要由function stability函数易变性&#xff08; enum EFuncStbl { EfsImmutable, /* never changes for given input */ EfsStable, /* does not change within a scan */ EfsVolatile, /* can ch…

objectMapper.configure 方法的作用和使用

objectMapper.configure 方法是 Jackson 提供的一个用于配置 ObjectMapper 对象的方法。ObjectMapper 是 Jackson 库的核心类&#xff0c;用于将 Java 对象与 JSON 数据相互转换。 configure 方法的作用是设置 ObjectMapper 的配置选项&#xff0c;例如设置日期格式、设置序列…

Stephen Wolfram:超越基础训练

Beyond Basic Training 超越基础训练 The majority of the effort in training ChatGPT is spent “showing it” large amounts of existing text from the web, books, etc. But it turns out there’s another—apparently rather important—part too. 在训练 ChatGPT 的过…

基于短信宝API零代码实现短信自动化业务

场景描述&#xff1a; 基于短信宝开放的API能力&#xff0c;实现在特定事件&#xff08;如天气预警&#xff09;或定时自动发送短信&#xff08;本文以定时群发短信为例&#xff09;。通过Aboter平台如何实现呢&#xff1f; 使用方法&#xff1a; 首先创建一个IPaaS流程&…

splice没有删除指定元素怎么回事

动态删除数组元素&#xff0c;只能用倒序遍历或者正序遍历时i每次减1 防止遍历时数组元素长度动态改变导致的死循环或者缺漏 注释的需要-1

io day9

1&#xff0e;要求用消息队列实现AB进程对话 a.A进程先发送—句话给B进程&#xff0c;B进程接收后打印 b.B进程再回复—句话给A进程&#xff0c;A进程接收后打印 c.重复1.2步骤&#xff0c;当收到quit后&#xff0c;要结束AB进程 d.实现随时收发:用多进程多线程。 2.要求在共享…

NC 突破性发现!新型分子抑制细菌多重耐药性,重燃抗生素效力的希望

多重耐药性是指细菌病原体在许多结构多样化的化合物的致死剂量下存活的能力。细菌多重耐药性继续以惊人的速度蔓延&#xff0c;威胁着全球人类健康。2019年&#xff0c;细菌多重耐药性直接导致全球1万人死亡&#xff0c;超过艾滋病毒和疟疾的总和。 由于大多数临床抗生素已经对…

Docker卸载安装及国内镜像源(详细版)

文章目录 一、卸载已有Docker1、首先判断本地有没有docker&#xff1a;2、判断CentOS下 docker是否在运行&#xff1a;3、停止docker运行&查看状态4、yum查看docker安装的包并卸载5、删除docker安装目录6、查看docker version 二、Docker安装及镜像源配置1、centOS 7 yum源…

第7集丨Vue 江湖 —— 条件渲染

目录 一、v-show二、v-if2.1 基本使用2.2 条件渲染分组2.3 与 v-else-if、v-else 结合使用 三、v-if vs v-show四、测试案例 本节条件渲染所涉及到的指令有&#xff1a; v-showv-ifv-else-ifv-else 一、v-show 1. 用法&#xff1a; 语法: v-show" 表达式"&#xff…

【CSS】说说对BFC的理解

目录 一、概念 二、BFC的布局规则 三、设置BFC的常用方式 四、BFC的应用场景 1、解决浮动元素令父元素高度坍塌的问题 2、解决非浮动元素被浮动元素覆盖问题 3、解决外边距垂直方向重合的问题 五、总结 一、概念 我们在页面布局的时候&#xff0c;经常出现以下情况&am…

VS2017+CMake+opencv/opencv_contrib 配置报错

请参考https://blog.csdn.net/m0_57433605/article/details/123026901 大佬写的真的很好 添加代理能解决90%问题&#xff08;甚至100%&#xff09;

性能问题通用排查思路(一)CPU

本系列文章只是梳理一些常见的线上问题的通用排查思路&#xff0c;能解决70%的问题&#xff0c;对于剩下的30%是一些极端的问题&#xff0c;需要对计算机底层知识有充分的了解&#xff0c;并积累大量问题排查经验&#xff0c;仔细分析才能找到具体原因。 这里基于Linux操作系统…

18、SQL注入之堆叠及WAF绕过注入

目录 堆叠查询注入WAF绕过-SQL注入简要讲解安全狗、宝塔等防护waf策略规则大小写和关键字替换 加密解密编码解码等价函数特殊符号反序列化注释符混用更改提交方式Fuzz大法数据库特性垃圾数据溢出HTTP参数污染 实测简易CMS头部注入漏洞Bypass原理分析 堆叠查询注入 stacked inj…

吃透MySQL面试八股文

内容摘自我的学习网站&#xff1a;topjavaer.cn 什么是MySQL MySQL是一个关系型数据库&#xff0c;它采用表的形式来存储数据。你可以理解成是Excel表格&#xff0c;既然是表的形式存储数据&#xff0c;就有表结构&#xff08;行和列&#xff09;。行代表每一行数据&#xff0…

MySQL刷题遇到的盲点(五)窗口函数

窗口函数 语法&#xff1a; <窗口函数> over (partition by <用于分组的列名>order by <用于排序的列名>) partition by&#xff1a;用来对表分组&#xff08; partition 子句可以省略&#xff0c;省略就是不指定分组&#xff09; order by&#xff1a;是…

Python爬虫异常处理心得:应对网络故障和资源消耗

作为一名专业的爬虫代理&#xff0c;我知道在爬取数据的过程中&#xff0c;遇到网络故障和资源消耗问题是再正常不过了。今天&#xff0c;我将与大家分享一些关于如何处理这些异常情况的心得和技巧。不论你是在处理网络不稳定还是资源消耗过大的问题&#xff0c;这些技巧能够帮…

每日一学—浅谈什么是互联网广告系统(文末送书福利2.0)

文章目录 &#x1f4cb;前言&#x1f3af;组成部分&#x1f3af;互联网广告系统案例&#x1f4dd;最后&#x1f3af;文末送书&#x1f4da;作者介绍&#x1f4da;内容简介 &#x1f525;参与方式 &#x1f4cb;前言 互联网广告系统是指在互联网上进行广告投放和管理的系统。它…

哈希桶

哈希桶 概念 开散列法又叫链地址法(开链法)&#xff0c;首先对关键码集合用散列函数计算散列地址&#xff08;index x % array.length()-1&#xff09;&#xff0c;具有相同地址的关键码归于同一子集合&#xff0c;每一个子集合称为一个哈希桶&#xff0c;各个桶中的元素通过…

【JS基础】位运算符

JS 位运算符 1.简介 位运算是低级的运算操作&#xff0c;所以其速度往往也是相对较快的。同时&#xff0c;借助位运算的特性还可以实现一些算法&#xff0c;恰当地使用位运算有很多好处。 注意&#xff1a;所有的位运算都是在二进制下进行运算的&#xff01; 2.位运算符 位…