[英]Pyomo scaling with GLPK
我有一個(相當)簡單的Pyomo模型,其中包含5個參數和一組大小48(代表時間間隔)。 如果我使用特定的數據文件,則GLPK絕對可以正常工作:
# Data file
param : n := 48;
param : E_demand :=
1 231.674545
2 223.328638
3 218.047274
4 212.285910
5 214.539544
6 213.940455
7 216.871637
8 205.824183
9 208.905001
(此過程以相似的方式繼續進行,直到索引48和另外4個參數為止)。
但是,如果我使用另一個(只是略有不同)數據文件,則該問題需要花費更長的時間來解決(從不到一秒到超過20分鍾,所以我不費心找出更長的時間)。 如果僅將兩個參數更改為它們的值的1/3(如下所示),則該問題將需要更長的時間才能解決。
param : E_demand :=
1 76.464996
2 69.815002
3 71.355003
4 75.004997
5 72.360001
6 71.065002
7 70.669998
8 71.809998
9 72.309998
我認為問題一定與縮放有關,因為如果我逐漸將較小的值從一個數據文件替換為另一個數據文件,則該問題將花費更多的時間,直到變得緩慢。 有沒有辦法使用Pyomo更改glpk縮放? 使用其他求解器可能會解決此問題嗎?
對於ConcreteModel
,您始終可以在模型構建期間通過檢查參數值並在模型公式中應用相關的縮放因子來實現某種形式的縮放。
在Pyomo問題頁面上可以找到有關變量/約束縮放的類似討論: https : //github.com/Pyomo/pyomo/issues/219
您可以嘗試gurobi求解器。 從個人經驗來看,我認為古羅比在大選擇問題上比GLPK更好,更穩定。 而且,如果您的選擇問題是LP,則在將數據文件更改為原始文件的1/3時,它不會產生任何解決差異。 由於這是同一件事,例如:
def constraint(m, n):
m.E_demand[n] <= m.x
Demand[1] = 200
或73
都沒有任何區別。 但是,我當然不知道您的模型,所以這只是一個假設。
這是gurobi求解器: http : //www.gurobi.com/ ,出於學術目的也是免費的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.