I have a linear integer programme I want to solve. I installed solver glpk (thanks to this answer) and pyomo. I wrote code like this:
from pyomo.environ impo
Here's a modified version of your script that illustrates two different ways of printing variable values: (1) by explicitly referencing each variable and (2) by iterating over all variables in the model.
# Pyomo v4.4.1
# Python 2.7
from pyomo.environ import *
from pyomo.opt import SolverFactory
a = 370
b = 420
c = 4
model = ConcreteModel()
model.x = Var([1,2], domain=Binary)
model.y = Var([1,2], domain=Binary)
model.Objective = Objective(expr = a * model.x[1] + b * model.x[2] + (a-b)*model.y[1] + (a+b)*model.y[2], sense=maximize)
model.Constraint1 = Constraint(expr = model.x[1] + model.x[2] + model.y[1] + model.y[2] <= c)
opt = SolverFactory('glpk')
results = opt.solve(model)
#
# Print values for each variable explicitly
#
print("Print values for each variable explicitly")
for i in model.x:
print str(model.x[i]), model.x[i].value
for i in model.y:
print str(model.y[i]), model.y[i].value
print("")
#
# Print values for all variables
#
print("Print values for all variables")
for v in model.component_data_objects(Var):
print str(v), v.value
Here's the output generated:
Print values for each variable explicitly
x[1] 1.0
x[2] 1.0
y[1] 0.0
y[2] 1.0
Print values for all variables
x[1] 1.0
x[2] 1.0
y[1] 0.0
y[2] 1.0
I'm not sure if this is what you are looking for, but this is a way that I have some variables being printed in one of my scripts.
from pyomo.environ import *
from pyomo.opt import SolverFactory
from pyomo.core import Var
M = AbstractModel()
opt = SolverFactory('glpk')
# Vars, Params, Objective, Constraints....
instance = M.create_instance('input.dat') # reading in a datafile
results = opt.solve(instance, tee=True)
results.write()
instance.solutions.load_from(results)
for v in instance.component_objects(Var, active=True):
print ("Variable",v)
varobject = getattr(instance, str(v))
for index in varobject:
print (" ",index, varobject[index].value)
I found the pyomoio
module in the urbs project. It extracts sets, parameters, variables, and so on, and the returns them in pandas
objects, which are very convenient for visualization in jupyter notebooks.
I build a simple model
model = ConcreteModel()
model.act = Set(initialize=list('IJK'))
model.goods = Set(initialize=list('ijk'))
u0 = {}
u0['i', 'J'] = 2.
u0['k', 'I'] = .3
model.U0 = Param(model.goods, model.act, initialize=u0, default=0)
I can then read it in a pandas DataFrame, with all the labels set appropriately.
import pyomoio as po
u_df = po.get_entity(model, 'U0').unstack()
print(u_df)
# act I J K
# goods
# i 0.0 2.0 0.0
# j 0.0 0.0 0.0
# k 0.3 0.0 0.0