// 标题是糊弄人的
1. 问题引入
给出一张图,求其最短哈密尔顿回路,也就是 “旅行商问题”(Traveling Saleman Problem,TSP)
假设有一个旅行商人要拜访 $n$个城市,他必须选择所要走的路径,路径的限制是每个城市只能拜访一次,而且最后要回到原来出发的城市。
路径的选择目标是要求得的路径路程为所有路径之中的最小值。
这是一个著名的 NP-C(NP 完全)问题,也就是说——爆搜不可避
爆搜很简单,枚举一个排列表示第 $1, 2, 3, …, n$个经过的点,再判断距离就行了,取最小值
但是这样复杂度是 $O(n!)$级别的,即使 $n \leq 20$都是不可接受的
对于 $n \leq 20$左右的数据,可以用状态压缩动态规划求解,复杂度 $n ^ 2 2 ^ n$,可能需要常数上的优化
2. 模拟退火
模拟退火将热力学的理论应用到统计学中,一开始温度高,分子能量大,移动范围广,可以防止停留在局部最优解
到后面一步步降温,移动范围逐渐收敛,最终获取到的解一般较优
模拟退火解决 TSP 问题大概分为如下几部:
根据当前路径,随机生成一个新路径
比较当前路径与新路径,若新路径较优,则接受新路径,把当前路径替换成新路径
否则以 $e ^ {\Delta / T}$的概率接受新路径,其中 $\Delta$表示新路径长度与当前路径长度的差(为负数),$T$表示当前温度
若温度低于设定的最低温度,则退出算法