BilevelJuMP.jl Documentation

Introduction

BilevelJuMP is a package for modeling and solving bilevel optimization problems in Julia.

As an extension of the JuMP modeling language, BilevelJuMP allows users to employ the usual JuMP syntax with minor modifications to describe the problem and query solutions.

Many modeling features are available in BilevelJuMP, some of which are unique while others are also not widely available. The main features supported are:

  • Arbitrary JuMP models in the upper level (NLP, Conic, MIP)
  • Conic constraints and quadratic objectives in the lower-level
  • Dual variables of the lower level in the upper level
  • MPEC reformulations with MIP or NLP solvers
  • MixedMode MPEC reformulation: select the best reformulation for each

constraint separately

The currently available methods are based on re-writing the problem using the KKT conditions of the lower level. For that, we make strong use of Dualization.jl

Installation

Install BilevelJuMP as follows:

julia> import Pkg

julia> Pkg.add("BilevelJuMP")

Getting started

  • Learn the basics of

JuMP and Julia in the JuMP documentation

  • Follow the tutorials in this manual

If you need help, please open a GitHub issue.

License

BilevelJuMP.jl is licensed under the MIT License.

Citing BilevelJuMP.jl

If you use BilevelJuMP.jl, we ask that you please cite the following paper:

@article{diasgarcia2023bileveljump,
    title={{BilevelJuMP.jl}: {M}odeling and {S}olving {B}ilevel {O}ptimization {P}roblems in {J}ulia},
    author={{Dias Garcia}, Joaquim and Bodin, Guilherme and Street, Alexandre},
    journal={INFORMS Journal on Computing},
    doi={https://doi.org/10.1287/ijoc.2022.0135},
    pages={1-9},
    year={2023}
}

Here is an earlier preprint.