从数据字典创建实例时Pyomo KeyError

时间:2018-11-14 20:14:45

标签: python pyomo

Set model.Power应该用model.T索引。如下代码所示,将创建抽象模型,并通过从字典中加载数据来创建实例。

from pyomo.environ import *

model = AbstractModel()

model.T = Set(ordered=True)

#1: model.Power = Set(model.T)
model.Power = Set()

instance = model.create_instance(data={None: {
    'T': {None: [0,1,2,3]}, 
    'Power': {None: [0,900,1500,1800]} 
} })

代码像这样工作。但是Power不会被索引。当我取消注释第1行并注释下面的行时,出现以下错误。

KeyError: 'Cannot construct index None in array set Power'

无论我怎么写字典,我都无法解决。

如何确保Power ist由T索引并且可以从字典创建实例?

2 个答案:

答案 0 :(得分:0)

我不确定为什么您会确切地遇到该错误,但是如果我这样运行代码,我就能正确地建立索引:

from pyomo.core.base import AbstractModel, Set

model = AbstractModel()

model.T = Set(ordered=True)

#1: model.Power = Set(model.T)
model.Power = Set()

instance = model.create_instance(data={None: {
    'T': {None: [0,1,2,3]}, 
    'Power': {None: [0,900,1500,1800]} 
} })

print 'Printing T vals\n'
for k in instance.component('T'):
    print k

print '\nPrinting Power vals\n'

for k in instance.component('Power'):
    print k

输出:

Printing T vals

0
1
2
3

Printing Power vals

0
1500
900
1800

答案 1 :(得分:0)

这是解决方案: 我应该尝试使用索引的Parameter而不是尝试为Set编制索引。

from pyomo.environ import *

model = AbstractModel()

model.T = Set(ordered=True)

model.Power = Param(model.T)

instance = model.create_instance(data={None: {
    'T': {None: [0,1,2,3]}, 
    'Power': {None: [0,900,1500,1800]} 
} })