A Python Interface to Conic Optimization Solvers


Welcome to the documentations of PICOS, a user-friendly python interface to many linear and conic optimization solvers, see more about PICOS in the introduction.

The latest release can be downloaded here, and can be installed by following these instructions. Alternatively, you can also use PyPi: pip install picos or Anaconda: conda install -c picos picos. The latest development version can be cloned from gitlab: git clone https://gitlab.com/picos-api/picos.git. If you wish to collaborate on PICOS, please make a pull request on gitlab.

This documentation contains a tutorial and some examples, which should already be enough for a quick start with PICOS. There is also a summary of useful implemented functions. To go deeper, have a look at the picos reference, which provides information on every function of PICOS.


  • August 18: Picos moved to gitlab <http://gitlab.com/picos-api/picos>.
  • 4 Jul. 16: Picos 1.1.2 Released
    Major release with following changes:
    • Improved efficiency for the processing of large expressions.
    • It is now possible to dynamically add and remove constraints, e.g. for column generation approaches, cf. this paragraph for an example. For an easier use, the function add_constraint() now returns a handle to the constraint when the option return_constraints=True has been passed to the problem. Then, constraints can be deleted by using constraint.delete().
    • In previous versions, PICOS detected constraints that could be interpreted as a bound on a variable. This was creating a mess to delete constraints, so the default behaviour is now to pass all constraints as such. To stick to the old behaviour, use the option pass_simple_cons_as_bound=True.
    • New signature for the function partial_transpose(), which can now transpose arbitrary subsystems from a kronecker product.
    • Corrections of minor bugs with complex expressions.
    • Better support for the SDPA solver.
  • 29 Aug. 15: Picos 1.1.1 Released
    Minor release with following changes:
    • Partial trace of an Affine Expression, cf. partial_trace()
    • Bugfix for compatibility with python3 (thanks to Sergio Callegari)
    • Initial support for the SDPA solver (with the option solver='sdpa', picos works as a wrapper around the SDPA executable based on the write_to_file() function; thanks to Petter Wittek )
    • Better PEP8-compliance
  • 15 Apr. 15: Picos 1.1.0 Released
    • PICOS is now compatible with python 3+ (and remains compatible with python 2.6+). Many thanks to Sergio Callegari for this compatibility layer ! If you plan to work with PICOS and python3, think to install the most recent version of your solver (Mosek, Cplex, Gurobi, or Cvxopt). SCIP is not supported in python3+ at this point (but remains supported with python 2.x).
    • PICOS is now available on github.
  • Former changes are listed here.

PICOS Documentation contents

Indices and tables