DSDP
dsdpsdp.h
Go to the documentation of this file.
1#ifndef __TAO_DSDPSDP_H
2#define __TAO_DSDPSDP_H
7
8#include "dsdpschurmat.h"
9#include "dsdpbasictypes.h"
10#include "dsdpvec.h"
11
12#include "sdpconevec.h"
13#include "dsdpdatamat.h"
14#include "dsdpdualmat.h"
15#include "dsdpxmat.h"
16#include "dsdpdsmat.h"
17#include "dsdplanczos.h"
18
19typedef enum { SDPCONEEXIST=1, SDPCONESETUP1=2 } SDPConeStatus;
20
25typedef struct{
26 int m;
27 int *nnzblocks;
28 int **nzblocks;
29 int *ttnzmat;
30 int **nnzmats;
31 int **idA;
32 int *idAP;
34
39typedef struct{
40 int maxnnzmats;
41 int nnzmats;
42 int *nzmat;
43 DSDPDataMat *A;
44 double r; /* Multiple of Identity added to S to make it psd */
45 double scl;
47
52typedef struct{
53
54 DSDPBlockData ADATA;
55 DSDPLanczosStepLength Lanczos; /* For Lanczos steplength routine */
56
57 int n; /* Dimensions */
58 double gammamu; /* Scale Barrier, used only by user option */
59 double bmu; /* For LMI, not used */
60 char format; /* Packed Symmetric, Full Symmetric, Lower,Upper */
61 int nnz;
62 SDPConeStatus status;
63
64 SDPConeVec W;
65 SDPConeVec W2;
66 DSDPIndex IS;
67
68 DSDPDualMat S; /* Dual variable matrices */
69 DSDPDualMat SS; /* Compute primal variable matrices */
70 DSDPDSMat DS; /* Dual variable step matrices */
71 DSDPVMat T; /* Work Array and Primal variable matrice X */
72
73} SDPblk;
74
80struct SDPCone_C {
81 int keyid;
82
83 /* Dimensions */
84 int m, nn;
85
86 /* Data in block format */
87 int nblocks;
88 SDPblk *blk;
89
90 /* Transpose of Data */
92
93 /* Work space */
94 DSDPVec Work, Work2;
95
96 /* Current Solution */
97 DSDPVec YY,YX,DYX;
98 double xmakermu;
99
100 int optype;
101 DSDP dsdp;
102};
103
104#define SDPCONEKEY 5438
105#define SDPConeValid(a) {if (!(a)||((a)->keyid!=SDPCONEKEY)){ DSDPSETERR(101,"DSDPERROR: Invalid SDPCone object\n");}}
106
107#define DSDPCHKBLOCKERR(a,b); { if (b){ DSDPSETERR1(b,"Block Number: %d,\n",a);} }
108#define DSDPCHKVARERR(a,b); { if (b){ DSDPSETERR1(b,"Variable Number: %d,\n",a);} }
109
111
112#include "dsdp5.h"
113
114#ifdef __cplusplus
115extern "C" {
116#endif
117
118/* Operations on the Data */
120extern int DSDPBlockDataAllocate(DSDPBlockData*, int);
121extern int DSDPBlockAddDataMatrix(DSDPBlockData*,int, struct DSDPDataMat_Ops*, void*);
122extern int DSDPBlockSetDataMatrix(DSDPBlockData*,int, struct DSDPDataMat_Ops*, void*);
125extern int DSDPBlockDataRowSparsity(DSDPBlockData*,int,int[],int[],int);
126extern int DSDPBlockASum(DSDPBlockData*,double,DSDPVec,DSDPVMat);
130extern int DSDPBlockCheck(DSDPBlockData*,SDPConeVec,DSDPVMat);
131extern int DSDPBlockANorm2(DSDPBlockData*, DSDPVec, int);
132extern int DSDPBlockView(DSDPBlockData*);
133extern int DSDPBlockView2(DSDPBlockData*);
135extern int DSDPBlockGetMatrix(DSDPBlockData*,int,int*,double*,DSDPDataMat*);
138extern int DSDPBlockDataRank(DSDPBlockData*,int*,int);
139
140extern int DSDPBlockTakeDown(SDPblk*);
141extern int DSDPBlockInitialize(SDPblk*);
142
143extern int DSDPBlockEventInitialize(void);
144extern int DSDPBlockEventZero(void);
145
146extern int DSDPDataMatCheck(DSDPDataMat,SDPConeVec,DSDPIndex,DSDPVMat);
147
148/* Operations on the Transpose of the Data */
152
153extern int DSDPUseDefaultDualMatrix(SDPCone);
154
155extern int SDPConeSetup(SDPCone,DSDPVec);
158extern int SDPConeMultiply(SDPCone,int,double,DSDPVec,DSDPVec,DSDPVec);
159extern int SDPConeComputeRHS(SDPCone, int, double, DSDPVec, DSDPVec,DSDPVec);
160extern int SDPConeComputeXX(SDPCone,int,DSDPVec,double,DSDPDualMat, DSDPVMat);
161extern int SDPConeDestroy(SDPCone);
162
163extern int SDPConeCheckJ(SDPCone,int);
164extern int SDPConeCheckN(SDPCone,int, int);
165extern int SDPConeCheckM(SDPCone,int);
166extern int SDPConeCheckStorageFormat(SDPCone,int, char);
167
168
169extern int SDPConeComputeSS(SDPCone, int, DSDPVec, DSDPVMat);
170extern int SDPConeComputeXDot(SDPCone,int,DSDPVec,DSDPVMat,DSDPVec,double*,double*, double *);
171extern int SDPConeComputeX3(SDPCone,int,double,DSDPVec,DSDPVec,DSDPVMat);
172
173/* extern int DSDPPrintSDPA(TAO_DSDP *); */
174extern int DSDPMakeVMat(char, int, DSDPVMat*);
175extern int DSDPMakeVMatWithArray(char, double[], int, int, DSDPVMat*);
176
177extern int DSDPSetDualMatrix(SDPCone sdpcone,int (*createdualmatrix)(DSDPBlockData*,DSDPVec,DSDPVMat,DSDPVec,DSDPVec,DSDPDualMat*,DSDPDualMat*,DSDPDSMat*,void*),void*);
178
179extern int DSDPAddSDP(DSDP,SDPCone);
180#ifdef __cplusplus
181}
182#endif
183
184extern int SDPConeSetRIdentity(SDPCone,int,int,double);
185extern int DSDPDualMatEventInitialize(void);
186extern int DSDPVMatEventInitialize(void);
187extern int DSDPDualMatEventZero(void);
188extern int DSDPVMatEventZero(void);
189
190#endif
The API to DSDP for those applications using DSDP as a subroutine library.
struct SDPCone_C * SDPCone
The SDPCone object points to blocks of data that specify semidefinite matrix inequalities.
Definition dsdp5.h:26
Solver, solution types, termination codes,.
struct DSDP_C * DSDP
An implementation of the dual-scaling algorithm for semidefinite programming.
The interface between the SDPCone and the data matrices.
struct DSDPDataMat_C DSDPDataMat
Represents a single symmetric data matrix for one block in this semidefinite cone.
Definition dsdpdatamat.h:25
The interface between the SDPCone and the Delta S matrix.
struct DSDPDSMat_C DSDPDSMat
A symmetric Delta S matrix for one block in the semidefinite cone.
Definition dsdpdsmat.h:33
The interface between the SDPCone and the matrix S.
struct DSDPDualMat_C DSDPDualMat
Represents an S matrix for one block in the semidefinite cone.
Definition dsdpdualmat.h:27
Lanczos procedure determines the maximum step length.
Methods of a Schur Matrix.
struct DSDPSchurMat_C DSDPSchurMat
This object represents the Schur Matrix. Its structure is opaque to the DSDP solver,...
int DSDPBlockvAv(DSDPBlockData *, double, DSDPVec, SDPConeVec, DSDPVec)
Set VAV[i] to aa * Alpha[i] * V' A[i] V.
Definition dsdpblock.c:84
int SDPConeCheckStorageFormat(SDPCone, int, char)
Check validity of parameters.
int DSDPDataMatCheck(DSDPDataMat, SDPConeVec, DSDPIndex, DSDPVMat)
Check correctness of operations on the data.
Definition dsdpblock.c:498
int DSDPDataTransposeInitialize(DSDPDataTranspose *)
Initialize transpose structure for data.
int DSDPMakeVMatWithArray(char, double[], int, int, DSDPVMat *)
Allocate V matrix using the given array.
Definition sdpsss.c:381
int SDPConeMultiply(SDPCone, int, double, DSDPVec, DSDPVec, DSDPVec)
Compute the gradient to the barrier term.
Definition sdpcompute.c:182
int DSDPBlockAddDataMatrix(DSDPBlockData *, int, struct DSDPDataMat_Ops *, void *)
Add data matrix into SDP block.
Definition dsdpblock.c:381
int DSDPBlockView(DSDPBlockData *)
Print the structure of the block.
Definition dsdpblock.c:454
int SDPConeComputeX3(SDPCone, int, double, DSDPVec, DSDPVec, DSDPVMat)
Compute the matrix X with the given information.
Definition sdpcone.c:140
int SDPConeComputeRHS(SDPCone, int, double, DSDPVec, DSDPVec, DSDPVec)
Compute the gradient to the barrier term.
Definition sdpcompute.c:125
int DSDPBlockView2(DSDPBlockData *)
Print the data.
Definition dsdpblock.c:474
int DSDPBlockDataMarkNonzeroMatrices(DSDPBlockData *, int *)
Mark which variable in block have a data matrix.
Definition dsdpblock.c:254
int DSDPBlockDataAllocate(DSDPBlockData *, int)
Allocate some structures.
Definition dsdpblock.c:221
int SDPConeCheckJ(SDPCone, int)
Check validity of parameter.
Definition dsdpadddata.c:31
int SDPConeComputeHessian(SDPCone, double, DSDPSchurMat, DSDPVec, DSDPVec)
Compute the Hessian to the barrier term.
Definition sdpcompute.c:30
int DSDPBlockADot(DSDPBlockData *, double, DSDPVec, DSDPVMat, DSDPVec)
Compute inner product of XX with data matrices.
Definition dsdpblock.c:49
int DSDPBlockASum(DSDPBlockData *, double, DSDPVec, DSDPVMat)
Sum the data matrices.
Definition dsdpblock.c:20
int DSDPDataTransposeSetup(DSDPDataTranspose *, SDPblk *, int, int)
Set up transpose structure for data.
int SDPConeComputeXX(SDPCone, int, DSDPVec, double, DSDPDualMat, DSDPVMat)
Compute X.
Definition sdpcompute.c:235
int SDPConeSetup2(SDPCone, DSDPVec, DSDPSchurMat)
Allocate data structure of the cone.
int DSDPBlockDataInitialize(DSDPBlockData *)
Set pointers to null.
Definition dsdpblock.c:163
int DSDPBlockDataRowSparsity(DSDPBlockData *, int, int[], int[], int)
Determine sparsity pattern of data.
Definition dsdpblock.c:330
int DSDPBlockSetDataMatrix(DSDPBlockData *, int, struct DSDPDataMat_Ops *, void *)
Set data matrix into SDP block.
Definition dsdpblock.c:406
int DSDPDataTransposeTakeDown(DSDPDataTranspose *)
Free transpose structure for data.
int SDPConeSetRIdentity(SDPCone, int, int, double)
Add identify matrix to dual matrix.
int DSDPBlockFactorData(DSDPBlockData *, DSDPVMat, SDPConeVec)
Factor the data matrices.
Definition dsdpblock.c:113
int DSDPBlockGetMatrix(DSDPBlockData *, int, int *, double *, DSDPDataMat *)
Get a data matrix from a block of data.
Definition dsdpblock.c:307
int DSDPBlockDataDestroy(DSDPBlockData *)
Free the data matrices.
Definition dsdpblock.c:195
int SDPConeDestroy(SDPCone)
Free data structure of the cone.
int SDPConeCheckN(SDPCone, int, int)
Check validity of parameter.
Definition dsdpadddata.c:48
int DSDPSetDataMatZero(DSDPDataMat *)
Make a data matrix a zero matrix.
int SDPConeSetup(SDPCone, DSDPVec)
Allocate data structure of the cone.
int SDPConeCheckM(SDPCone, int)
Check validity of parameter.
Definition dsdpadddata.c:68
int DSDPBlockCountNonzeroMatrices(DSDPBlockData *, int *)
Count how many data matrices are in a block of data.
Definition dsdpblock.c:272
int SDPConeComputeSS(SDPCone, int, DSDPVec, DSDPVMat)
Sum the data matrices.
Definition sdpcone.c:18
int DSDPBlockInitialize(SDPblk *)
Initialize data structures in one block of the cone.
int DSDPBlockTakeDownData(DSDPBlockData *)
Free structures in block of data.
Definition dsdpblock.c:182
int DSDPBlockTakeDown(SDPblk *)
Free data structures in one block of the cone.
int SDPConeComputeXDot(SDPCone, int, DSDPVec, DSDPVMat, DSDPVec, double *, double *, double *)
Compute inner product of X with the Data, S, and norm of X.
Definition sdpcone.c:111
int DSDPBlockRemoveDataMatrix(DSDPBlockData *, int)
Remove a data matrix.
Definition dsdpblock.c:351
int DSDPAddSDP(DSDP, SDPCone)
Pass a semidefinite cone to the solver.
Definition sdpkcone.c:331
int DSDPMakeVMat(char, int, DSDPVMat *)
Allocate V matrix.
Definition sdpsss.c:351
Vector operations used by the solver.
struct DSDPVec_C DSDPVec
This object hold m+2 variables: a scaling of C, the y variables, and r.
Definition dsdpvec.h:25
The interface between the SDPCone and the dense matrix array.
struct DSDPVMat_C DSDPVMat
Represents a dense symmetric matrix for one block in the semidefinite cone.
Definition dsdpxmat.h:26
Each block of the SDPCone has two vectors of appropriate size.
struct SDPConeVec_C SDPConeVec
SDPConeVec is a vector with the dimension of the block in the SDP cone.
Definition sdpconevec.h:26
Internal structure for data in one block of semidefintie.
Definition dsdpsdp.h:39
Table of function pointers that operate on the data matrix.
Internal structure for transpose of data.
Definition dsdpsdp.h:25
Apply Lanczos prodedure to find distance to boundary.
Definition dsdplanczos.h:13
Internal structure for semidefinite cone.
Definition dsdpsdp.h:80
Internal structure for block of semidefinite cone.
Definition dsdpsdp.h:52