求解 Pyomo 具体模型

Solving Pyomo concrete model

我对这个 Pyomo 包还很陌生,我正在尝试使用一个非常简单的优化问题来学习它。我的代码如下。

from __future__ import division
from pyomo.environ import *

model = ConcreteModel()
model.x = Var([1,2,3], domain=NonNegativeReals)
model.OBJ = Objective(expr = 1*model.x[1] + 2*model.x[2]+model.x[3], rule=Objective_rule)

model.Constraint1 = Constraint(expr = -1*model.x[1] -2*model.x[2] <= -4.5)
model.Constraint1 = Constraint(expr = -2*model.x[1] -3*model.x[3] <= -8)
model.Constraint1 = Constraint(expr =1*model.x[2] +1*model.x[3] ==10)
opt = SolverFactory('glpk')
opt.solve(model)

但不幸的是,我得到了以下回溯

Traceback (most recent call last):

  File "C:\Users\wilso\python08\opt1.py", line 12, in <module>
    model.OBJ = Objective(expr = 1*model.x[1] + 2*model.x[2]+model.x[3], rule=Objective_rule)

NameError: name 'Objective_rule' is not defined

任何人都可以请让我知道我应该怎么做才能解决这个问题。非常感谢您的大力帮助。

此致

威尔逊

你走在正确的轨道上。 2 个问题:

  1. 在您的 objective 中,您混合了两种类型的表达式。如果您直接提供表达式(下面的版本 1),请不要包含 rule=... 反之亦然...请参阅版本 2
  2. 您的约束...您正在构建 Constraint1 然后覆盖它。你需要给它们贴上不同的标签。我改了。

如果您查看我在本网站上的其他一些 pyomo 回答,您会看到一些使用这些格式的其他基本示例。

# from __future__ import division
from pyomo.environ import *

model = ConcreteModel("version 1")
model.x = Var([1,2,3], domain=NonNegativeReals)
model.OBJ = Objective(expr = 1*model.x[1] + 2*model.x[2]+model.x[3]) #, rule=Objective_rule)

model.Constraint1 = Constraint(expr = -1*model.x[1] -2*model.x[2] <= -4.5)
model.Constraint2 = Constraint(expr = -2*model.x[1] -3*model.x[3] <= -8)  # changed to "2"
model.Constraint3 = Constraint(expr =1*model.x[2] +1*model.x[3] ==10)     # changed to "3"
opt = SolverFactory('glpk')
opt.solve(model)

model.display()

print('\n\n+++++++++++++++++++++++++++++++\n')
### alternatively with "rule"

model = ConcreteModel("version 2")
model.x = Var([1,2,3], domain=NonNegativeReals)

### OBJECTIVE
def objective_rule(model):
    return 1*model.x[1] + 2*model.x[2]+model.x[3]
model.OBJ = Objective(rule=objective_rule)

### CONSTRAINTS
model.Constraint1 = Constraint(expr = -1*model.x[1] -2*model.x[2] <= -4.5)
model.Constraint2 = Constraint(expr = -2*model.x[1] -3*model.x[3] <= -8)  # changed to "2"
model.Constraint3 = Constraint(expr =1*model.x[2] +1*model.x[3] ==10)     # changed to "3"
opt = SolverFactory('glpk')
opt.solve(model)

model.display()

产量:

Model version 1

  Variables:
    x : Size=3, Index=x_index
        Key : Lower : Value : Upper : Fixed : Stale : Domain
          1 :     0 :   0.0 :  None : False : False : NonNegativeReals
          2 :     0 :  2.25 :  None : False : False : NonNegativeReals
          3 :     0 :  7.75 :  None : False : False : NonNegativeReals

  Objectives:
    OBJ : Size=1, Index=None, Active=True
        Key  : Active : Value
        None :   True : 12.25

  Constraints:
    Constraint1 : Size=1
        Key  : Lower : Body : Upper
        None :  None : -4.5 :  -4.5
    Constraint2 : Size=1
        Key  : Lower : Body   : Upper
        None :  None : -23.25 :  -8.0
    Constraint3 : Size=1
        Key  : Lower : Body : Upper
        None :  10.0 : 10.0 :  10.0


+++++++++++++++++++++++++++++++

Model version 2

  Variables:
    x : Size=3, Index=x_index
        Key : Lower : Value : Upper : Fixed : Stale : Domain
          1 :     0 :   0.0 :  None : False : False : NonNegativeReals
          2 :     0 :  2.25 :  None : False : False : NonNegativeReals
          3 :     0 :  7.75 :  None : False : False : NonNegativeReals

  Objectives:
    OBJ : Size=1, Index=None, Active=True
        Key  : Active : Value
        None :   True : 12.25

  Constraints:
    Constraint1 : Size=1
        Key  : Lower : Body : Upper
        None :  None : -4.5 :  -4.5
    Constraint2 : Size=1
        Key  : Lower : Body   : Upper
        None :  None : -23.25 :  -8.0
    Constraint3 : Size=1
        Key  : Lower : Body : Upper
        None :  10.0 : 10.0 :  10.0