python gurobipy數學建模

2021-10-14 12:50:10 字數 1715 閱讀 5098

最近幫人做了乙個混合整數線性規劃case,使用了gurobipy優化庫。學術版官網可以直接申請licence,三個月有效然後可以繼續申請。總比要收費的cplex好點哈哈。但是還是遇到了一些坑,現在把整個問題與解決方案,**,遇到的坑都記錄一下。

對比cplex,gurobipy更適合復現乙個優化問題,因為gurobipy不用把優化問題寫成矩陣相乘的標準形式而是直接堆公式就行。

比如二次規劃,不用寫成:

xtqx + a*x的形式而是直接可以迴圈定義目標函式

然後就是gurobipy必須要求問題是半正定的,如果不是需要增加引數:

m.setparam(

'nonconvex',2

)# for nonconvex problem

# solve the problem :gurobipy.gurobierror: objective q not psd (diagonal adjustment of 1.0e+00 would be required)

from gurobipy import

*# 匯入

# 定義乙個模型

m = model(

)# 設定一些引數 求解時長,精度等

m.setparam(

'nonconvex',2

)m.setparam(

'mipgap'

,0.0001

)m.setparam(

'timelimit'

,100

)# 定義優化變數

x1 = m.addvar(vtype=grb.continuous, lb=

20, ub=

30, name=

"x1"

)x2 = m.addvar(vtype=grb.continuous, lb=

20, ub=

30, name=

"x2"

)# 設定目標函式

m.setobjective(x1 * x2, grb.maximize)

# 求最大問題 or 求最小問題

m.update(

)# 新增約束 可以在設定目標函式前 或者後都可以

c_x = linexpr(

)c_x -=x1

c_x -=x2

m.addconstr(c_x<=50)

m.update(

)# 進行求解

m.write(

'assign.lp'

)# 問題列印

m.optimize(

)# 結果匯出

if m.solcount ==0:

print

("model is infeasible"

) m.computeiis(

) m.write(

"model_iis.ilp"

)# 出問題無法滿足的約束與殘差可以列印出來debug

print

('optimal value: %d'

% obj.getvalue())

print

('optimal solution:{} {}'

.format

(x1,x2)

)x1_output = x1.x

x2_output = x2.x# 取出變數最優值到python變數裡

總計67個約束20個變數

Catalan數(卡特蘭數)

卡特蘭數 規定h 0 1,而h 1 1,h 2 2,h 3 5,h 4 14,h 5 42,h 6 132,h 7 429,h 8 1430,h 9 4862,h 10 16796,h 11 58786,h 12 208012,h 13 742900,h 14 2674440,h 15 969484...

卡特蘭數 Catalan數

卡特蘭數 規定h 0 1,而h 1 1,h 2 2,h 3 5,h 4 14,h 5 42,h 6 132,h 7 429,h 8 1430,h 9 4862,h 10 16796,h 11 58786,h 12 208012,h 13 742900,h 14 2674440,h 15 969484...

Catalan數(卡特蘭數)

2012 04 12 21 08 13 標籤 卡特蘭數 原始出處 作者資訊和本宣告。否則將追究法律責任。卡特蘭數 規定h 0 1,而h 1 1,h 2 2,h 3 5,h 4 14,h 5 42,h 6 132,h 7 429,h 8 1430,h 9 4862,h 10 16796,h 11 58...