【发布时间】:2013-10-30 08:25:07
【问题描述】:
你们中的任何人都知道一种解决方案,即使是针对旅行商问题的平庸解决方案。我有 3 个人打算访问 31 个目的地...我不知道该怎么做?
谢谢大家-
格言
【问题讨论】:
-
到目前为止你研究了什么?
标签: genetic-algorithm heuristics np np-hard
你们中的任何人都知道一种解决方案,即使是针对旅行商问题的平庸解决方案。我有 3 个人打算访问 31 个目的地...我不知道该怎么做?
谢谢大家-
格言
【问题讨论】:
标签: genetic-algorithm heuristics np np-hard
有几个选项,包括:Nearest Neighbor、Christofides 和 Lin–Kernighan。
如果这些都失败了,您可以随时使用专家的code(学术研究人员免费)。
【讨论】:
我想你可以尝试一种贪婪的方法,选择一个任意点开始(如果没有指定起始点),然后在每一步中你走到离当前点最近的点。假设可以在恒定时间内计算点之间的距离,那么您可以在 O(n^2) 时间内找到一条路径。
为了澄清,下面的伪代码应该会有所帮助(我有一段时间没有写这种东西了,所以我希望这足够清楚)
Name: GreedyPath(C, p)
Input: C - a non-empty collection of points to visit
p - a starting point in C
Output: S - a sequence of points covering C
Algorithm:
Remove p from C
If C is empty
Return the sequence containing only p
Else
Let p1 be the closest point to p in C
Let S = GreedyPath(C, p1)
Append p to the start of S
Return S
显然,耗时的部分是每次都找到最接近 p 的点,但对于 n 点,这应该只需要计算 n(n-1)/2 距离(除非我弄错了)。
【讨论】: