文章目录

  • 一、算法介绍
    • 1. 退火
    • 2.物理退火
    • 3.模拟退火算法思想
  • 二、适用问题
  • 三、算法总结
    • 1. 步骤
  • 四、应用场景举例
  • 五、MATLAB代码
  • 六、实际案例
  • 七、论文案例片段(待完善)

模拟退火算法主要针对数学建模问题中的一些小的子问题进行求解,如果想直接使用请跳转至——
视频回顾

一、算法介绍

1. 退火

 退火是指将固体加热到足够高的温度,使分子呈随机排列状态,然后逐步降温使之冷却,最后分子以低能状态排列,固体达到某种稳定状态。

2.物理退火

 加温过程:增强粒子的热运动,消除系统原先可能存在的非均匀态;

 等温过程:对于与环境换热而温度不变的封闭系统,系统状态的自发变化总是朝自由能减少的方向进行,当自由能达到最小时,系统达到平衡态;

 冷却过程:使粒子热运动减弱并渐趋有序,系统能量逐渐下降,从而得到低能的晶体结构。

 热力学中的退火现象指物体逐渐降温时发生的物理现象:

 温度越低,物体的能量状态越低,到达足够的低点时,液体开始冷凝与结晶,在结晶状态时,系统的能量状态最低。缓慢降温时,可达到最低能量状态;但如果快速降温,会导致不是最低能态的非晶形。

 大自然知道慢工出细活:
 缓缓降温,使得物体分子在每一温 度时,能够有足够时间找到安顿位置,则逐渐地,到最后可得到最低能态,系统最稳定。

3.模拟退火算法思想

  • 简介:



二、适用问题

  • 也是一种贪心算法,近似根据局部最优解进而获得全局最优解,不一定获得全局最优解
  • 例如:
  1. TSP旅行商问题
  2. 交通规划减少拥堵
  3. 物流规划减少成本
  4. 互联网节点设置

三、算法总结

1. 步骤



四、应用场景举例




五、MATLAB代码

