模拟退火模型(matlab实现)


一.模型背景

1.什么是退火

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

2.物理退火过程

加温过程——增强粒子的热运动,消除系统原先可能存在的非均匀态;等温过程——对于与环境换热而温度不变的封闭系统,系统状态的自发变化总是朝自由能减少的方向进行,当自由能达到最小时,系统达到平衡态;冷却过程——使粒子热运动减弱并渐趋有序,系统能量逐渐下降,从而得到低能的晶体结构。

3.热力学中的退火现象

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

温度越低,物体的能量状态越低,到达足够的低点时,液体开始冷凝与结晶,在结晶状态时,系统的能量状态最低。缓慢降温时,可达到最低能量状态;但如果快速降温,会导致不是最低能态的非晶形。大自然知道慢工出细活:缓缓降温,使得物体分子在每一温度时,能够有足够时间找到安顿位置,则逐渐地,到最后可得到最低能态,系统最稳定。

二.模拟退火算法思想

模仿自然界退火现象而得,利用了物理中固体物质的退火过程与一般优化问题的相似性从某一初始温度开始,伴随温度的不断下降,结合概率突跳特性在解空间中随机寻找全局最优解

组合优化问题金属物体
粒子状态
最优解能量最低的状态
设定初温熔解过程
Metropolis抽样过程等温过程
控制参数的下降冷却
目标函数能量

三、算法简介

算法简介
算法简介

1.背景

背景

2.模拟退火算法的模拟要求

1 初始温度足够高

2 降温过程足够慢

3 终止温度足够低

3.模拟退火算法的计算步骤

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

模拟退火算法对TSP问题的求解

旅行商问题,即 T S P TSP TSP问题( T r a v e l l i n g S a l e s m a n P r o b l e m Travelling Salesman Problem TravellingSalesmanProblem)又译为旅行推销员问题、货郎担问题,是数学领域中著名问题之一。假设有一个旅行商人要拜访 n n n个城市,他必须选择所要走的路径,路径的限制是每个城市只能拜访一次,而且最后要回到原来出发的城市。路径的选择目标是要求得的路径路程为所有路径之中的最小值。迄今为止,这类问题中没有一个找到有效算法。倾向于接受NP完全问题( N P − C o m p l e t NP-Complet NPComplet N P C NPC NPC)和NP难题( N P − H a r d NP-Hard NPHard N P H NPH NPH)不存在有效算法这一猜想,认为这类问题的大型实例不能用精确算法求解,必须寻求这类问题的有效的近似算法。

城市X坐标Y坐标城市X坐标Y坐标
10.66830.253660.22930.7610
20.61950.263470.51710.9414
30.40000.443980.87320.6536
40.24390.146390.68780.5219
50.17070.2293100.84880.3609

在这里插入图片描述

部分代码展示

clear
clc
close all
%% 程 序 参 数 设 定
load data
Coord = data';% 城 市 的 坐 标 Coordinates
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 ) ;

完整代码获取方式

在这里插入图片描述
请点击以下链接进行获取:https://download.csdn.net/download/m0_54688810/20252132?spm=1001.2014.3001.5501

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数学小白不秃头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值