線性規劃工具 GLPK 的安裝及基本使用

線性規劃工具 GLPK 的安裝及基本使用 
分類: 數學 計算機科學 工具 2012-12-12 14:02 418人閱讀 評論(0) 收藏 舉報 
目錄(?)[+]
線性規劃工具GLPK 的安裝及基本使用
概述
安裝
基本使用
用途
參考資料
線性規劃工具 GLPK 的安裝及基本使用
1 概述
2 安裝
3 基本使用 
4 用途
1 概述
GLPK 全稱GNU Linear Programming Kit.顧名思義,這是GNU計劃下一個用於解線性規 劃(Linear Programming)的工具包。它可以方便的描述線性規劃問題,並給出相應解。 
GLPK 的主頁爲:http://www.gnu.org/software/glpk/
2 安裝
Ubuntu下一條命令即可: sudo apt-get install glpk
3 基本使用
線性規劃問題描述 首先需要一個文件glpsolEx.mod來描述你的線性規劃問題,示例如下[cpp] view plaincopyprint?/* Variables */  
var x1 >= 0;  
var x2 >= 0;  
var x3 >= 0;  
  
/* Object function */  
maximize z: 3*x1 + x2 +2*x3;  
  
/* Constrains */  
s.t. con1: x1 + x2 + 3*x3 <= 30;  
s.t. con2: 2*x1 +2*x2 + 5*x3 <= 24;  
s.t. con3: 4*x1 + x2 + 2*x3 <= 36;  
  
end;  


/* Variables */
var x1 >= 0;
var x2 >= 0;
var x3 >= 0;


/* Object function */
maximize z: 3*x1 + x2 +2*x3;


/* Constrains */
s.t. con1: x1 + x2 + 3*x3 <= 30;
s.t. con2: 2*x1 +2*x2 + 5*x3 <= 24;
s.t. con3: 4*x1 + x2 + 2*x3 <= 36;


end;




使用glpk解此問題 glpsol -m glpsolEx.mod -o glpsolEx.sol  
-m filename: 指定描述問題的文件  
-o filename: 指定輸出結果保存在哪個文件
結果 [plain] view plaincopyprint?Problem:    glpsolEx  
Rows:       4  
Columns:    3  
Non-zeros:  12  
Status:     OPTIMAL  
Objective:  z = 28 (MAXimum)  
  
   No.   Row name   St   Activity     Lower bound   Upper bound    Marginal  
------ ------------ -- ------------- ------------- ------------- -------------  
     1 z            B             28                               
     2 a            B             12                          30   
     3 b            NU            24                          24      0.166667   
     4 c            NU            36                          36      0.666667   
  
   No. Column name  St   Activity     Lower bound   Upper bound    Marginal  
------ ------------ -- ------------- ------------- ------------- -------------  
     1 x1           B              8             0                 
     2 x2           B              4             0                 
     3 x3           NL             0             0                   -0.166667   
  
Karush-Kuhn-Tucker optimality conditions:  
  
KKT.PE: max.abs.err = 0.00e+00 on row 0  
        max.rel.err = 0.00e+00 on row 0  
        High quality  
  
KKT.PB: max.abs.err = 0.00e+00 on row 0  
        max.rel.err = 0.00e+00 on row 0  
        High quality  
  
KKT.DE: max.abs.err = 2.22e-16 on column 1  
        max.rel.err = 3.17e-17 on column 1  
        High quality  
  
KKT.DB: max.abs.err = 0.00e+00 on row 0  
        max.rel.err = 0.00e+00 on row 0  
        High quality  
  
End of output  


Problem:    glpsolEx
Rows:       4
Columns:    3
Non-zeros:  12
Status:     OPTIMAL
Objective:  z = 28 (MAXimum)


   No.   Row name   St   Activity     Lower bound   Upper bound    Marginal
------ ------------ -- ------------- ------------- ------------- -------------
     1 z            B             28                             
     2 a            B             12                          30 
     3 b            NU            24                          24      0.166667 
     4 c            NU            36                          36      0.666667 


   No. Column name  St   Activity     Lower bound   Upper bound    Marginal
------ ------------ -- ------------- ------------- ------------- -------------
     1 x1           B              8             0               
     2 x2           B              4             0               
     3 x3           NL             0             0                   -0.166667 


Karush-Kuhn-Tucker optimality conditions:


KKT.PE: max.abs.err = 0.00e+00 on row 0
        max.rel.err = 0.00e+00 on row 0
        High quality


KKT.PB: max.abs.err = 0.00e+00 on row 0
        max.rel.err = 0.00e+00 on row 0
        High quality


KKT.DE: max.abs.err = 2.22e-16 on column 1
        max.rel.err = 3.17e-17 on column 1
        High quality


KKT.DB: max.abs.err = 0.00e+00 on row 0
        max.rel.err = 0.00e+00 on row 0
        High quality


End of output


結果中x1 x2 x3對應的activity就是他們最終的結果,即取此結果,目標值最大。z的Activity爲28,即最大值爲28。
4 用途
glpk的用途是可以快速驗證一個新建立的線性規劃模型是否正確。在我們對一類實際問題進行抽象後,準備用線性規劃來解,可以先做一些小的case,寫出相應的線性規劃方程,然後用glpk來快速得到結果,以便驗證我們的想法,並給我們一些新的想法和直覺。一旦這些直覺得以證明。我們就可以用線性規劃解決更大規模的問題,並用glpk來求出結果。
參考資料:
1 http://www.ibm.com/developerworks/cn/linux/l-glpk1/index.html

2 http://blog.csdn.net/yxf/article/details/1595058

原文:http://blog.csdn.net/on_1y/article/details/8286289

發佈了49 篇原創文章 · 獲贊 16 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章