SCIP求解器解決旅行商問題

2021-10-05 07:49:58 字數 1462 閱讀 3493

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 的點。然後要想的是順序問題,那麼我們必然是從上乙個點推到 ...