簡體   English   中英

同時考慮節點和邊的圖上路徑查找算法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM