csdp {Rcsdp} | R Documentation |
Solve semidefinite program with CSDP
Description
Interface to CSDP semidefinite programming library. The general statement of the primal problem is
\max\, \mathrm{tr}(CX)
\mathrm{s.t.}\; A(X) = b
X \succeq 0
with
A(X)_i = \mathrm{tr}(A_iX)
where X \succeq 0
means X is positive
semidefinite, C
and all A_i
are symmetric matrices of the same
size and b
is a
vector of length m
.
The dual of the problem is
\min\, b'y
\mathrm{s.t.}\; A'(y) - C = Z
Z \succeq 0
where
A'(y) = \sum_{i=1}^m y_i A_i.
Matrices C
and A_i
are assumed to be block diagonal
structured, and must be specified that way (see Details).
Usage
csdp(C, A, b, K,control=csdp.control())
Arguments
C |
A list defining the block diagonal cost matrix |
A |
A list of length |
b |
A numeric vector of length |
K |
Describes the domain of each block of the sdp problem. It is a list with the following elements:
|
control |
Control parameters passed to csdp. See CSDP documentation. |
Details
All problem matrices are assumed to be of block diagonal structure, and must be specified as follows:
If there are
nblocks
blocks specified byK
, then the matrix must be a list withnblocks
components.If
K$type == "s"
then thej
th element of the list must define a symmetric matrix of sizeK$size
. It can be an object of class"matrix"
,"simple_triplet_sym_matrix"
, or a valid class from the class hierarchy in the"Matrix"
package.If
K$type == "l"
then thej
th element of the list must be a numeric vector of lengthK$size
.
This function checks that the blocks in arguments C
and A
agree with
the sizes given in argument K
. It also checks that the
lengths of arguments b
and A
are equal. It does not check for symmetry in the problem data.
csdp_minimal
is a minimal wrapper to the C code underlying csdp
. It assumes that the arguments
sum.block.sizes
, nconstraints
, nblocks
, block.types
, and block.sizes
are provided as if they were created by Rcsdp:::prob.info
and that the arguments C
, A
, and
b
are provided as if they were created by Rcsdp:::prepare.data
. This function may be useful when
calling the csdp functionality iteratively and most of the optimization details stays the same. For example, when the
control file created by Rcsdp:::write.control.file
stays the same across iterations, but it would be recreated
on each iteration by csdp
.
Value
X |
Optimal primal solution |
Z |
Optimal dual solution |
y |
Optimal dual solution |
pobj |
Optimal primal objective value |
dobj |
Optimal dual objective value |
status |
Status of returned solution.
|
Author(s)
Hector Corrada Bravo. CSDP written by Brian Borchers.
References
Borchers, B.:
CSDP, A C Library for Semidefinite Programming Optimization Methods and Software 11(1):613-623, 1999
http://euler.nmt.edu/~brian/csdppaper.pdfLu, F., Lin, Y., and Wahba, G.:
Robust Manifold Unfolding with Kernel Regularization TR 1108, October, 2005.
http://pages.stat.wisc.edu/~wahba/ftp1/tr1108rr.pdf
Examples
C <- list(matrix(c(2,1,
1,2),2,2,byrow=TRUE),
matrix(c(3,0,1,
0,2,0,
1,0,3),3,3,byrow=TRUE),
c(0,0))
A <- list(list(matrix(c(3,1,
1,3),2,2,byrow=TRUE),
matrix(0,3,3),
c(1,0)),
list(matrix(0,2,2),
matrix(c(3,0,1,
0,4,0,
1,0,5),3,3,byrow=TRUE),
c(0,1)))
b <- c(1,2)
K <- list(type=c("s","s","l"),size=c(2,3,2))
csdp(C,A,b,K)
# Manifold Unrolling broken stick example
# using simple triplet symmetric matrices
X <- matrix(c(-1,-1,
0,0,
1,-1),nc=2,byrow=TRUE);
d <- as.vector(dist(X)^2);
d <- d[-2]
C <- list(.simple_triplet_diag_sym_matrix(1,3))
A <- list(list(simple_triplet_sym_matrix(i=c(1,2,2),j=c(1,1,2),v=c(1,-1,1),n=3)),
list(simple_triplet_sym_matrix(i=c(2,3,3),j=c(2,2,3),v=c(1,-1,1),n=3)),
list(matrix(1,3,3)))
K <- list(type="s",size=3)
csdp(C,A,c(d,0),K)