【发布时间】:2012-02-22 03:17:44
【问题描述】:
前几天,有人问我,如果我们的环境中有一些代理,并且他们想从他们的源头到他们的目的地,我们如何才能为所有这些代理找到他们不应该有的总最短路径走路时发生冲突。
问题的关键是所有代理同时在环境中行走(可以通过无向加权图建模),我们不应该有任何碰撞。我考虑过这一点,但我找不到所有这些的最佳路径。但是对于这个问题,肯定有太多的启发式想法。
假设输入是图 G(V,E),m 个代理分别位于:S1, S2,...,Sm 启动时图的节点,它们应该在最后到达节点 D1,...Dm。也可能是节点 Si 或 Di 中存在冲突,...但这些冲突不是重要的是,当它们位于路径的内部节点时,它们不应该发生冲突。
如果他们的路径不应该有相同的内部节点,那将是一种k-disjoint paths 问题,即NPC,但在这种情况下,路径可以有相同的节点,但代理不应该同时在同一个节点。我不知道我能不能说出确切的问题陈述。如果令人困惑,请在 cmets 中告诉我进行编辑。
是否有任何最优且快速的算法(最优是指所有路径的长度之和尽可能小,快速是指良好的多项式时间算法)。
【问题讨论】:
-
是否允许代理停留在给定节点?还是他们必须在每次迭代中走动? (您可以通过创建通往节点本身的边来模拟停留成本)
-
@Zeta,其实是的,但我没有说这个,因为我认为它会更复杂。但是,如果您对此有解决方案,那就太好了。
-
我还没有解决方案,抱歉,但这会改变最佳解决方案:Example。如果不允许等待,则所有长度的最小总和为
100+100+2=202。如果允许等待并且花费小于 66(比如 40),那么所有长度的最小总和是40+1+1 + 40+40+1+1 + 2 = 42+82+2 = 126。 -
@Zeta,很好的样本,但我认为解决我们当前问题的算法可以解决停留问题(正如你所说,只是在图的每个节点上添加循环)。
-
我几乎可以向你保证这是一个 NP 完全问题。我会看看试图证明它是 NP 完备的。