如何在 Pyomo 中声明目标函数和约束(抽象模型)

Posted

技术标签:

【中文标题】如何在 Pyomo 中声明目标函数和约束(抽象模型)【英文标题】:How to declare objective function and constraints in Pyomo (Abstract model) 【发布时间】:2022-01-21 13:34:24 【问题描述】:

我正在学习如何在 Pyomo 中创建抽象模型并进行了建模,但是,当我可视化 pprint 时,没有声明目标函数和约束。我怎样才能解决这个问题?我附上了代码

提前致谢。

import pyomo as pyo
from pyomo.environ import *

model = AbstractModel()

model.I = Set()
model.J = Set()

model.a = Param(model.I, model.J)
model.b = Param(model.I)
model.c = Param(model.J)

model.x = Var(model.J, domain = NonNegativeReals)

def obj (model):
  return sum(model.c[j]*model.x[j] for j in model.J)

  model.obj = Objective(rule = obj)

def ax_constraint_rule (model, i):
  return sum(model.a[i,j]*model.x[j] for j in model.J) >= model.b[i]

  model.AxbConstraint = Constraint(model.I, rule = ax_constraint_rule)

model.pprint()

3 Set Declarations
    I : Size=0, Index=None, Ordered=Insertion
        Not constructed
    J : Size=0, Index=None, Ordered=Insertion
        Not constructed
    a_index : Size=0, Index=None, Ordered=True
        Not constructed

3 Param Declarations
    a : Size=0, Index=a_index, Domain=Any, Default=None, Mutable=False
        Not constructed
    b : Size=0, Index=I, Domain=Any, Default=None, Mutable=False
        Not constructed
    c : Size=0, Index=J, Domain=Any, Default=None, Mutable=False
        Not constructed

1 Var Declarations
    x : Size=0, Index=J
        Not constructed

7 Declarations: I J a_index a b c x

【问题讨论】:

【参考方案1】:

您似乎错误地缩进了下面的语句,这会使它们成为函数的一部分。他们不是。他们调用函数...通过使它们成为函数的一部分并在 return 语句之后它们是死代码。

至少应该可以打印一些东西。然后,您将希望通过加载数据(请参阅文档)和 pprint instance 而不是模型来创建模型的 instance。祝你好运!

【讨论】:

非常感谢。这就是问题所在。 太棒了。如果这回答了您的问题,您可以通过点击问题旁边的复选标记来关闭问题。

以上是关于如何在 Pyomo 中声明目标函数和约束(抽象模型)的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Google Colab 中使用 Pyomo 解决抽象模型

如何在pyomo中访问目标函数值?

如何在 Pyomo 中编写分段线性目标函数

Pyomo 无法在抽象 Set 构建之前对其进行迭代

如何在pyomo的目标函数中使用最小值和最大值

如何从 pyomo 的 ipopt 接口中找到违反了哪个约束?