# oxfordcontrol/CDCS

An open-source MATLAB® ADMM solver for partially decomposable conic optimization programs.
Switch branches/tags
Nothing to show
Fetching latest commit…
Cannot retrieve the latest commit at this time.
 Failed to load latest commit information. doc examples include packages .gitattributes .gitignore LICENCE.txt README.md README.txt cdcs.m cdcsInstall.m cdcsOpts.m cdcsTest.m Oct 1, 2017 cdcsYALMIPtest.m

# CDCS

CDCS (Cone Decomposition Conic Solver) is an open-source MATLAB solver for sparse conic programs with partially decomposable conic constraints. CDCS implements the alternating direction method of multipliers (ADMM) described in our paper Chordal decomposition in operator-splitting methods for sparse semidefinite programs.

Current version: 1.1.0

Release notes:

• Homogeneous self-dual embedding is the new default method
• The termination codes have changed. This means that if you use CDCS from YALMIP, the termination code returned by YALMIP will be incorrect. This should be fixed in the next YALMIP release!

## Description

CDCS solves in the standard primal and dual vectorized forms

	minimize 	c'x					maximize 	b'y
(1)	subject to	Ax = b,				(2)	subject to	A'y + z = c,
x \in K							z \in K*


where the conic constraint x \in K are partially decomposable. This means that x \in K can be replaced by p smaller conic constraints x_1 \in K_1, ..., x_p \in K_p, where x_1, ..., x_p are (possibly not-disjoint) subsets of the original optimization variable x.

CDCS supports cartesian products of the following cones:

• R^n (free variables)
• Non-negative orthant
• Second-order cone
• Positive semidefinite cone

Currently, CDCS only decomposes semidefinite cones characterized by a chordal sparsity pattern. The other supported cone types are not decomposed. This means that CDCS is most suitable for large sparse semidefinite programs (SDPs), although it can be used for any conic program over the supported cones.

CDCS offers a choice to solve the primal problem (1) only, the dual problem (2) only, or the homogeneous self-dual embedding of the two problems. From version 1.1.0, the homogeneous self-dual embedding is the default method.

## Quick start

To install CDCS, simply run the installer script in MATLAB:

>> cdcsInstall;


>> cdcsTest;


CDCS is called with the syntax

>> [x,y,z,info] = cdcs(At,b,c,K,options);


where At is the transpose of the matrix A in problems (1)-(2) above. Note that the inputs and outputs are in the same format used by SeDuMi. Type

>> help cdcsOpts


for a complete list of solver options.

NOTE: this is a research code, and is under active development. You may find some undocumented inputs and options that are being used for development purposes, in the hope that they will become part of the "official" release. If you have any suggestions for improvement, or find any bugs, feel free to contact us!

## How to cite

If you find CDCS useful, please cite at least one of the following papers as appropriate:

@article{{ZFPGWchordal2017,
archivePrefix= {arXiv},
eprint       = {1707.05058},
primaryClass = "math-OC",
author       = {Zheng, Yang and Fantuzzi, Giovanni and Papachristodoulou, Antonis and Goulart, Paul and Wynn, Andrew},
title        = {{Chordal decomposition in operator-splitting methods for sparse semidefinite programs}}
}

@misc{CDCS,
author       = {Zheng, Yang and Fantuzzi, Giovanni and Papachristodoulou, Antonis and Goulart, Paul and Wynn, Andrew},
title        = {{CDCS}: Cone Decomposition Conic Solver, version 1.1},
howpublished = {\url{https://github.com/giofantuzzi/CDCS}},
month        = Sep,
year         = 2016
}


A selection of BibTex styles that support arXiv preprints can be found here.