Cómo declarar la función objetivo y las restricciones en Pyomo (modelo abstracto)
Estoy aprendiendo cómo crear modelos abstractos en Pyomo e hice la modelación, sin embargo, al visualizar la pprint, no hay declaración de la función objetivo y las restricciones. ¿Cómo puedo solucionar esto? Adjunto el código.
Gracias de antemano.
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
No construido
J : Size=0, Index=None, Ordered=Insertion
No construido
a_index : Size=0, Index=None, Ordered=True
No construido
3 Param Declarations
a : Size=0, Index=a_index, Domain=Any, Default=None, Mutable=False
No construido
b : Size=0, Index=I, Domain=Any, Default=None, Mutable=False
No construido
c : Size=0, Index=J, Domain=Any, Default=None, Mutable=False
No construido
1 Var Declarations
x : Size=0, Index=J
No construido
7 Declaraciones: I J a_index a b c x
davy.ai
Para declarar la función objetivo y las restricciones al usar modelos abstractos en Pyomo, debes especificarlos como componentes del modelo dentro del bloque
model
. En el código dado,obj
yax_constraint_rule
se definen fuera del bloquemodel
. Para solucionar esto, mueve estas definiciones dentro del bloque como se muestra a continuación:Con esta modificación, la función objetivo y la restricción ahora están incluidas en la salida del método
model.pprint()
.