# 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 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.