Git Product home page Git Product logo

cdcs's Introduction

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!
  • CDCS is based on a temporary research code called ADMM-PDCP, which is no longer maintained. If you downloaded ADMM-PDCP, please replace it with CDCS.

Contents

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;

To test your installation, run

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

Contact us

To contact us about CDCS, suggest improvements and report bugs, email either Giovanni Fantuzzi or Yang Zheng.

Licence

CDCS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public Licence (LGPL) as published by the Free Software Foundation; either version 3 of the Licence, or (at your option) any later version.

CDCS is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU Lesser General Public License along with CDCS; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.

cdcs's People

Contributors

blegat avatar giofantuzzi avatar goulart-paul avatar zhengy09 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

cdcs's Issues

Always show NaN in iteration progress

Hi,

Thanks for your work.

I am trying to check the feasibility of some LMIs. During the iteration progress of CDCS, all the elements show as NaN. One instance is attached (Matlab code, but save as txt to upload).
Code_for_Seuret2013AutomaticaCase3.txt

I also tried to check the feasibilities of some simple Lyapunov inequalities, and they were successfully solved.

My question is: can the instance be solved by CDCS? If so, how to fix my code.

Thanks

Nonsymmetric SDP matrix

How does CDCS interpret a nonsymmetric SDP matrix ? For instance, if in the dual form,
A'y gives the matrix

[1 x
 y 1]

what does it do ? Does it interpret it as

[1 (x+y)/2
 (x+y)/2 1]

should be PSD (like SeDuMi does)
or that

[1 x
 x 1]

should be PSD and y should be equal to x

Result contains NaN when CDCS stops after maxIter

CDCS stops after maxIter iterations and returns a vector X that contains NaNs when I try to solve the following problem instance: prob.zip

I observe the same problem with many other problem instances. Could this be a problem with my installation or a bug in CDCS? I'm using the most recent version of CDCS from this repo with MATLAB R2017a on macOS.

clear all
load prob.mat
[x,y,sedumi_info] = sedumi(A,b,c,K);

opts = cdcsOpts;
opts.maxIter = 5000;
[xt,yt,zt,cdcs_info] = cdcs(A,b,c,K,opts);

any(isnan(xt))

Error if K.q is empty

I get the following error message if K.q = []:

Operands to the || and && operators must be convertible to logical scalar
values.

Error in cdcs_utils.checkInputs (line 40)
if (isfield(K,'q') && max(K.q) > 0)

Error in cdcs (line 104)
[At,b,c,K,opts] = checkInputs(At,b,c,K,opts);

Of course I can get around that issue by deleting the field q from K before calling cdcs.
However, it may be more user friendly to check that K.q is nonempty in checkInputs:

isfield(K,'q') && ~isempty(K.q) && max(K.q) > 0

[Question] flatten function input arguments

Hi, I have a question regarding the function flatten in CDCS/packages/+cdcs_utils/flatten.m.

I think I understand what it is supposed to do; namely take a cell array containing arrays of various sizes, flatten each one of them and stack them up in a big column.

The part that I am confused about is the inputs of this function.

The function takes in 3 different aguments, lower case z, upper case Z and a flag svecFlag that is used to call CDCS/packages/+cdcs_utils/private/svec.c.
However, I don't see the first argument (lower case z) being used anywhere.

The last line of the function creates a lower case z that is the returned object but as far as I understand this is not per say using the z passed as input.

Is there something I am missing ?
Thanks a lot for any feedback :)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.