tsp旅行商問題是運籌學領域乙個經典問題,乙個旅行商訪問所有的城市,每個城市僅訪問一次,總路程最短。
問題的模型如圖:目標函式:總路程最短
決策變數xij:若經過以ij為節點的邊,則xij=1,否則為0
約束2:子迴路約束,對任意乙個v的子集,去掉v子集和空集,邊的數量小於等於點的數量減去1,比如三個點,為了沒有自迴路,最多有兩條邊
# city x y
berlin 5251 1340
frankfurt 5011 864
leipzig 5133 1237
heidelberg 4941 867
karlsruhe 4901 840
hamburg 5356 998
bayreuth 4993 1159
trier 4974 668
set v :=
;set e :=
;set p[
] := powerset (v)
;set k := indexset (p)
;param px[v] :=read "nodes.txt" as "<1s> 2n" comment "#"
;param py[v] :=read "nodes.txt" as "<1s> 3n" comment "#"
;defnumb dist(a,b) :=sqrt(
(px[a]-px[b]
)^2 + (py[a]-py[b]
)^2 )
;var x[e] binary;
minimize cost :
sumin e : dist (i,j)*x[i,j]
;subto two_connected : forall
in v do
(sum
in e : x [v,j]
)+(sum
in e : x [i,v]
)==2;
subto no_subtour : forall
in k with card(p[k]
)>=2 and card(p[k]
)<=card(v)-1 do
(sum
in e with
in p[k] and
in p[k]
: x[i,j]
)<=card(p[k]
)-1;
執行步驟基本相似,參考:cip7.0!求解二維線性規劃奶奶級詳細教程
set v := ;
旅行商問題
旅行商問題 乙個商人從城市a出發,訪問bcde等城市各一次最後回到a,問行程如何使得路程或費用最低。這是個np 非多項式可解,但一般驗證容易 問題,假設中間有4個城市,那麼全排列為4!24種,沒有很好的演算法,基本只能窮舉了。class vertex 4 public class lianxi pu...
旅行商問題
一銷售商從n個城市中的某一城市出發,不重複地走完其餘n 1個城市並回到原出發點,在所有可能的路徑中求出路徑長度最短的一條。本題假定該旅行商從第1個城市出發。對每個測試例,第1行有兩個整數 n 4 n 10 和m 4 m 20 n是結點數,m是邊數。接下來m行,描述邊的關係,每行3個整數 i,j le...
旅行商問題
題意 旅行商問題,即從 1 走到 n 不重不漏,然後求最小距離。題解 狀態壓縮dp,顯然的是,要從某種狀態到某種狀態並且合法,然後取 min 然後全部遍歷。所以設 dp 的含義是,最後乙個點是 i 點,然後走過了 j 這個 01 串的有 1 的點。然後要想的是順序問題,那麼我們必然是從上乙個點推到 ...