![](/img/trans.png)
[英]Considering Start point and end point on edge, not Node of graph in Path finding algorithm for Road Network Graph
[英]Path finding algorithm on graph considering both nodes and edges
我有一個無向圖。 現在,假設該圖已完成。 每個節點都有一個與之關聯的特定值。 所有邊緣的重量都為正。 我想找到任意兩個給定節點之間的路徑,以使與該路徑節點關聯的值的總和最大,同時路徑長度在給定的閾值內。 解決方案應該是“全局”的,這意味着在所有可能的路徑中獲得的路徑應該是最佳的。 我嘗試了線性編程方法,但無法正確地表述它。 任何建議或其他解決方法都會有很大幫助。
謝謝!
這可能並不完美,但是如果閾值(T)足夠小,則可以在O(n ^ 3 T ^ 2)中運行一個簡單的算法。 這是Floyd-Warshall的一個小修改。
d = int array with size n x n x (T + 1)
initialize all d[i][j][k] to -infty
for i in nodes:
d[i][i][0] = value[i]
for e:(u, v) in edges:
d[u][v][w(e)] = value[u] + value[v]
for t in 1 .. T
for k in nodes:
for t' in 1..t-1:
for i in nodes:
for j in nodes:
d[i][j][t] = max(d[i][j][t],
d[i][k][t'] + d[k][j][t-t'] - value[k])
The result is the pair (i, j) with the maximum d[i][j][t] for all t in 0..T
編輯: 這假設允許路徑不簡單,它們可以包含循環。
EDIT2: 這還假定,如果一個節點在路徑中出現多次,則將被計數一次以上。 這顯然不是OP想要的!
如果您在一般圖中尋找算法,則問題是NP-Complete,假設路徑長度閾值是n-1,並且每個頂點的值為1
,如果找到問題的解決方案,則可以說給定圖具有哈密頓路徑或不。 實際上,如果最大化的頂點大小路徑的值為n
,則您具有哈密頓路徑。 我認為您可以使用Held-Karp松弛之類的方法來找到好的解決方案。
整數程序(這可能是個好主意,也可能不是):
對於每個頂點v,如果訪問了頂點v,則令x v為1,否則為0。 對於每個弧,令y是一個的次數電弧A被使用。 令s為來源,t為目的地。 目的是
最大化∑ v值(v)x v 。
約束是
Σ 的值(a)中Y A≤閾∀v,Σ 一個具有頭部S Y A - Σ 一個具有尾巴v Y A = {-1,如果V = S; 如果v = t,則為1; 否則為0(節省流量)
∀v≠x,x 垂直 ≤Σ 一個具有頭部S Y A(必須輸入一個頂點訪問)
∀v,X V≤1(訪問最多每個頂點一次)
∀v∉{S,T},∀cuts期從{S,T}該單獨頂點v,x 垂直 ≤Σ 一個,使得尾的(a)∉小號∧頭()∈šY A(從頂點唯一的好處不在孤立的循環上)。
要求解,請使用松弛值進行分支定界。 不幸的是,最后一組約束的數量是指數的,因此,當您求解寬松的對偶時,需要生成列。 通常,對於連接問題,這意味着重復使用最小切割算法以查找值得執行的切割。 祝好運!
如果僅將節點的權重添加到其出站邊緣的權重,則可以忽略該節點的權重。 然后,您可以使用任何標准算法來解決最短路徑問題 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.