• Gurobi Staff

You can use Model.remove() to remove constraints from your model. What code are you currently using to remove the constraints? And how many constraints are you removing?

Eli,

Thanks for your response. As I said, I am using the remove function to eliminate constraints. Since I have to remove more than 6000 thousand constraints, this does not work for me. This is the way I remove constraints:

for cons in model.getConstrs():
if 'line' in cons.ConstrName:
model.remove(cons)

• Gurobi Staff

This approach isn't too efficient, because you check if every model constraint name includes the text $$\texttt{line}$$. How do you add the $$\texttt{line}$$ constraints to your model? If you use Model.addConstrs(), you can pass the tupledict returned by this method directly to Model.remove():

c = model.addConstrs((x[i] <= 1 for i in range(n)), name='line')model.optimize()# Remove all "line" constraintsmodel.remove(c)

Some alternative approaches are:

• When building the model, use Model.copy() to create a copy of the model before the $$\texttt{line}$$ constraints are added. Then, use the model copy in subsequent iterations of your algorithm.
• Find a minimal way to modify the constraints so they are redundant. For example, if you want to remove the constraint $$\sum_{i = 1}^n x_i \leq 1$$ where the $$x_i$$ are non-negative, you can change the constraint to $$\sum_{i = 1}^n x_i \geq 0$$ by modifying the Sense and RHS attributes of the Constr object. The constraint is still in the model, but it is now redundant. Gurobi should recognize this and remove the constraint during the presolve phase.
• Build the model from scratch without the $$\texttt{line}$$ constraints.

I understood. Your suggestions work perfectly.