Temporal changing model parameters/constraints/variables in MILPs

In general, I can compute an MILP using a solver of my choice (Gurobi, ...) and stop it at any time, change parameters/constraints add variables. Take the so far best solution computed based on the last run and model as initial guess for the variables and start again.

Is it also possible to do those (or some of those) changes during computation and dynamically add changed parameters, does it have advantages?

E.g. computing some partitioning on a graph and adding or removing edges during computation, fixing variables to desired variables without stopping the optimization process.

• - For the addition of variables, common cases in which it is applied for, are the Column Generation algorithms (check chapter twelve jstor.org/stable/j.ctt7s8xg?turn_away=true, and arxiv.org/pdf/1806.00831.pdf): In these situations better dual bounds "may" be obtained, and sometimes, depending of the instance size, the only way to initialize an MILP algorithm is through CG. A CG algorithm may also detach variables. to continue... Commented Feb 23 at 11:49
• - For the addition of constraints, we have the classical branch and cut algorithm (en.wikipedia.org/wiki/Branch_and_cut), which is a single tree algorithm. As for the case you mentioned, when you iteratively run MILP problems, you have a multi-tree scheme, which is also applied for NLPs (link.springer.com/chapter/10.1007/978-3-030-22788-3_2). For the removal of constraints, SHOT solver applies such technique for dealing with stagnation when solving nonconvex NLPs (link.springer.com/article/10.1007/s10898-021-01006-1). Commented Feb 23 at 11:49
• Using Gurobi you can make changes to parameters and add constraints without needing to restart the solve. You can call optimize() and the solve will resume from where it left off. In this way you could use Gurobi callbacks to define custom termination criteria, after which you make these sorts of changes, then resume. Presumably you would embed this approach in a loop. Adding variables or changing existing constraints or objective function will throw out the tree and the solve won't resume from where it was stopped, but you could still provide a "MIP start" and maybe it would be valid. Commented Feb 23 at 15:31