ZERO is a modular C++ library interfacing Mathematical Programming and Game Theory. It provides a comprehensive toolkit of modeling interfaces, helper tools, and algorithms to design games and find their Nash equilibria. In particular, the software supports Reciprocally Bilinear Games (RBGs), simultaneous non-cooperative games where each player solves a mathematical program with a linear objective in the player’s variable and bilinear in its opponents’ variables. This class elementary generalizes to a multi-agent setting the tasks of classical Operations Research problems. ZERO also supports integer non-convexities, linear bilevel problems, and linear equilibrium problems with equilibrium constraints.


This code is distributed under the CC BY-NC-SA 4.0 License.


Cite ZERO through [ZERO], and any of the algorithms via their respective paper (e.g., [CNP] for the Cut-And-Play algorithm or [ZERORegrets] for the ZERO Regrets algorithm).


Gabriele Dragotto, Sriram Sankaranarayanan, Margarida Carvalho, Andrea Lodi. ZERO: Playing Mathematical Programming Games.


Margarida Carvalho, Gabriele Dragotto, Felipe Feijoo, Andrea Lodi, Sriram Sankaranarayanan. When Nash Meets Stackelberg.


Margarida Carvalho, Gabriele Dragotto, Andrea Lodi, Sriram Sankaranarayanan. The Cut and Play Algorithm: Computing Nash Equilibria via Outer Approximations.


Gabriele Dragotto, Rosario Scatamacchia. The ZERO Regrets Algorithm: Optimizing over Pure Nash Equilibria via Integer Programming.