I want to use my user-defined constraints both as cut and lazy constraints. I know that:
- The cbCut will only add cut into the user cut pool and may not add these cuts immediately or not add at all. However, lazy constraints are added immediately and will be active for all the succeeding nodes after the synchronization point. But same lazy constraints may need to be added due to the parallel solving process.
- User cuts can only be used to cut off fractional solutions and must be valid inequalities. However, lazy constraints can also be used to cut off integer solutions.
- If you change the model, both user cuts and lazy constraints need to be re-added back.
- If I assure that in MIPSOL the violated constraints will be added as lazy constraints, will it be a problem if I treat these violated constraints in MIPNODE as user cut? Since the user cuts(indeed lazy constraints) should be valid inequalities to the "original" problem, which is true for my real problem but not the problem I give to gurobi( I treat some constraints by lazy callback)
- I drop these lazy constraints( dense constraints) because adding them all is too expensive, which will cause the problem to solve slowly. Is there any other advice on the performance if some constraints are too dense/hard?
- I found in my MIP log, that in the root node, my callbacks add more lazy constraints than my total number of lazy constraints. Is that possible?
- Can you specify the callback order of MIPNODE and MIPSOL? I found that sometimes MIPNODE will be called before and after MIPSOL. Why is this situation?
Thank you very much!
Please sign in to leave a comment.