我使用 Pyomo 来模拟优化问题,并有一个索引决策变量,我必须将具有特定索引的变量固定为某个值。在一个最小的例子中,它看起来像这样:
import pyomo.environ as pyo
model = pyo.ConcreteModel()
model.s = pyo.Set(initialize=[0, 1, 2])
model.v = pyo.Var(model.s)
model.v[0].fix(0.0)
但是,当我使用 .fix() 时,我收到 PyCharm 发出的警告:“类‘ComponentData’的未解析属性引用‘fix’”。
但是,Pyomo 本身建议采用这种方式将变量设置为固定值:https://pyomo.readthedocs.io/en/6.8.0/working_models.html#fixing-variables-and-re-solving。在这个例子中,我们正在处理 AbstractModels 的实例,但我认为对于 ConcreteModels 来说这应该没有什么区别。下面用 ConcreteModel 重复同样的操作。
谁能告诉我这是否是将变量设置为固定值的正确方法,或者为什么即使 Pyomo 本身使用这种方式我也会收到警告?
我使用 Pyomo 6.8.2 和 PyCharm 社区版 2024.2.0.1。
您的使用方法正确。
您可能会在
pyomo
中遇到一些类似的错误警告。 我怀疑 pyomo
代码库的大部分内容是在 linter 和类型检查器变得如此出色之前构建/编写的,并且它们仍在追赶。
发生这种情况时,我的一般方法是检查 dox 以确保我正确使用它,也许做一个小测试。 如果警告让你烦恼,你可以使用 Pycharm 的 actions 来忽略它。