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索引并且可以从字典创建实例?
答案 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]}
} })