如何使用 Pyomo DataPortal 导入具有 3 个索引的参数? (抽象模型,Excel 导入)

How to import a parameter with 3 indizes with Pyomo DataPortal? (Abstract Model, Excel Import)

我有问题。我想描述一个用于一般生产计划的抽象优化模型。我有一个巨大的 excel 数据框,其中包含很多参数值。我想导入它们,但是具有 3 个索引的参数存在构造错误。我不明白失败,因为值的预览是完美的。

仅供参考:如果我导入带有一个或两个索引的参数,则没有错误消息。如果我在我的 jupyter notebook 中初始化参数值(也有 3 个索引),也没有错误。但我的愿望是,data-frame 和 jupyter notebook 是分开的。

这是我的问题的一个简化的虚构示例:

m.K = Set(initialize=['Golf','eGolf'], doc='Produkte K')
m.T = Set(initialize=['1','2','3','4','5','6','7','8','9','10','11','12'], doc='Perioden T')
m.J = Set(initialize=['Seg1','Seg2'], doc='Produktionssegmente J')
m.W = Set(initialize=['WOB','Z','DD'], doc='Werke W')
m.bc      = Param(m.W, m.K, doc='var. Fremdbezugskosten im Werk w für das Produkt k')
m.bmax    = Param(m.W, m.K, m.T, doc='max. verfügbare Zusatzkapazität im Werk w für Produkt k in Periode t')
m.cmax    = Param(m.W, m.J, m.T, doc='verfügbare Normalkapazität im Werk w für Segment J in Periode t')
m.d       = Param(m.W, m.K, m.T, doc='Bedarf im Werkw für Produkt k in Periode t') 
...

导入参数值:

...
data.load(filename='Dataframe.xlsx',range='A8:D80', param=m.bmax)

data.load(filename='Dataframe.xlsx',range='F8:I80', param='cmax', index=('W','K','T')) 
...

错误:

Failed to set value for param=bmax, index=('WOB', 'Golf', 1.0), value=0.0.
    source error message="Index '('WOB', 'Golf', 1.0)' is not valid for indexed component 'bmax'"

具有 3 个索引的每个参数都会出现此错误。但是,如果我直接在 jupyter notebook 中初始化此表单,模型将 运行。我不明白其中的逻辑:(

非常感谢,如果你能解决我的问题。 最好的问候 PE

欢迎来到本站。

我认为您在上述模型中的问题是您将集合 m.T 设置为成员 strings 而不是整数。

这是我认为出错的例子,以 ConcreteModel 为例...

from pyomo.environ import *

m = ConcreteModel()

m.I = Set(initialize=[1,'5',10])   # mixed type set for demo only.

m.c = Param(m.I, within=NonNegativeReals, mutable=True)

m.c[1] = 2.4   # OK

m.c[5] = 3.2   # FAILS  

m.pprint()

如果您打算在不加载它们的情况下声明您的集合,我会这样声明集合:

m.T = Set(initialize=range(1, 13), doc='Perioden T')