【问题标题】:Algorithm for shortest path to traverse all nodes by several salesmen多个推销员遍历所有节点的最短路径算法
【发布时间】:2020-11-17 22:42:38
【问题描述】:

有一个未加权的有向图可能包含双向边。有固定数量的推销员。每个业务员可以从任何节点开始。每个节点应至少访问一次。我需要最小化每个推销员的路径。我可以使用哪种算法来解决这个问题?

【问题讨论】:

  • 这显然是TSP的变种,只要设置#salesman = 1就能解决这个问题,就可以解决TSP。
  • 似乎是Vehicle routing problem(可能带有一些额外的辅助节点以允许在任意节点“启动”)
  • @Bergi 谢谢你的建议。我去看看

标签: algorithm graph


【解决方案1】:

这个问题是Travelling Salesman Problem (TSP) 的变体,称为多旅行推销员问题或mTSP。更准确地说,它是 MDVRP,用于多场站车辆路径问题。
这个问题是 TSP 问题的推广,也是 NP-hard。

有几种方法可以解决这个问题,每种方法都有自己的优缺点。您可以选择一个。

首先,您必须回答一个简单的问题:您需要最优解,还是可以接受近似值?如果您的输入相对较大(例如,数十辆车辆访问数百个节点),则最佳算法是不可能的(世界上可能没有足够的能量来计算一个世纪内的最佳解决方案)。
逼近算法可以非常有效,并提出非常好的逼近。

在算法方面,您可以考虑以下算法/方法列表:

  • 蛮力:有几辆车和几个节点,这将是完美的。否则,您可以忘记它。
  • Branch and Bound:它可以是解决一些优化问题的有效方法,但在你的情况下,我不推荐它作为高级解决方案。
  • Metaheuristics:这个术语包含了一系列非常有效的方法,例如局部搜索、遗传算法、模拟退火、蚁群……它们是近似算法,但它们的优势是能够处理非常大的输入,并快速提供一个不错的近似值。它们通常不太难实现,尤其是在图形问题上。
  • Mixed-integer linear programming (MILP):由于 mTSP 问题可以写成 MILP,所以可以使用 CPLEX、Gurobi 或 LocalSolver 等 MILP 求解器来求解。这种方法有几个优点:假设您对数学编程有一点经验,它们非常容易编写,并且它们通常具有非常好的性能。出于几个原因,我会推荐这种方法而不是其他方法。首先,我相信您将获得“工作时间与解决方案质量”的最佳权衡。其次,您可以添加一些其他约束(例如,车辆不应连续行驶 15 小时,因为人类驾驶员是人类)。第三,您可以运行求解器一分钟或一小时,这是您的选择。随着它的运行,您将获得越来越好的解决方案,以及一个界限(例如,您会知道您的解决方案最多比最优解决方案差 8.7%,这总是很高兴向管理层报告)。如果您对此方法有任何疑问,可以在OR stackexchange 上提问。
  • 如果您有足够的专业知识来阅读科学论文,并且有足够的时间和技能去做,您可以挖掘文献并编写自己的算法。如果我们谈论的是一家非常大的公司,这将是一个很好的解决方案,其中从解决方案中获得的每一百分比都代表着大量资金(例如,一家在国家一级拥有数百/数千辆汽车的公司)。如果你决定去做,你可能会得到更好的解决方案,但对于一个经验丰富的小型团队来说,可能需要(至少)几个月的时间。您可以从this survey 开始了解概况(但请注意,该调查是 14 岁,更好的方法可以在最近的论文中描述)。要查找非常相似的问题,“MDVRP”一词是您的朋友。

TL;DR:将您的问题写成 MILP,并将其提供给求解器。这是 TSP 变体的最佳折衷方案,尤其是因为很多求解器都有面向 TSP 的优化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多