gpt4 book ai didi

python - Pyomo:从 json 存档加载三维集数据错误:无法使用索引集索引组件

转载 作者:太空宇宙 更新时间:2023-11-03 19:59:55 25 4
gpt4 key购买 nike

在 pyomo 库的抽象模型中,我有三个不同的集合,每个集合都取决于前一个集合,并且具有不同的维度大小。

model.V = pyo.Set()
model.P = pyo.Set(model.V)
model.m = pyo.Set(model.V, model.P)

当我尝试从 JSON 文件加载设置值时,会引发以下异常:

TypeError: Cannot index a component with an indexed set

以下是 JSON 文件中的代码:

{
"V" : [1, 2, 3],
"P" : {"1": [1, 2],
"2": [1, 2, 3],
"3": [1]},
"m" : {"1": [{"1": [1, 2],
"2": [1, 2, 3, 4]}],
"2": [{"1": [1],
"2": [1, 2],
"3": [1, 2, 3]}],
"3": [{"1": [1, 2, 3, 4, 5, 6]}]}
}

我认为问题是由于 JSON 文件中 m 的定义造成的,因为回溯将我带到 model.m = pyo.Set(model.V, model.P) 行。

我已经检查了documentation of Pyomo Data Portals ,但我没有得到 3D JSON 数据的信息。

有谁知道3维m集定义中的错误是什么吗?

最佳答案

我没有异常的根本原因,但这不是由于数据造成的。您可以通过创建 AbstractModel 而不传递任何数据来轻松验证这一点:

from pyomo import environ as pyo

def create_model():
model = pyo.AbstractModel()
model.V = pyo.Set()
model.P = pyo.Set(model.V)
model.m = pyo.Set(model.P)
return model

调用 create_model 已失败,并出现 TypeError:无法使用索引集索引组件。请注意,我什至从 model.m 的索引中删除了 model.V

我不确定为什么不允许使用索引集来索引另一个组件(我尝试索引一个参数,但也失败了)。 This reply from one of the core developers明确指出这是一个设计决定。

话虽这么说,根据我的经验,在使用索引集的情况下,95% 的情况下,您都可以找到根本不需要索引集的更直接的解决方案。我不知道你正在建模/解决什么问题,但是有一个集合(m)在一个集合(V)和一个索引集合(P) 本身是通过 V 进行索引的,看起来过于复杂。您可以将其移动为(3D)类似矩阵的符号或类似的符号。

如果您需要更多支持,请分享您将在这些集合上索引的数据是什么样的(json 文件内容应该没问题)。

关于python - Pyomo:从 json 存档加载三维集数据错误:无法使用索引集索引组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59322001/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com