Features • Installation • News • Citing • Contributing
This is a Julia implementation of the Conic operator splitting method (COSMO) solver. It can solve large convex conic optimization problems of the following form:
with decision variables x ϵ R^n
, s ϵ R^m
and data matrices P=P'>=0
, q ϵ R^n
, A ϵ R^(m×n)
, and b ϵ R^m
. The convex set K
is a composition of convex sets and cones.
For more information take a look at the COSMO.jl Documentation (stable | dev).
Features
- Versatile: COSMO solves linear programs, quadratic programs, second-order cone programs, semidefinite programs and problems involving exponential and power cones
- Quad SDPs: Positive semidefinite programs with quadratic objective functions are natively supported
- Safeguarded acceleration: robust and faster convergence to higher precision using COSMOAccelerators
- Infeasibility detection: Infeasible problems are detected without a homogeneous self-dual embedding of the problem
- JuMP / Convex.jl support: We provide an interface to MathOptInterface (MOI), which allows you to describe your problem in JuMP and Convex.jl.
- Warm starting: COSMO supports warm starting of the decision variables
- Custom sets and linear solver: Customize COSMO's components by defining your own convex constraint sets and by choosing from a number of direct and indirect linear system solvers, for example, QDLDL, Pardiso, Conjugate Gradient and MINRES
- Arbitrary precision types: You can solve problems with any floating point precision.
- Open Source: Our code is free to use and distributed under the Apache 2.0 Licence
- Chordal decomposition: COSMO tries to decompose large structured PSD constraints using chordal decomposition techniques. This often results in a significant speedup compared to the original problem.
- Smart clique merging: After an initial decomposition of a structured SDP, COSMO recombines overlapping cliques/blocks to speed up the algorithm.
Installation
COSMO
can be added via the Julia package manager (type]
):pkg> add COSMO
Citing
If you find COSMO useful in your project, we kindly request that you cite the following paper:
@Article{Garstka_2021,
author = {Michael Garstka and Mark Cannon and Paul Goulart},
journal = {Journal of Optimization Theory and Applications},
title = {{COSMO}: A Conic Operator Splitting Method for Convex Conic Problems},
volume = {190},
number = {3},
pages = {779--810},
year = {2021},
publisher = {Springer},
doi = {10.1007/s10957-021-01896-x},
url = {https://doi.org/10.1007/s10957-021-01896-x}
}
The article is available under Open Access here.
Contributing
- Contributions are always welcome. Our style guide can be found here.
- Current issues, tasks and future ideas are listed in Issues. Please report any issues or bugs that you encounter.
- As an open source project we are also interested in any projects and applications that use COSMO. Please let us know by opening a GitHub issue.
Python - Interface
COSMO can also be called from Python. Take a look at: cosmo-python
Licence 🔍
This project is licensed under the Apache License - see the LICENSE.md file for details.