TSP问题,即旅行商问题,是公认的NP-Hard问题,解空间随着问题规模指数级上升。
求解此类问题的方法分为两大类:求最优解,求可行的次优解。
这里介绍其中的三种方法:
- MIP :Mixed Integer Program,混合整数规划,最优解
- SOM:Self-Organizing Map,自组织(神经)网络,次优解
- RL:Reinforcement Learning, 强化学习,次优解
另外,有个标准数据集,是实际的城市坐标数据,规模由小到大,且给出了经过计算的最优解。方便大家学习、研究、比较。
1、MIP
利用混合整数规划的方法建模,再利用求解器求解,能得到TSP问题的最优解。
牛逼的求解器groubi中就有这个例子,详细代码可以去examples里看。
其大致思路是,
变量:每个节点的所有边(0/1变量)
约束:
一般约束:从每个节点发出的边的数量和为 2
lazy constraint:没有遍历所有城市的最短路线。
同样,google也有个OR-Tools(组合优化工具包),开源的,可以求解包括MIP的一些组合优化模型,里边也有TSP的例子,建模