一.模型背景
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
NP?Complet或
N
P
C
NPC
NPC)和NP难题(
N
P
?
H
a
r
d
NP-Hard
NP?Hard或
N
P
H
NPH
NPH)不存在有效算法这一猜想,认为这类问题的大型实例不能用精确算法求解,必须寻求这类问题的有效的近似算法。
城市 | X坐标 | Y坐标 | 城市 | X坐标 | Y坐标 |
---|
1 | 0.6683 | 0.2536 | 6 | 0.2293 | 0.7610 | 2 | 0.6195 | 0.2634 | 7 | 0.5171 | 0.9414 | 3 | 0.4000 | 0.4439 | 8 | 0.8732 | 0.6536 | 4 | 0.2439 | 0.1463 | 9 | 0.6878 | 0.5219 | 5 | 0.1707 | 0.2293 | 10 | 0.8488 | 0.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 ) ;
完整代码获取方式
请点击以下链接进行获取:
|