# BMIBNB

Built-in solver for nonconvex problems

### In YALMIP

BMIBNB is invoked by using 'bmibnb' as solver flag in sdpsettings

### Comments

BMIBNB is an implementation of a standard branch & bound algorithm for nonconvex problems, based on (most often) linear programming relaxations and convex envelope approximations. The tutorial about global optimization focus on applications of the solver.

The solver relies on external linear, quadratic and semidefinite programming solvers for solving the lower bounding relaxation problems, and nonlinear solvers for the upper bound computations.

Most important options (-1 means adaptive choice, 0 is off and 1 on)

</table>`'bmibnb.lowersolver'` |
Solver for relaxed problems. |

`'bmibnb.uppersolver'` |
Local solver for computing upper bounds. |

`'bmibnb.lpsolver'` |
LP solver for bound strengthening
(only used if `bmibnb.lpreduce` is active) |

`'bmibnb.numglobal'` |
A major computational burden along the branching process is to
solve the upper bound problems using a local nonlinear solver. By
setting this value to a finite integer value, the local solver will no
longer be used when the upper bound has been improved `numglobal` times.
This option is useful if you believe your local solver quickly gives
globally optimal solutions. It can also be useful if you have a
feasible solution and just want to compute a gap. In this case, use
the `usex0` option and set `numglobal` to 0. |

`'bmibnb.roottight'` |
Improve variable bounds at root-node by performing bound strengthening based on the full relaxed model (can be very expensive, but lead to improved branching) |

`'bmibnb.lpreduce'` |
Improve variable bounds in all nodes by performing LP-based bound strengthening (using only the scalar constraints, can be very expensive, but lead to improved branching) |

`'bmibnb.lowertarget'` |
Terminate when lower bound is larger or equal to this value |

`'bmibnb.target'` |
Terminate when upper bound is smaller or equal to this value |