求解 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 个问题:
- 在您的 objective 中,您混合了两种类型的表达式。如果您直接提供表达式(下面的版本 1),请不要包含
rule=...
反之亦然...请参阅版本 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
我对这个 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 个问题:
- 在您的 objective 中,您混合了两种类型的表达式。如果您直接提供表达式(下面的版本 1),请不要包含
rule=...
反之亦然...请参阅版本 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