模拟退火算法
简介
概念
退火是指将固体加热到足够高的温度,使分子呈随机排列状态,然后逐步降温使之冷却,最后分子以低能状态排列,固体达到某种稳定状态。
算法思想
模仿自然界退火现象而得,利用了物理中固体物质的退火过程与一般优化问题的相似性从某一初始温度开始,伴随温度的不断下降,结合概率突跳特性在解空间中随机寻找全局最优解。
组合优化问题 | 金属物体 |
---|---|
解 | 粒子状态 |
最优解 | 能量最低的状态 |
设定初温 | 溶解过程 |
Metropolis抽样过程 | 等温过程 |
控制参数的下降 | 冷却 |
目标函数 | 能量 |
模拟要求
- 初始温度足够高
- 降温过程足够慢
- 终止温度足够低
旅行商问题(TSP)
模拟退火算法主要用来解决旅行商问题。
旅行商问题,即TSP问题(Travelling Salesman Problem),是数学领域中著名问题之一。假设有一个旅行商人要拜访n个城市,他必须选择要走的路径,路径的限制是每个城市只能拜访一次,而且最后要回到原来出发的城市。路径的选择目标是要求得的路径路程为所有路径中的最小值。
迄今为止,这类问题中没有一个找到有效算法。倾向于接受NP完全问题(NP-Complet或NPC)和NP难题(NP-Hard或NPH)不存在有效算法这一猜想,认为这类问题的大型实例不能用精确算法求解,必须寻求这类问题的有效的近似算法。
TSP问题的应用领域包括:如何规划最合理高效的道路交通,以减少拥堵;如何更好地规划物流,以减少运营成本;在互联网环境中如何更好地设置节点,以更好地让信息流动等。
代码
函数程序(4个)
function [ fare ] = distance( coord )
% 根据各城市的距离坐标求相互之间的距离
% fare 为各城市的距离,coord 为各城市的坐标
[v, m] = size(coord); % m 为城市的个数
fare = zeros(m);
for i = 1 : m %外层为行
for j = 1 : m %内层为列
fare(i, j) = (sum((coord(:, i) - coord(:, j)) .^ 2)) ^ 0.5;
fare(j, i) = fare(i, j); %距离矩阵对称
end
end