Search code examples
pythonpython-3.xsolverpyomo

Print Solver Results of terms from an objective function Pyomo


I have some problems when I want to print some concrete values with the Solver Results.

This is my objective function:

def obj2_rule(model):
    return sum(sum(model.htotal1[k] + model.htotal2[k] + model.htotal3[k] - sum(sum(model.hreq1[p,j] * (sum(model.x[p,k,j] for k in sequence(t)) - sum(model.x[p,k,j] for k in sequence(t - model.time[p,j]))) + model.hreq2[p,j] * (sum(model.x[p,k,j] for k in sequence(t)) - sum(model.x[p,k,j] for k in sequence(t - model.time[p,j]))) + model.hreq3[p,j] * (sum(model.x[p,k,j] for k in sequence(t)) - sum(model.x[p,k,j] for k in sequence(t - model.time[p,j]))) for j in model.MODELS) for p in jobs_per_station[k]) for k in model.ESTATIONS) for t in model.PERIODS)
model.obj2 = Objective(rule=obj2_rule)

Within that objective function, I want to print separately this "extra variables" because the objective function returns the sum of them for every t in model.PERIODS:

h_idle[t] = sum(model.htotal1[k] + model.htotal2[k] + model.htotal3[k] - sum(sum(model.hreq1[p,j] * (sum(model.x[p,k,j] for k in sequence(t)) - sum(model.x[p,k,j] for k in sequence(t - model.time[p,j]))) + model.hreq2[p,j] * (sum(model.x[p,k,j] for k in sequence(t)) - sum(model.x[p,k,j] for k in sequence(t - model.time[p,j]))) + model.hreq3[p,j] * (sum(model.x[p,k,j] for k in sequence(t)) - sum(model.x[p,k,j] for k in sequence(t - model.time[p,j]))) for j in model.MODELS) for p in jobs_per_station[k]) for k in model.STATIONS)

for each t in model.PERIODS

I want to print these "variables" : h_idle[1], h_idle[2]....
Please, some idea how to do it? Thanks in advance.


Solution

  • After calling a solver the results are automatically loaded back into the variables in your model. You can print individual values using the value function.

    for t in model.PERIODS:
        h_idle_t = YOUR LONG EXPRESSION
        print('h_idle[' + str(t) + '] = ', value(h_idle_t))