Utility functions for Pyomo.
Return a numpy array containning each element value of obj at the corresponding position.
Return a numpy array containning the suffix suf value of each element of constraint con at the corresponding position.
Set the value of each element in obj with the corresponding item in val.
import pyomo.environ as pyo
import numpy as np
import pyomo_utility as util
i_num = 3
j_num = 4
m = pyo.ConcreteModel()
m.i = pyo.RangeSet(0, i_num - 1)
m.j = pyo.RangeSet(0, j_num - 1)
# variable
m.x = pyo.Var(m.i, m.j, bounds=(0, 1))
# parameter
m.A = pyo.Param(m.i, m.j, default=0, mutable=True)
# constraint
m.row_sum_eq_one_con = pyo.Constraint(
m.i, rule=lambda p, i:
pyo.quicksum(p.x[i, :]) == 1
)
# objective
m.obj = pyo.Objective(expr=pyo.sum_product(m.A, m.x))
# suffix for dual
m.dual = pyo.Suffix(direction=pyo.Suffix.IMPORT)
A_0 = np.random.rand(i_num, j_num)
# fill parameter A with A_0
util.fill_value(m.A, A_0)
solver = pyo.SolverFactory('gurobi_direct')
solver.solve(m)
# get value of variable x
x = util.value_to_numpy(m.x)
print(f'x = {x}')
# x = [[0. 0. 0. 1.]
# [0. 0. 1. 0.]
# [0. 0. 0. 1.]]
# get dual of constraint con
dual = util.suffix_to_numpy(m.dual, m.row_sum_eq_one_con)
print(f'dual = {dual}')
# dual = [0.06459462 0.27276094 0.07508348]
# fill variable x with x_0
x_0 = np.random.rand(i_num, j_num)
util.fill_value(m.x, x_0)