Search code examples
pyomo

SolverFactory.solve summary option


Pyomo solver invocation can be achieved by command line usage or from a Python script.

How does the command line call with the summary flag

pyomo solve model.py input.dat --solver=glpk --summary

translate to e.g. the usage of a SolverFactory class in a Python script?

Specifically, in the following example, how can one specify a summary option? Is it an (undocumented?) argument to SolverFactory.solve?

from pyomo.opt import SolverFactory
import pyomo.environ

from model import model

opt = SolverFactory('glpk')

instance = model.create_instance('input.dat')

results = opt.solve(instance)

Solution

  • The --summary option is specific to the pyomo command. It is not a solver option. I believe all it really does is execute the line

    pyomo.environ.display(instance)
    

    after the solve, which you can easily add to your script. A more direct way of querying the solution is just to access the value of model variables or the objective by "evaluating" them. E.g.,

    instance.some_objective()
    instance.some_variable()
    instance.some_indexed_variable[0]()
    

    or

    pyomo.environ.value(instance.some_objective)
    pyomo.environ.value(instance.some_variable)
    pyomo.environ.value(instance.some_indexed_variable)
    

    I prefer the former, but the latter is more appropriate if you are accessing the values of immutable, indexed Param objects. Also, note that variables have a .value attribute that you can access directly (and update if you want to provide a warmstart).