我想解决以下问题:
我有一个DAG,其中包含需要完成的城市和工作。这些工作适用于可以加载定义限制的卡车。卡车装载得越多,旅行就越好。有些工作用于加载某些内容,有些用于加载已定义的内容。即使在他们之间没有工作要做,你总是可以从城市a到b开车。 最后一个限制是我总是需要从城市a开始并返回到a,因为有卡车的所在地:)
我首先想到了Dijkstra的最短路径算法。我可以很容易地把它变成最长的路径计算。我的问题是,现在所有这些算法都是用于计算从顶点a到b的最短路径或最长路径,但是我需要从返回到 - 在一个圆圈中。
我的脑子里有一些人踢了吗?
感谢您的反馈!
马
答案 0 :(得分:2)
背包与travelling salesman这种疯狂的组合肯定是NP-hard。
几乎无处不在,当您想要使用最佳作业计划加载代理程序,或者想要在图表中构建通过所有顶点的路径时,或者当您认为需要查找“longest path时*“,您很可能会遇到NP-complete或NP-hard问题。
这意味着,没有已知的快速且精确的问题解决方案,即在多项式时间内运行的解决方案。
因此,您必须根据特定的条件创建近似值并实现非最佳算法。什么时候可以接受损失?卡车可以驾驶还有其他模式吗?您对图表有更多了解(例如,区域是否分为远处密集区域)?回答这些问题,您将找到满足您客户需求的非严格启发式方法。
*是的,搜索最长路径并不像您想象的那么容易。鉴于您的图表不非循环,最长路径问题是NP完全的。
答案 1 :(得分:1)
您是否正在尝试找到最简单的方法来完成所有工作?这让我想起了最大流量/最小切割问题。您可以通过以下方式估算出最佳答案:
end
节点。a
和end
之间的最大流量。a
。更新图表以反映您刚才所做的事情。重复,直到完成所有工作。这个想法是每次旅行都能获得最大的收获。第一次之后的每次旅行都会效率低下,效率也会降低,但这是可以预期的。
注意:这只适用,因为你有一个DAG。旅行推销员也不会在DAG上完成NP-Complete,甚至可能无法点击图表上的所有节点。重新阅读你的问题,似乎你没有DAG,因为你可以回到城市a
- 这是真的吗?
答案 2 :(得分:0)
您可以根据自己的需要调整旅行销售人员问题动态编程算法。
经典方法表明,您希望最大限度地发挥所有城市的最佳功能,但您可以在每一步都考虑到回家的可能性。
就像帕维尔提到的那样,这个问题肯定是NP难的。您是否有城市数量的上限或可以装载到卡车中的最大物体数量?
PS:你想要最佳解决方案(最大利润 - 在处理时间方面可能不太现实)或你接受一些近似值?
答案 3 :(得分:0)
根据卡车编号和起点,您可以添加假交通或增加费用以满足您的限制。
我也会问卡车限制: