圆上随机点之间的最短距离?

时间:2021-04-24 19:55:09

标签: python algorithm optimization

我正在尝试测试一些优化算法在旅行商问题上的准确性。

我想创建一个系统,让我始终知道最佳解决方案是什么。我的逻辑是我会在单位圆上创建一堆随机点,因此总是知道最短路径,因为它只是圆上点的顺序。我如何找到订单?好吧,只需遍历每个点并找到其最近的邻居。事实证明,它在大多数情况下都有效,但有时......它没有!

enter image description here 是否有任何建议可以在 100% 的时间内找到单位圆上随机点的最佳解决方案的算法?我喜欢能够在圆上随机创建点。

2 个答案:

答案 0 :(得分:3)

您可以使用 convex hull algorithm 计算 100% 准确的解决方案。只要最优 TSP 路径是凸的,这个解就是精确的,简单圆就是这种情况。 monotone chain 算法非常有趣,因为它非常快速且易于理解(更不用说维基百科也提供了多种语言的实现)。

答案 1 :(得分:0)

Jérôme Richard's answer 适用于这种情况以及所有涉及凸多边形边界上的点的情况,但有一种更简单的算法也适用于所有这些情况:对于每个点,只需找到一条通过该点和圆心的线与一条通过圆心的水平线,并以此对点进行排序。

如果原点 (0, 0) 在您的圈子内,并且您的语言具有 atan2() function(大多数都这样做 - 这是一个标准的三角函数),您可以将 atan2() 应用于每个点并以此对它们进行排序。