swap.m
function [ newpath , position ] = swap( oldpath , number )
% 对 oldpath 进 行 互 换 操 作
% number 为 产 生 的 新 路 径 的 个 数
% position 为 对 应 newpath 互 换 的 位 置
m = length( oldpath ) ; % 城 市 的 个 数
newpath = zeros( number , m ) ;
position = sort( randi( m , number , 2 ) , 2 ); % 随 机 产 生 交 换 的 位 置
for i = 1 : number
newpath( i , : ) = oldpath ;
% 交 换 路 径 中 选 中 的 城 市
newpath( i , position( i , 1 ) ) = oldpath( position( i , 2 ) ) ;
newpath( i , position( i , 2 ) ) = oldpath( position( i , 1 ) ) ;
endpathfare.m
function [ objval ] = pathfare( fare , path )
% 计 算 路 径 path 的 代 价 objval
% path 为 1 到 n 的 排 列 ,代 表 城 市 的 访 问 顺 序 ;
% fare 为 代 价 矩 阵 , 且 为 方 阵 。
[ m , n ] = size( path ) ;
objval = zeros( 1 , m ) ;
for i = 1 : m
for j = 2 : n
objval( i ) = objval( i ) + fare( path( i , j - 1 ) , path( i , j ) ) ;
end
objval( i ) = objval( i ) + fare( path( i , n ) , path( i , 1 ) ) ;
enddistance.m
function [ fare ] = distance( coord )
% 根 据 各 城 市 的 距 离 坐 标 求 相 互 之 间 的 距 离
% fare 为 各 城 市 的 距 离 , coord 为 各 城 市 的 坐 标
[ v , m ] = size( coord ) ; % m 为 城 市 的 个 数
fare = zeros( m ) ;
for i = 1 : m % 外 层 为 行
for j = i : m % 内 层 为 列
fare( i , j ) = ( sum( ( coord( : , i ) - coord( : , j ) ) .^ 2 ) ) ^ 0.5 ;
fare( j , i ) = fare( i , j ) ; % 距 离 矩 阵 对 称
end
endmyplot.m
function [ ] = myplot( path , coord , pathfar )
% 做 出 路 径 的 图 形
% path 为 要 做 图 的 路 径 ,coord 为 各 个 城 市 的 坐 标
% pathfar 为 路 径 path 对 应 的 费 用
len = length( path ) ;
clf ;
hold on ;
title( [ '近似最短路径如下,路程为' , num2str( pathfar ) ] ) ;
plot( coord( 1 , : ) , coord( 2 , : ) , 'ok');
pause( 0.4 ) ;
for ii = 2 : len
plot( coord( 1 , path( [ ii - 1 , ii ] ) ) , coord( 2 , path( [ ii - 1 , ii ] ) ) , '-b');
x = sum( coord( 1 , path( [ ii - 1 , ii ] ) ) ) / 2 ;
y = sum( coord( 2 , path( [ ii - 1 , ii ] ) ) ) / 2 ;
text( x , y , [ '(' , num2str( ii - 1 ) , ')' ] ) ;
pause( 0.4 ) ;
end
plot( coord( 1 , path( [ 1 , len ] ) ) , coord( 2 , path( [ 1 , len ] ) ) , '-b' ) ;
x = sum( coord( 1 , path( [ 1 , len ] ) ) ) / 2 ;
y = sum( coord( 2 , path( [ 1 , len ] ) ) ) / 2 ;
text( x , y , [ '(' , num2str( len ) , ')' ] ) ;
pause( 0.4 ) ;
hold off ;clear;
% 程 序 参 数 设 定
Coord = ... % 城 市 的 坐 标 Coordinates
[ 0.6683 0.6195 0.4    0.2439 0.1707 0.2293 0.5171 0.8732 0.6878 0.8488 ; ...0.2536 0.2634 0.4439 0.1463 0.2293 0.761  0.9414 0.6536 0.5219 0.3609 ] ;
t0 = 1 ; % 初 温 t0
iLk = 20 ; % 内 循 环 最 大 迭 代 次 数 iLk
oLk = 50 ; % 外 循 环 最 大 迭 代 次 数 oLk
lam = 0.95 ; % λ lambda
istd = 0.001 ; % 若 内 循 环 函 数 值 方 差 小 于 istd 则 停 止
ostd = 0.001 ; % 若 外 循 环 函 数 值 方 差 小 于 ostd 则 停 止
ilen = 5 ; % 内 循 环 保 存 的 目 标 函 数 值 个 数
olen = 5 ; % 外 循 环 保 存 的 目 标 函 数 值 个 数
% 程 序 主 体
m = length( Coord ) ; % 城 市 的 个 数 m
fare = distance( Coord ) ; % 路 径 费 用 fare
path = 1 : m ; % 初 始 路 径 path
pathfar = pathfare( fare , path ) ; % 路 径 费 用 path fare
ores = zeros( 1 , olen ) ; % 外 循 环 保 存 的 目 标 函 数 值
e0 = pathfar ; % 能 量 初 值 e0
t = t0 ; % 温 度 t
for out = 1 : oLk % 外 循 环 模 拟 退 火 过 程
ires = zeros( 1 , ilen ) ; % 内 循 环 保 存 的 目 标 函 数 值
for in = 1 : iLk % 内 循 环 模 拟 热 平 衡 过 程
[ newpath , v ] = swap( path , 1 ) ; % 产 生 新 状 态
e1 = pathfare( fare , newpath ) ; % 新 状 态 能 量
% Metropolis 抽 样 稳 定 准 则
r = min( 1 , exp( - ( e1 - e0 ) / t ) ) ;
if rand < r
path = newpath ; % 更 新 最 佳 状 态
e0 = e1 ;
end
ires = [ ires( 2 : end ) e0 ] ; % 保 存 新 状 态 能 量
% 内 循 环 终 止 准 则 :连 续 ilen 个 状 态 能 量 波 动 小 于 istd
if std( ires , 1 ) < istd
break ;
end
end
ores = [ ores( 2 : end ) e0 ] ; % 保 存 新 状 态 能 量
% 外 循 环 终 止 准 则 :连 续 olen 个 状 态 能 量 波 动 小 于 ostd
if std( ores , 1 ) < ostd
break ;
end
t = lam * t ;
end
pathfar = e0 ;
% 输 入 结 果
fprintf( '近似最优路径为:\n ' )
%disp( char( [ path , path(1) ] + 64 ) ) ;
disp(path)
fprintf( '近似最优路径路程\tpathfare=' ) ;
disp( pathfar ) ;
myplot( path , Coord , pathfar ) ;

六、实际案例

Coord = ... % 城 市 的 坐 标 Coordinates
[ 0.6683 0.6195 0.4    0.2439 0.1707 0.2293 0.5171 0.8732 0.6878 0.8488 ; ...0.2536 0.2634 0.4439 0.1463 0.2293 0.761  0.9414 0.6536 0.5219 0.3609 ] ;Coord = [ 66.83 61.95 40    24.39 17.07 22.93 51.71 87.32 68.78 84.88 50 40 25 ; 25.36 26.34 44.39 14.63 22.93 76.1  94.14 65.36 52.19 36.09 30 20 26] ;

七、论文案例片段(待完善)

