Skip to content Skip to sidebar Skip to footer

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 MVars 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?"