Pyomo: Access Solution From Python Code

后端 未结 3 1450
[愿得一人]
[愿得一人] 2020-12-29 14:58

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         


        
相关标签:
3条回答
  • 2020-12-29 15:44

    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
    
    0 讨论(0)
  • 2020-12-29 15:47

    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)
    
    0 讨论(0)
  • 2020-12-29 15:59

    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
    
    0 讨论(0)
提交回复
热议问题