Solving Mixed-Integer Bilevel Problems with MibS

MibS is an optimization solver for mixed-integer bilevel problems. Idol seemlessly integrates with MibS to solve bilevel problems.

We will see that solving bilevel problems with MibS is very similar to solving bilevel problems with any optimizer in idol.

We will assume that you have your bilevel problem modeled already in idol. In particular, we consider that you have two variables:

  1. high_point_relaxation which is a Model representing the high-point relaxation of your bilevel problem.

  2. description which is a Bilevel:LowerLevelDescription object representing the bilevel problem. If you do not know what this is or how to create it, please refer to the previous tutorial.

Then, you can solve your bilevel problem with MibS as follows:

high_point_relaxation.use(Bilevel::MibS(description));

high_point_relaxation.optimize();

std::cout << save_primal(high_point_relaxation) << std::endl;

Notice how the MibS solver is attached to the high-point relaxation model.

The rest of the code is the same as with any other solver.

Warning

To use MibS, you need to have the MibS library installed on your system and idol linked to the executable. You can download MibS from here.

Then, idol should be compiled with the options USE_MIBS=YES, USE_CLP=YES.