Skip to content

monviso documentation

Installation

Install monviso directly from its GitHub repository using pip:

pip install git+https://github.com/nicomignoni/monviso.git@master

Getting started

If you're already familiar with variational inequalities (VI), hop to the Quickstart for an overview on how to use monviso. Otherwise, the following provides an (extremely) essential introduction to VIs and to the nomenclature that will be used in the rest of the documentation.

Given a vector mapping \(\mathbf{F} : \mathbb{R}^n \to \mathbb{R}^n\) and a scalar convex (possibly non-smooth) function \(g : \mathbb{R}^n \to \mathbb{R}\), solving a VI consists of solving the following

\[\begin{equation} \label{eq:vi_base} \text{find } \mathbf{x}^* \in \mathbb{R}^n \text{ such that } (\mathbf{x} - \mathbf{x}^*)^\top \mathbf{F}(\mathbf{x}^*) - g(\mathbf{x}) - g(\mathbf{x}^*) \geq 0, \quad \forall \mathbf{x} \in \mathbb{R}^n. \end{equation}\]

It turns out that a lot of problems in optimal control, optimization, machine learning, game theory, finance, and much more, boil down to solving some instance of \(\eqref{eq:vi_base}\). Such a problem is usually solved through iterative methods: one constructs an algorithm that produces a \(\mathbf{x}_k\) at each iteration \(k\) such that \(\mathbf{x}_k \to \mathbf{x}^*\) when \(k \to \infty\).

What monviso does is providing a convenient way for accessing and using these iterative methods for solving an instance of \(\eqref{eq:vi_base}\). The iterative methods that are currently implemented are listed in the API documentation. Since many of these algorithms rely on evaluating a proximal operator (or a projection step), monviso builds on top of cvxpy, a package for modelling and solving convex optimization problems.

Cite as

If you used monviso in your project or research, please consider citing the related paper:

@inproceedings{mignoni2025monviso,
  title={monviso: A Python Package for Solving Monotone Variational Inequalities},
  author={Mignoni, Nicola and Baghbadorani, Reza Rahimi and Carli, Raffaele and Esfahani, Peyman Mohajerin and Dotoli, Mariagrazia and Grammatico, Sergio},
  booktitle={2025 European Control Conference (ECC)},
  year={2025}
  organization={IEEE}
}

Why "monviso"?

It stands for monotone variational inequalities solutions. Initially, so- stood for "solver", but it was a bit on the nose. After all, monviso is just a collection of functions. Monviso is also a mountain in Italy. After a couple of iterations, the name in its current form was suggested by Sergio Grammatico.