【数学建模】模拟退火算法(最优化)相关推荐

  1. 数学建模–模拟退火算法

    文章目录 数学建模--智能算法 1.简介 模拟退火算法 1. 简介 2.数学建模中的模拟退火算法原理 3.模拟退火算法流程及应用 1.Metropolis采样算法 2. 退火过程实现算法 3.举个栗子 ...

  2. 数学建模-模拟退火算法-函数寻优(优化模型)

            模拟退火算法得益于材料的统计力学的研究成果.统计力学表明材料中粒子的不同结构对应于粒子的不同能量水平.在高温条件下,粒子的能量较高,可以自由运动和重新排列.在低温条件下,粒子能量较低. ...

  3. 数学建模——模拟退火算法(Simulated Annealing,SA)

    模拟退火算法 一.模拟退火算法概述 二.算法步骤 三.算法特点 四.模拟退火算法理解(图解) 五.Metropolis准则 六.模拟退火算法的应用 七.模拟退火算法Matlab代码 工具箱求解非线性函 ...

  4. 数学建模基本算法模型Chapter1--线性规划

    数学建模基本算法模型Charpter1–线性规划(LP) By 进栈需检票 一.线性规划基本概念 1.Linear Programming (LP问题) 列出方程组不等式求解(基本形式) 包含目标函数 ...

  5. 数学建模——主成分分析算法详解Python代码

    数学建模--主成分分析算法详解Python代码 import matplotlib.pyplot as plt #加载matplotlib用于数据的可视化 from sklearn.decomposi ...

  6. 数学建模之减肥计划 matlab编程,数学建模matlab算法大全第02章整数规划.pdf

    数学建模matlab算法大全第02章整数规划 第二章 整数规划 §1 概论 1.1 定义 规划中的变量(部分或全部)限制为整数时,称为整数规划.若在线性规划模型中, 变量限制为整数,则称为整数线性规划 ...

  7. 数学建模图论算法学习总结

    数学建模图论算法学习总结 图论基本知识 B站视频: https://www.bilibili.com/video/av18374161/?p=35 https://www.bilibili.com/v ...

  8. 数学建模必备算法模型,全新升级!

    转眼间2019年已经过去了四分之一,近日,2019年数学建模国赛的时间也已经出来啦,确定为9月12日(周四)18时至9月15日(周日)20时. 随着各种各样的数模比赛源源不断地开展,时不时有小伙伴私聊 ...

  9. 【Python数学建模常用算法代码(二)之BP神经网络】

    Python数学建模常用算法代码(二) BP神经网络模型Python代码 import numpy as np import math import random import string impo ...

  10. 数学建模必备算法之模拟退火算法

    在2020年的全国大学生数学建模竞赛的A题中,第三问要确定面积最小的最优炉温曲线,这是一个有五个优化变量的优化问题,由于优化变量太多,导致假若直接用搜索法求解的话,计算量会非常大. 一共5个优化变量, ...

最新文章

  1. Python实现 QQ 半自动发送情话,我追到了女神
  2. 重写equals()与hashCode()方法
  3. pyplot 画多个图时搅合到了一起_这些认数字游戏,宝宝最喜欢,家长可以和宝宝一起玩...
  4. mysql不定参数函数_可变参数函数(一)
  5. 01-NLP-02-gensim中文处理案例
  6. 开源大数据:openLookeng 虚拟化引擎
  7. html 360 浏览器图片自适应,360浏览器看图模式 一键保存高清套图
  8. 特斯拉-数据分析师-SQL笔试题
  9. 吉林大学软件需求分析 Software Requirement Analysis
  10. 扫描格式的pdf文件怎样进行识别
  11. 【论文阅读ACL2020】Leveraging Graph to Improve Abstractive Multi-Document Summarization
  12. Windows 8.1 更新错误 0x80073712 解决办法
  13. 律师查询微信实名认证信息之操作指引
  14. oracle hint 强制索引
  15. 自适应波束形成(四)——Frost波束形成1
  16. flutter 国际化flutter使用 intl插件,provider状态保存
  17. Cmake3.20、VS2019编译OpenCV4.3.0+CUDA11.1,显卡Geforce 940MX
  18. python论文格式检查系统_毕业论文格式检查软件
  19. 项目经理的时间管理法则
  20. Java基础--用程序模拟打怪游戏

热门文章

  1. 申请补办 CET(纸笔考试)成绩证明的方法
  2. 小码哥30小时快速精通C++和外挂实战特训营
  3. 深入解读f-散度和f-GAN训练的相关数学性质
  4. CVPR 2021 | 天津大学提出PISE:形状与纹理解耦的人体图像生成与编辑方法
  5. AutoML大提速,谷歌开源自动化寻找最优ML模型新平台Model Search
  6. 读完这些论文和代码,你就能在搜狐算法大赛中获得好成绩了
  7. 自然语言处理太难?按这个方式走,就是砍瓜切菜!
  8. FZU2020 lucas定理求解组合数
  9. HDU 3699 DFS
  10. jfinal框架中后台获取前端传递的参数