最近幫人做了乙個混合整數線性規劃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...