模拟退火
参考资料:司守奎《数学建模算法与应用》
算法简介
模拟退火算法得益于材料统计力学的研究成果。统计力学表明材料中粒子的不同结构对应于粒子的不同能量水平。在高温条件下,粒子的能量较高,可以自由运动和重新排列。在低温条件下,粒子能量较低。如果从高温开始,非常缓慢地降温(这个过程被称为退火),粒子就可以在每个温度下达到热平衡。当系统完全被冷却时,最终形成处于低能状态的晶体。

为什么E(j)>E(i)的情况下还要继续呢
因为有时候我们找到的可能只是局部最优解,而不是全局最优解,所以还需要继续下去

如图所示,例如我们要寻找最小值,如果在此刻停止的话,找到的只是局部最小值,而不是全局的
三个注意点
-
理论上,降温过程要足够缓慢,要使得在每一温度下达到热平衡。但在计算机实现中,如果降温速度过缓,所得到的解的性能会较为令人满意,但是算法会太慢,相对于简单的搜索算法不具有明显优势。如果降温速度过快,很可能最终得不到全局最优解。因此使用时要综合考虑解的性能和算法速度,在两者之间采取一种折衷
-
要确定在每一温度下状态转换的结束准则。实际操作可以考虑当连续m次的转换过程没有使状态发生变化时结束该温度下的状态转换。最终温度的确定可以提前定为一个较小的值 T e T{_e} Te,或连续几个温度下转换过程没有使状态发生变化算法就结束。
-
选择初始温度和确定某个可行解的邻域的方法也要恰当
算法应用
已知100个目标的经度、纬度如2.1所示。我方有一个基地,经度和纬度为(70,40)。假设我方飞机的速度为1000公里/小时。我方派一架飞机从基地出发,侦察完所有目标,再返回原来的基地。在每一目标点的侦察时间不计,求该架飞机所花费的时间(假设我方飞机巡航时间可以充分长)
这是一个旅行商问题。给我方基地编号为1,目标依次编号为2,3,…,101,最后我方基地再重复编号为102(这样便于程序中计算)
clc, clear, close all
sj0=load('data12_1.txt');
x=sj0(:,1:2:8); x=x(:);
y=sj0(:,2:2:8); y=y(:);
sj=[x y]; d1=

最低0.47元/天 解锁文章

1155

被折叠的 条评论
为什么被折叠?



