Adding a constraint with multiple MVar
AnsweredHello all,
I am trying to create a constraint for my model with multiple MVar vector variables (1D). Here is a minimal code example for which I hope you can reproduce the error I get:
vec_1 = model.addMVar(3)
vec_2 = model.addMVar(3)
const_vec = np.array([4,5,3])
model.addConstr(vec_1 <= np.multiply(const_vec, vec_2))
In essence, I want Gurobi to compare each entry of vec_1 with the entry of const_vec times the entry of vec_2. I realize that Gurobi doesn't like arithmetic inside of the constraint initialization, so I tried this:
a = np.multiply(const_vec, vec_2)
model.addConstr(vec_1 <= a)
Now a is of the type MLinExpr but I can not find a correct way to deal with this kind of object in the documentation. addConstr seems to be the wrong method. Maybe addLConstr?
Thanks in advance for the help!
Andreas

You could convert the constant vector to a (sparse) diagonal matrix, then build the constraint using Gurobi's support for matrix multiplication:
import gurobipy as gp
import numpy as np
import scipy.sparse as sp
m = gp.Model()
x = m.addMVar(3, name='x')
y = m.addMVar(3, name='y')
a = np.array([4, 5, 3])
m.addConstr(x <= sp.diags(a) @ y)0 
Thanks for the great answer! Works perfectly.
0
Please sign in to leave a comment.
Comments
2 comments