Algorithm 选择哪个节点作为最近邻算法的起始节点

Algorithm 选择哪个节点作为最近邻算法的起始节点,algorithm,nearest-neighbor,traveling-salesman,approximation,Algorithm,Nearest Neighbor,Traveling Salesman,Approximation,我用最近邻算法来解决旅行商问题。速度非常快,但不准确。我在某个地方读到了我可以做的两个改进。第一种方法不是从一个随机点开始,而是从每个节点开始运行最近邻算法。(因此,如果有N个节点,最近邻将运行N次)然后比较并选择总距离最小的路由。这一点要精确得多。但是太慢了 另一种方法不是随机选择起始节点,而是选择一个特殊的节点。然后仍然只运行最近的邻居一次以获得结果。这不会像上面的方法那样精确,但肯定要快得多,因为算法像以前一样只运行一次。但不幸的是,我不记得在哪里读过那篇文章以及选择这个起始节点的标准 我

我用最近邻算法来解决旅行商问题。速度非常快,但不准确。我在某个地方读到了我可以做的两个改进。第一种方法不是从一个随机点开始,而是从每个节点开始运行最近邻算法。(因此,如果有N个节点,最近邻将运行N次)然后比较并选择总距离最小的路由。这一点要精确得多。但是太慢了

另一种方法不是随机选择起始节点,而是选择一个特殊的节点。然后仍然只运行最近的邻居一次以获得结果。这不会像上面的方法那样精确,但肯定要快得多,因为算法像以前一样只运行一次。但不幸的是,我不记得在哪里读过那篇文章以及选择这个起始节点的标准

我猜我应该得到每个节点到其他节点之间的总距离,然后选择值最大的节点作为起始节点。(用我的话说,这是选择一个距离图“最远”的节点,同时也避免选择靠近图中心的节点)我认为这样我得到的路径应该非常接近最佳最短路径

我想得对吗


编辑:我正在处理带有欧几里德距离的度量TSP。

您还可以在每次执行最近邻操作时进行缓存。如果你对最近的邻居做一个调查,那就更好了。这就是它的工作原理:

  • 对于每个节点,找到K个最近邻居。将其存储在缓存中
  • 每当需要执行最近邻操作时,请先检查缓存。否则,执行最近邻并将其添加到缓存

  • 听起来您可能应该只运行K-NN算法,使用一些起始节点,比如O(logn),这只需要O(K*N*log(N))。选择最佳巡回赛,然后使用巡回赛改进启发式,或者2.5选项,限制移动次数,或者只是时间限制


    这应该考虑到时间与准确性之间的最佳平衡,除非您开始研究基于时间的算法。不过,听起来你似乎没有时间去做这些事情。

    为什么要否决这个问题……你是在使用TSP的一个公式,还是只是一个距离表?@MC Metric TSP和欧几里德距离。。