如何在pyomo中使用集和范围集的多级索引?

2024-06-28 23:35:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我在pyomo中的模型中有多个级别的索引,我需要能够像这样索引变量:

model.b['a',1]

但这似乎是不可能的,因为某些原因。我可以像这样使用多级索引:

^{pr2}$

但这并不奏效:

model = ConcreteModel()
model.W = Set(['a','b'])
model.I = RangeSet(0,4)

model.b = Var(model.W, model.I)  # I can't even create this - throws exception

…它引发异常:

TypeError: Cannot index a component with an indexed set

为什么第一个有效而第二个不起作用?在


Tags: 模型modelvarcreate原因this级别can
1条回答
网友
1楼 · 发布于 2024-06-28 23:35:09

问题是当你写作的时候

^{1}$

实际上,您正在创建一个索引集对象,而不是一个具有所提供列表中的值的集。这是因为所有Pyomo组件构造函数都将位置参数视为索引集。在

您可以通过在值列表之前添加“initialize”关键字来解决此问题

^{pr2}$

如果您提供的是整数而不是字符串的列表,则情况也是如此

model.I = Set(initialize=[0,1,2,3,4])

相关问题 更多 >