边缘预算的最大简单路径

时间:2012-07-08 05:56:48

标签: algorithm graph graph-theory graph-algorithm

这是自我提出的问题的一部分,因此我无法“谷歌”它,我自己的尝试到目前为止是徒劳的。

为您提供 G(V,E) V 的每个节点的图表 wi E 的每个 Edge 的成本都为 ci 。我们现在给出了预算 C ,需要找到的是单一路径,使得成本之和小于 C ,其中 wi <的总和/ strong>是maximum.Path在此处具有正常定义,即路径不包含重复顶点(简单路径)。

很明显汉密尔顿路径是这种情况的一个特例(设置成本= | N-1 |并且每个边缘的成本= 1),因此这是一个NP难题,所以我在寻找近似解和启发式。

数学

鉴于图表 G(V,E)

每条边

ci> = 0 e

每个顶点的

wi&gt; = 0 v

找到一条简单的路径 P ,以便

P &lt; = C

e 的所有边 c

P

中的所有 v 最大化 Sum wi

2 个答案:

答案 0 :(得分:1)

这被称为选择性旅行商问题,或带有利润的旅行推销员。 Google学术搜索应该能够为您提供一些参考。经常使用诸如遗传编程或禁忌搜索的元启发式。如果您想以最佳方式解决问题,线性编程技术可能会起作用(遗憾的是,您没有说明您正在处理的实例的大小)。如果路径的长度很小(比如15个顶点),那么color-coding也可能有用。

答案 1 :(得分:0)

一个简单的启发式概念是随机hill climbinggreedy algorithm的变体。

定义权重增加并随成本减少的价值函数。例如:

value(u,v) = w(v) / [c(u,v) + epsilon]
(+ epsilon for the case of c(u,v) = 0)

现在,这个想法是:
从顶点u开始,以概率:

前进到顶点v
P(v|u) = value(u,v) / sum(u,x) [ for all feasible moves (u,x) ]

重复直到你无法继续。

这个解决方案会给你一个解决方案 - 很快,但它可能不是最接近的。然而 - 它是随机的 - 你可以随时重新运行它,而你有时间。
这将为您提供针对此问题的 anytime 算法,这意味着 - 您拥有的时间越多,您的解决方案就越好。

一些优化:

  • 您可以尝试学习宏来加速每次搜索,这样可以在每个时间段内搜索更多内容,并且可能会提供更好的解决方案。
  • 通常情况下,第一次搜索不是随机的,只是跟随max{value(u,v)}
  • 纯粹贪婪