这是自我提出的问题的一部分,因此我无法“谷歌”它,我自己的尝试到目前为止是徒劳的。
为您提供 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 的所有边为 P
中的所有 v 最大化 Sum wi答案 0 :(得分:1)
这被称为选择性旅行商问题,或带有利润的旅行推销员。 Google学术搜索应该能够为您提供一些参考。经常使用诸如遗传编程或禁忌搜索的元启发式。如果您想以最佳方式解决问题,线性编程技术可能会起作用(遗憾的是,您没有说明您正在处理的实例的大小)。如果路径的长度很小(比如15个顶点),那么color-coding也可能有用。
答案 1 :(得分:0)
一个简单的启发式概念是随机hill climbing和greedy 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)}