How To Calculate 2-norm Constraint In Gurobi Using Python?
Can anybody help me with coding a 2-norm constraint? k=2 n=2 w = model.addMVar((k,n),lb = -1.0, ub = 1.0, vtype=gp.GRB.CONTINUOUS, name='w') for i in range (k): sumw = 0
Solution 1:
There's no __pow__
method for an MQuadExpr
object like w[i,j] @ w[i,j]
. This is only available for LinExpr
objects. Since Gurobis power function can't handle MVar
s yet, you need to do something like this:
from gurobipy import quicksum as qsum
k, n = 2, 2
w = model.addVars(k, n, vtype="C", lb=-1.0, ub=1.0, name="w")
# helper variables to store ||w_j||_2
helper1 = model.addVars(k, vtype="C")
helper2 = model.addVars(k, vtype="C")
for i in range(k):
model.addConstr(helper1[i] == qsum(w[i, j]**2 for j in range(n)))
# add helper2[i] == helper1[i]^0.5
model.addGenConstrPow(helper2[i], helper1[i], 0.5)
# add helper2[i] <= 1
model.addConstr(helper2[i] <= 1)
Post a Comment for "How To Calculate 2-norm Constraint In Gurobi Using Python?"