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

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

模拟退火算法(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.lryc.cn/news/120461.html

相关文章:

  • 带你认识储存以及数据库新技术演进
  • 腾讯云服务器镜像操作系统大全_Linux_Windows清单
  • 基于k8s job设计与实现CI/CD系统
  • ⌈算法进阶⌋图论::并查集——快速理解到熟练运用
  • 【ROS】fsd_algorithm架构学习与源码分析(致敬)
  • PHP最简单自定义自己的框架定义常量自动生成目录(三)
  • 栈和队列详解
  • 数据结构 | 树的定义及实现
  • Delphi7通过VB6之COM对象调用FreeBASIC写的DLL功能
  • 【Linux 网络】NAT技术——缓解IPv4地址不足
  • Flink 两阶段提交(Two-Phase Commit)协议
  • 【Docker晋升记】No.2 --- Docker工具安装使用、命令行选项及构建、共享和运行容器化应用程序
  • [OnWork.Tools]系列 00-目录
  • Cadvisor+InfluxDB+Grafan+Prometheus(详解)
  • AtcoderABC222场
  • 架构实践方法
  • 点淘的MCN机构申请详细入驻指南!
  • 事务和事务的隔离级别
  • 每日一题 34在排序数组中查找元素的第一个和最后一个位置(二分查找)
  • Spring Boot Admin 环境搭建与基本使用
  • JVM之内存模型
  • 音视频 vs2017配置FFmpeg
  • 【项目管理】PMP备考宝典-第二章《环境》
  • ELK 将数据流转换回常规索引
  • jackson库收发json格式数据和ajax发送json格式的数据
  • ubuntu安装和卸载CLion
  • Petrel解释二维浅地层数据
  • 分布式任务调度平台XXL-JOB使用
  • 自考本科汉语言文学专业真的太难了吗
  • STM32CubeMX之freeRTOS信号量