Originally posted by: SystemAdmin
I
think you can implement the trust regions while using callbacks, but you will need to take over the branching process with a branch callback and the node selection process (I think that's a node callback, but it's been ages since I messed with one). The branching strategy works as follows. At any node where you are neither adding nor deleting trust region constraints, let CPLEX branch as it normally would. If you are adding trust constraints, create two children, the left one with the trust constraints and the right one without (so that the right one is a clone of the parent). If you need to delete an old trust region before adding a new one, backtrack to the first unseparated node without the trust region you are deleting, and separate that (left child with new region, right child without).
The node callback determines the order in which nodes are processed. When you add a trust region, it should process the left child next. When you backtrack, it needs to figure out how far.
Benders cuts continue to be added in a lazy constraint callback. Whether they are global or local (contingent on a particular trust region) is something you will need to sort out.
Paul
Mathematicians are like Frenchmen: whenever you say something to them, they translate it into their own language, and at once it is something entirely different. (Goethe)
#CPLEXOptimizers#DecisionOptimization