Gurobi 使用簡介教學

Gurobi全名為Gurobi Optimizer,其為一套強大的規劃求解工具,本文將引領入門初學者學習使用Gurobi進行線性規劃(LP)模式的建構與求解。

Gurobi可求解的問題類型:
  • 線性規劃(Linear Programming, LP)
  • 二次規劃(Quadratic Programming, QP)
  • 二次約束規劃(Quadratic Constrained Programming, QCP)
  • 混合整數規劃(Mixed-integer linear Programming, MILP)
  • 混合整數二次規劃(Mixed-integer Quadratic Programming, MIQP)
  • 混合整數二次約束規劃(Mixed-integer Quadratically Constrained Programming, MIQCP)
LP格式規範:
  • 變數格式:
  • 除保留符號不可使用「+、-、*、/、^、>、=、<、:、[、]」
  • 其餘可為任意英文、數字、符號
  • 例:x01, E(2), 7
  • 函數格式:
  • 係數乘以變數,乘號需省略
  • 2×x1+3×x2 寫法為 2 x1 + 3 x2
  • 函數命名「:」,例:function1: 2 x1 + 3 x2
  • 運算符號「+、-、*、/、^」
  • 括號「[、]」
  • 變數乘以變數或變數的平方須包含於括號內,
    例:2 a + [ b ^ 2 - b * c ]
  • 不等式「>、<、=、>=、<=」
  • 不等式格式:
  • 符號、係數、變數、常數都要以空白符號隔開
  • 變數在前項,常數在後項
  • 正確範例: 2 x1 + 3 x2 > 10
  • 錯誤範例: 10<2x1+3x2
  • 例外:於變數範圍限制(Bounds)的部分可使用範圍限制寫法,
    例: 10 <= x1 <= 15
  • 無限制寫法: x1 Free
  • 單邊無限制寫法:
    -Infinity <= x1 <= 15
     10 <= x1 <= Infinity
  • 檔案儲存格式:
  • 以附檔名lp存檔,例  model.lp
  • 功能區塊格式:
  • 目標式
    Maximize 最大化問題
    Minimize 最小化問題
  • 限制式
    Subject To
  • 變數範圍限制
    Bounds 預設範圍為非負實數(>=0)
  • 變數屬性
    General, Integer 整數
    Binary  二元變數
  • 結束標籤
    End
  • 範例 (MIQCP):
    Maximize
      x + y + z
    Subject To
      c0: x + y = 1
      c1: x + 5 y + 2 z <= 10
      qc0: x + y + [ x ^ 2 - 2 x * y + 3 y ^ 2 ] <= 5
    Bounds
      0 <= x <= 5
      z >= 2
    General
      x y z
    End
求解步驟:
  1. 執行gurobi.bat啟動Gurobi
  2. 於Gurobi命令視窗內輸入指令
  3. 讀取問題
    格式:m = read('[模式檔案位置]')
    區隔符號為斜線「/」
    範例:gurobi> m = read('C:/model.lp')
  4. 開始求解
    範例:gurobi> m.optimize()
  5. 等待求解完成或使用Ctrl+C中斷
  6. 目標值相關求解資訊會顯示於畫面上
  7. 顯示決策變數
    範例:gurobi> m.printAttr('X')
  8. 寫出求解結果
    格式:m.write('[輸出檔案名稱].sol')
    範例:gurobi> m.write('output.sol')
  9. 離開
    範例:gurobi> quit()

附註:
  1. 如果你覺得這篇文章似曾相似,表示你讀過這篇
  2. Gurobi為CPLEX成員新開發的規劃求解工具,故在許多地方都很相似
  3. Gurobi在求解能力上超越CPLEX,但是沒有自己的GUI介面

參考資料:GUROBI DOCUMENTATION

留言

這個網誌中的熱門文章