说,我们有一个循环列表,代表旅行商问题的解决方案。此列表最初为空。
如果允许用户进入一个城市并逐个进行协调,那么可以使用什么启发法将这些坐标插入到现有的游览中?
示例使用最近邻启发法:它在巡回中已经存在的最近坐标之后插入新坐标。
还有哪些其他选项(如有可能,则为伪代码)。
答案 0 :(得分:1)
您当然可以概括您提到的想法:
定义k'th_path(v) = minimum weight of a path including max{k,not_visited cities} cities
请注意,计算第k个路径为O(|V|^k)
[此界限不紧]
特殊情况:
k=1
,您可以按照建议获得最近的邻居。k=|V|
,您可以获得最佳解决方案[请注意,计算结果非常广泛。] 答案 1 :(得分:1)
您可以使用大量的构造启发式方法,例如First Fit,First Fit Decreasing,Best Fit,Best Fit Decreasing和最便宜的插入。 这些结构启发式通常应用于bin包装,但它们也可以转换为TSP。 Documentation about those heuristics is here.
由于您当时只插入1个未分配的实体,所有这些基本上都会恢复为您所谓的最近邻启发式(关系略有变化),但请注意,这不是他们通常称之为最近邻居。最近邻居总是添加到行的末尾,即所有未分配实体的最近邻居。
现在,您真正想要的是一个不错的解决方案,无需重新启动整个构建启发式。这更难:欢迎repeated planning and real-time planning(和this documentation)。我正在研究一个用于实时规划的TSP和车辆路由的开源示例。
答案 2 :(得分:0)
没有其他启发式方法,因为TSP总是要找到最近的坐标。至少我不知道一个算法可以插入一个坐标并知道最近的坐标但是有很多算法可以找到一个好的游览。一个好的启发式算法就是Christofides算法,它仅适用于euklidian空间,但它可以保证解决方案在最佳值的3/2范围内。编码并不容易。特别是edmond blossom v算法是专业技能。保证的重要性不够高,因为您如何解释您的方法在某种罕见情况下无法提供意义?