问题描述
我正在尝试编写一种遍历具有k条不同路径的访问所有节点的方法,以使我一次访问所有节点。可以从每个其他节点到达每个节点,并且我们所有人都是从相同的起始位置开始,而终止位置不明确。我们只想在最短的时间内访问所有节点。
有点像有k个推销员的旅行推销员,对返回我们的起点没有限制
任何想法或方向都会有所帮助
解决方法
这可能是NP难题,因此最佳解决方案将需要很长时间才能运行。
我也可能会选择一个随机贪婪的解决方案,该解决方案通常会工作得很好:
- 随机选择K个起点,将其标记为已访问。
- 跨所有路径的起点/终点(沿任一方向)跳转到下一个最接近的未访问点。将该地点标记为已访问。
- 重复步骤2,直到没有未访问的点为止。注意使用的路径和总距离。
- 重复1-3次X,返回使用X次行程总距离较短的路径。
可能在#3上可以进行一些后处理优化,以提高性能。 IE:再次运行算法(1-3),但将每个路径的终点用作起点。