图表中的最佳路径以最大化值

时间:2014-04-27 03:35:31

标签: algorithm graph dynamic-programming mathematical-optimization

我试图为这个问题提出合理的算法:

我们说我们有很多地方。我们知道每对位置之间的距离。每个位置也有一个点。目标是在从起始位置到目的地位置旅行时最大化点数之和,而不超过给定的距离。

这是一个简单的例子: 起始位置:C,目的地:B,给定距离:45 enter image description here

解决方案:C-A-B路线9点

我只是好奇是否存在针对此类问题的某种动态算法。这个问题的最佳方法或最简单方法是什么?

非常感谢任何帮助。

修改:您不得多次访问同一位置。

1 个答案:

答案 0 :(得分:6)

编辑:根据新添加的限制,每个节点只能访问一次,问题绝对是NP-hard通过缩减到Hamilton路径:对于一般的无向,未加权的图,设置全部边权重为零,每个顶点权重为1.然后,如果原始图中存在汉密尔顿路径,则最大可达分数为 n

因此,研究integer linear programming求解器可能是一个好主意,例如那些并非专门构造为难的家族。

下面的解决方案假设可以多次访问一个顶点,并利用节点权重受常量限制的事实。


p(x)为顶点 x 的点值, w(x,y)为边缘的距离权重{x,y}或 w(x,y)=∞如果 x y 不相邻。

如果我们被允许多次访问一个顶点,如果我们可以假设 p(x)&lt; = C 对于某些常量 C ,我们可能会离开具有以下重复:让 f(x,y,P)是我们在收集<时从 x y 所需的最小距离em> P 点。我们有

  对于所有P      对于所有x

f(x,x,p(x))= 0      

f(x,y,P)= MIN(z,w(x,z)+ f(z,y,P - p(x)))

我们可以使用动态编程来计算 f 。现在我们只需要找到最大的 P ,这样

  

f(开始,结束,P)&lt; =距离上限

P 是解决方案。

这种算法具有天真实现的复杂性是 O(n ^ 4 * C)。如果图形稀疏,我们可以通过使用 MIN 聚合的邻接列表来获得 O(n ^ 2 * m * C)