拓撲排序的 +Leapms 線性規劃模型
阿新 • • 發佈:2018-12-03
left clas lena sum gin 排序 一個 rec 進行
知識點
拓撲排序
拓撲排序的+Leapms模型
無圈有向圖
一個圖G(V,E), 如果邊有向且不存在回路,則為無圈有向圖。在無圈有向圖上可以定義拓撲排序。下圖是一個無圈有向圖的例子。
拓撲排序
給定一個無圈有向圖G(V,E),對其頂點集合V中的元素進行排序,使得對任何兩個頂點v1,v2,如果(v1,v2)是圖上的一條邊,則在排序中v1優先於v2.
拓撲排序的+Leapms模型
對圖G(V,E)中的邊的表示可以用其起始邊和終止邊表示,對第k條邊,其起始定點使用函數alpha[k]表示,其終止頂點用beta[k]表示。
設m是圖中的邊數,n是圖中的頂點數。設x[i]是頂點i的次序數(拓撲排序中允許並列次序,例如並列第2等等)。
於是對任意一條邊,其終止頂點的次序數一定至少比其起始頂點的次序數大至少1。於是有約束:
x[bata[k]]>=x[alpha[k]]+1 | k=1,...,m
希望至少從1開始編號次序數,於是有另外的約束:
x[i]>=1|i=1,...,n
為了對次序數進行緊湊編號,模型的目標設為極小化所有次序數的和:
min sum{i=1,...,n}x[i]
完整的+Leapms模型為:
min sum{i=1,...,n}x[i] subject to x[bata[k]]>=x[alpha[k]]+1 | k=1,...,m x[i]>=1|i=1,...,n where m,n are integers e is a set alpha[k],bata[k] are integers| k=1,...,m x[i] is a variable of nonnegative number| i=1,...,n data_relation m=_$(e)/2 alpha[k]=e[2k-1] | k=1,...,m bata[k]=e[2k] | k=1,...,m n=0 n=max(n,alpha[k]) | k=1,...,m n=max(n,bata[k]) | k=1,...,m data e={ (1 2) (1 3) (1 4) (2 3) (2 5) (3 5) (3 6) (4 6) (4 7) (5 6) (5 8) (6 8) (6 9) (7 6) (7 10) (8 9) (8 11) (9 11) (10 9) (10 11) }
求解過程:
+Leapms>load Current directory is "ROOT". ......... toposort.leap ......... please input the filename:toposort ================================================================ 1: // x[i] 是 i點的拓撲排序層次 2: 3: min sum{i=1,...,n}x[i] 4: subject to 5: x[bata[k]]>=x[alpha[k]]+1 | k=1,...,m 6: x[i]>=1|i=1,...,n 7: 8: where 9: m,n are integers 10: e is a set 11: alpha[k],bata[k] are integers| k=1,...,m 12: x[i] is a variable of nonnegative number| i=1,...,n 13: 14: data_relation 15: m=_$(e)/2 16: alpha[k]=e[2k-1] | k=1,...,m 17: bata[k]=e[2k] | k=1,...,m 18: n=0 19: n=max(n,alpha[k]) | k=1,...,m 20: n=max(n,bata[k]) | k=1,...,m 21: 22: data 23: e={ 24: (1 2) 25: (1 3) 26: 1 4 27: 2 3 28: 2 5 29: 3 5 30: 3 6 31: 4 6 32: 4 7 33: 5 6 34: 5 8 35: 6 8 36: 6 9 37: 7 6 38: 7 10 39: 8 9 40: 8 11 41: 9 11 42: 10 9 43: 10 11 44: } ================================================================ >>end of the file. Parsing model: 1D 2R 3V 4O 5C 6S 7End. .................................. number of variables=11 number of constraints=31 .................................. +Leapms>mip relexed_solution=45; number_of_nodes_branched=0; memindex=(2,2) The Problem is solved to optimal as an MIP. 找到整數規劃的最優解.非零變量值和最優目標值如下: ......... x1* =1 x2* =2 x3* =3 x4* =2 x5* =4 x6* =5 x7* =3 x8* =6 x9* =7 x10* =4 x11* =8 ......... Objective*=45 ......... +Leapms>
標記在圖上
拓撲排序的用途
拓撲排序在算法設計上有廣泛的用途,例如在制造資源管理中的Gozinto圖的計算等。
對上述圖如果有向邊表示次序關系,則可刪除任何起始頂點和終止頂點次序數相差大於2的邊得到更加簡化的圖,且不改變次序邏輯:
拓撲排序的 +Leapms 線性規劃模型