MathProg語言簡介(附帶例子)

綜述:我們在使用很多數學求解器時,會用到MathProg模型語言。MathProg語言能將一個純數學語言描述的模型轉化爲求解器能讀懂的格式。例如在使用線性規劃求解器GLPK求解一個線性規劃問題或者混合整數規劃問題時,就需要用到MathProg語言。下面將以一個具體的例子深入淺出地講解MathProg語言的使用規則。


一、數學模型:

                    

                              

                          


二、寫成MathProg格式

# 參數就是模型中的常量

param n,integer,>=0;  
param s,integer,>=0;
param t,integer,>=0;
param c{(i, j) in A},integer,>=1,<=20;


#集合就是模型中下標的索引空間
set V := 0..n; 
set P within V;
set Aplus := V cross V;
set Al := V cross Aplus;
set A within Aplus;

#變量就是模型中的變量
var x{(i, j) in Aplus}, binary;
var lamd{(k,i,j) in Al}, binary;

#目標函數
minimize obj : sum {(u,v) in A} c[u,v]*x[u,v];

#約束條件,必須給每個約束條件命名,名字後的花括號是約束條件中的索引空間,求和函數的索引範圍放在sum後的花括號中。
s.t.
second1{v in V: v = s}: (sum{(i,v) in A} x[i,v]) - (sum{(v,j) in A} x[v,j]) = -1;                             
second2{v in V: v = t}: (sum{(i,v) in A} x[i,v]) - (sum{(v,j) in A} x[v,j]) = 1;
second3{v in V: v <> s and v <> t}: (sum{(i,v) in A} x[i,v]) - (sum{(v,j) in A} x[v,j]) = 0; 
third{v in P}: sum{(u,v) in A} x[u,v]=1;                                         
sixth{i in V,j in V,k in V: i <> j}: lamd[k,i,j]+lamd[k,j,i]>=x[i,j];            
seventh{i in V,k in V: i <> k}: sum {j in V diff {i}} lamd[k,i,j]<=1;       
eighth{j in V,k in V: k <> j}: lamd[k,k,j]=0;                                        
ninth{u in V,v in V diff {u}: (u,v) not in A}:  x[u,v]=0;                        
tenth{u in V,v in V: (u,v) in A and (v,u) in A}: x[u,v]+x[v,u]<=1; 


#開始求解                      
solve;

#輸出變量的值
display  {(i,j) in A} x[i,j];


end;



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章