使用GLPK进行Pyomo缩放

问题描述 投票:0回答:2

我有一个(相当)简单的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缩放?使用不同的解算器可能会解决这个问题吗?

python optimization scaling glpk pyomo
2个回答
0
投票

对于ConcreteModel,您可以通过检查参数值并在模型公式中应用相关的缩放因子,在模型构建期间始终实现某种形式的缩放。

关于变量/约束缩放的类似讨论可以在Pyomo问题页面上找到:https://github.com/Pyomo/pyomo/issues/219


0
投票

你可以试试gurobi求解器。从个人经验来看,我认为gurobi比GLPK更好,更稳定,因为大的选择问题。如果您的选择问题是LP,那么当您将数据文件更改为原始文件的1/3时,它不会产生任何解决方案的差异。因为它是一样的,例如:

def constraint(m, n):
    m.E_demand[n] <= m.x

无论是Demand[1] = 200还是73都没有任何区别。但是,我并不真正了解你的模型,所以这只是一个假设。

这里是gurobi求解器:http://www.gurobi.com/,它也可以免费用于学术目的。

© www.soinside.com 2019 - 2024. All rights reserved.