A Python interface to conic optimization solvers.

## Project description

# A Python Interface to Conic Optimization Solvers

PICOS is a user friendly Python API to several conic and integer programming solvers, very much like YALMIP or CVX under MATLAB.

PICOS allows you to enter a mathematical optimization problem as a **high level
model**, with painless support for **(complex) vector and matrix variables** and
**multidemensional algebra**. Your model will be transformed to the standard
form understood by an appropriate solver that is available at runtime. This
makes your application **portable** as users have the choice between several
commercial and open source solvers.

## Features

PICOS runs under both **Python 2** and **Python 3** and supports the following
solvers and problem types. To use a solver, you need to seperately install it
along with the Python interface listed here.

Solver | Interface | LP | SOCP | SDP | QCQP | EXP | MIP | License |
---|---|---|---|---|---|---|---|---|

CPLEX | included | Yes | Yes | Yes | Yes | non-free | ||

CVXOPT | native | Yes | Yes | Yes | Yes | Yes¹ | GPL-3 | |

ECOS | ecos-python | Yes | Yes | Yes | Yes | Yes | GPL-3 | |

GLPK | swiglpk | Yes | Yes | GPL-3 | ||||

Gurobi | included | Yes | Yes | Yes | Yes | non-free | ||

MOSEK | included | Yes | Yes | Yes | Yes | Yes | non-free | |

SMCP | native | Yes² | Yes² | Yes | Yes² | GPL-3 | ||

SCIP | PySCIPOpt | Yes | Yes | Yes | Yes | ZIB/MIT |

¹ only geometric programming, ² experimental

### Example

This is what it looks like to solve a multidimensional mixed integer program with PICOS:

>>> import picos >>> P = picos.Problem() >>> x = P.add_variable("x", 2, vtype="integer") >>> C = P.add_constraint(x <= 5.5) >>> P.set_objective("max", 1|x) # 1|x is the sum over x >>> solution = P.solve(verbose = 0) >>> print(solution["status"]) 'integer optimal solution' >>> print(P.obj_value()) 10.0 >>> print(x) [ 5.00e+00] [ 5.00e+00] >>> print(C.slack) [ 5.00e-01] [ 5.00e-01]

### Documentation & Source

- The full documentation can be browsed online or downloaded in PDF form.
- The API documentation without the tutorial and examples is also available as a separate PDF.
- The source code lives on GitLab.

## Installation

### Via pip

If you are using pip you can run
`pip install picos`

to get the latest version.

### Via Anaconda

If you are using Anaconda you can run
`conda install -c picos picos`

to get the latest version.

### Via your system's package manager

On **Arch Linux**, there are seperate packages in the AUR for the
latest version and the
latest release. Both are
split packages that ship both Python 2 and Python 3 versions of PICOS.

If you are packaging PICOS for additional systems, please tell us so we can list your package here!

### From source

If you are installing PICOS manually, you can choose between a number of development versions and source releases. You will need to have at least the following Python packages installed:

## Credits

### Developers

- Guillaume Sagnol is PICOS' initial author and primary developer since 2012.
- Maximilian Stahlberg is extending and maintaining PICOS since 2017.

### Contributors

For an up-to-date list of all code contributors, please refer to the contributors page. Should a reference from before 2019 be unclear, you can refer to the old contributors page on GitHub as well.

## License

PICOS is free and open source software and available to you under the terms of the GNU GPL v3.

## Project details

## Release history Release notifications

## Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Filename, size | File type | Python version | Upload date | Hashes |
---|---|---|---|---|

Filename, size PICOS-1.2.0.post13.tar.gz (153.1 kB) | File type Source | Python version None | Upload date | Hashes View hashes |