Describes the basic usage of idol_cl for bilevel problems, including the expected input file format.
For bilevel problems, idol_cl uses the .aux file format from the MibS solver coupled with an .lp/.mps file that stores the single-level relaxation.
We consider the bilevel problem
\[\begin{align*} \min_{x, y} \quad & -x - 10y \\ \text{s.t.} \quad & y \in \begin{array}[t]{rl} \displaystyle\arg\min_{z} \ & z \\ \text{s.t.} \ & -25x + 20z \le 30, \\ & x + 2z \le 10, \\ & 2x - z \le 15, \\ & 2x + 10z \ge 15, \\ & z \ge 0, \\ & z \in \mathbb{Z}. \end{array} \\ & x \in \mathbb{Z}_{\ge 0}. \end{align*} \]
This example is taken from the paper "The Mixed Integer Linear Bilevel Programming Problem" by Moore and Bard (1990).
The .mps stores the single-level relaxation.
The .aux file describes what variables and constraints belong to the lower level and defines the lower-level objective coefficients.
Note: in idol_cl, the field @MPS or @LP is typically ignored to avoid path corruption. For that reason, the .mps/.lp file must explicitly be given.
Bilevel problem instances are described by two files. First, an .mps or .lp file stores the single-level relaxation model. Then, the .aux file describes which variables and constraint belong to the lower-level problem.
For more details on the .mps and .lp file formats, see the page cli_input_format_milp.
The .aux file is a plain-text file used to describe the structure of a bilevel optimization problem. Specifically, it defines:
Without the .aux file, the model is interpreted as a standard single-level optimization problem.
The .aux file is composed of tagged sections, each identified by a keyword starting with @. The following table lists all supported tags and their meaning.
| Tag | Meaning |
|---|---|
| @NUMVARS | The next line contains the number of lower-level variables |
| @NUMCONSTRS | The next line contains the number of lower-level constraints |
| @VARSBEGIN | Marks the beginning of the variables section |
| @VARSEND | Marks the end of the variables section |
| @CONSTRSBEGIN | Marks the beginning of the constraints section |
| @CONSTRSEND | Marks the end of the constraints section |
| @NAME | The next line contains the name of the instance (optional) |
| @MPS | The next line contains the name of the .mps file with which this instance is associated (typically ignored) |
| @LP | The next line contains the name of the .lp file with which this instance is associated (typically ignored) |
The variables section is composed by the list of variable names that belong to the lower-level problem directly followed by their objective coefficient. The constraint section is composed by the list of constraint names that belong to the lower-level problem.
Note that bounds on lower-level variables are always assumed to be constraints of the lower-level problem.
Given a bilevel problem, you can solve it by running
Some commands require more parameters than others. For instance, here is how to solve an LP-LP bilevel problem using its KKT reformulation using big-M values.
For more information, see our tutorial on Solving Bilevel Problems via its KKT-Based Single-Level Reformulation.
Here again, to list the available methods for your problem class, you may use
If the bilevel problem does not have coupling constraints, it is possible to address its pessimistic version by appending the --pessimistic flag. If so, the relaxation-and-correction scheme from Zeng (2025) will be applied.