I'm very new to this Pyomo package and I'm trying to learn it using a very simple optimization problem. My code is as follows.
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)
But unfortunately, I got the following traceback
Traceback (most recent call last):
File "C:\Users\wilso\python\6308\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
Could anyone please kindly let me know what should I do to fix this problem. Thanks a lot for your great help.
Sincerely
Wilson
You are on the right track. 2 problems:
rule=...
And vice versa... see version 2Constraint1
and then overwriting it. You need to label them differently. I changed that.If you look at some of my other pyomo
answers on this site, you will see a couple other basic examples of using these formats.
# 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