我正在尝试测试一些优化算法在旅行商问题上的准确性。
我想创建一个系统,让我始终知道最佳解决方案是什么。我的逻辑是我会在单位圆上创建一堆随机点,因此总是知道最短路径,因为它只是圆上点的顺序。我如何找到订单?好吧,只需遍历每个点并找到其最近的邻居。事实证明,它在大多数情况下都有效,但有时......它没有!
答案 0 :(得分:3)
您可以使用 convex hull algorithm 计算 100% 准确的解决方案。只要最优 TSP 路径是凸的,这个解就是精确的,简单圆就是这种情况。 monotone chain 算法非常有趣,因为它非常快速且易于理解(更不用说维基百科也提供了多种语言的实现)。
答案 1 :(得分:0)
Jérôme Richard's answer 适用于这种情况以及所有涉及凸多边形边界上的点的情况,但有一种更简单的算法也适用于所有这些情况:对于每个点,只需找到一条通过该点和圆心的线与一条通过圆心的水平线,并以此对点进行排序。
如果原点 (0, 0) 在您的圈子内,并且您的语言具有 atan2() function
(大多数都这样做 - 这是一个标准的三角函数),您可以将 atan2()
应用于每个点并以此对它们进行排序。