ECOS is a numerical software package for computing solutions to (or certifying infeasibility of) of conic optimization problems of the following form:

$$ \begin{align} \text{minimize} \ \ & c^T x \\\text{subject to} \ \ & Ax = b \\

& Gx \preceq_K h

\end{align}$$

where the symbol \(\preceq_K\) denotes a generalized inequality with respect to the cone \(K\), i.e. the vector \(h-Gx\) belongs to the cone \(K\):

$$ Gx \preceq_K h \Leftrightarrow s = h - Gx \in K. $$In ECOS, the cone \(K\) can be the product cone of three cone types: the \(n\)-dimensional positive orthant \(R_+^n\), second-order cones \(Q^n\) defined as

$$ Q^{n} = \left\{ (t,x) \in R_+ \times R^{n-1}~|~t \geq || x ||_2 \right\}, $$with \(t\) a scalar, and the exponential cone \(K_e\) defined as

$$ K_e = closure \{ (x,y,z) \in R^3~|~ exp(x/z) \leq y/z, z > 0 \}$$i.e. we have \( K = R_+^n \times Q^{n_1} \times \dots Q^{n_q} \times K_e^{(1)} \times \dots \times K_e^{(n_e)}. \)

*ECOS is open-source.*You can freely browse and download the source code on Github, and are welcome to contribute to the project.*ECOS runs on embedded platforms*. Written in ANSI C (except for the timing code), it can be compiled for any platform for which a C compiler is available. Excluding the problem setup part, no memory manager is needed for solving problem instances of same structure.*ECOS is efficient*. Using sparse linear algebra routines, it computes only what is really necessary. The interior point algorithm it implements is one of the fastest converging methods that are currently in use for solving convex conic problems.*ECOS has a tiny footprint*. The ECOS solver consists of about 1000 lines of C code (excluding the problem setup code).*ECOS is numerically robust*. Using regularization and iterative refinement coupled with a carefully chosen sparse representation of scaling matrices, millions of problem instances are solved reliably.*ECOS comes with a variety of interfaces:*CVX, YALMIP, MATLAB®, Python, Java, Scala, Julia and native C. Prototype, simulate and verify the performance of ECOS before you implement the very same code on your embedded hardware.*ECOS is library-free*. No need to link any external library to ECOS, apart from AMD and sparseLDL, both from Timothy A. Davis, which are included in this project.

If you find ECOS useful, you can cite it using the following BibTex entry:

```
@INPROCEEDINGS{bib:Domahidi2013ecos,
author={Domahidi, A. and Chu, E. and Boyd, S.},
booktitle={European Control Conference (ECC)},
t
```

itle={{ECOS}: {A}n {SOCP} solver for embedded systems},
year={2013}, pages={3071-3076}
}

ECOS is an open source project, to which a number of authors have contributed great code, fixing bugs and facilitating the use of ECOS from many different environments.

The solver is essentially based on Lieven Vandenberghe's CVXOPT ConeLP solver, although it differs in the particular way the linear systems are treated.

The following people have been, and are, involved in the development and maintenance of ECOS:

- Alexander Domahidi (principal developer)
- Eric Chu (Python interface, unit tests)
- Santiago Akle (exponential cone solver)
- Stephen Boyd (methods and maths)
- Michael Grant (CVX interface)
- Johan Löfberg (YALMIP interface)
- João Felipe Santos, Iain Dunning (Julia inteface)

The main technical idea behind ECOS is described in a short paper. More details are given in Alexander Domahidi's PhD Thesis in Chapter 9.

Details on the non-symmetric interior-point method for exponential cones can be found in Santiago Akle's PhD thesis. We are extremely grateful to Santiago for contributing his code to enhance the ECOS solver.