Taco

Taco is a python toolbox aimed at solving chance-constrained problems. For more details, we refer to our companion paper (to appear very soon!).

Overview

This toolbox is aimed at solving optimization problems of the form:

\[\begin{split}\left\{ \begin{array}{ll} \min_{x \in \mathbb{R}^d} & f(x) \\ \text{ s.t. } & \mathbb{P}[g(x, \xi) \leq 0] \geq p \end{array} \right.\end{split}\]

where \(f:\mathbb{R}^d \mapsto \mathbb{R}\) and \(g:\mathbb{R}^d \times \mathbb{R}^m \mapsto \mathbb{R}\) are two functions provided by the user together with a dataset \(D\) from which \(\xi:\Omega \rightarrow \mathbb{R}^m\) is sampled. Taco implements a penalization procedure based on a bilevel reformulation of the above problem. Each penalized problem turns out to be a Difference of Convex problem that we solve with a recent bundle procedure.

centered image
Example of solving for a quadratic toy problem (see the companion paper)
The non-convex red region delimited by the black dashed-line is the chance constraint.
The blue oval shapes are the contour lines of the objective function.

Taco routines rely on just-in-time compilation supported by Numba. The routines are optimized to provide fast performances on reasonably large datasets.