DSDP
dsdpsdp.h
Go to the documentation of this file.
1 #ifndef __TAO_DSDPSDP_H
2 #define __TAO_DSDPSDP_H
3 
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 
19 typedef enum { SDPCONEEXIST=1, SDPCONESETUP1=2 } SDPConeStatus;
20 
25 typedef struct{
26  int m;
27  int *nnzblocks;
28  int **nzblocks;
29  int *ttnzmat;
30  int **nnzmats;
31  int **idA;
32  int *idAP;
34 
39 typedef 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 
52 typedef 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 
80 struct 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 
110 extern int DSDPSetDataMatZero(DSDPDataMat*);
111 
112 #include "dsdp5.h"
113 
114 #ifdef __cplusplus
115 extern "C" {
116 #endif
117 
118 /* Operations on the Data */
120 extern int DSDPBlockDataAllocate(DSDPBlockData*, int);
121 extern int DSDPBlockAddDataMatrix(DSDPBlockData*,int, struct DSDPDataMat_Ops*, void*);
122 extern int DSDPBlockSetDataMatrix(DSDPBlockData*,int, struct DSDPDataMat_Ops*, void*);
125 extern int DSDPBlockDataRowSparsity(DSDPBlockData*,int,int[],int[],int);
126 extern int DSDPBlockASum(DSDPBlockData*,double,DSDPVec,DSDPVMat);
130 extern int DSDPBlockCheck(DSDPBlockData*,SDPConeVec,DSDPVMat);
131 extern int DSDPBlockANorm2(DSDPBlockData*, DSDPVec, int);
132 extern int DSDPBlockView(DSDPBlockData*);
133 extern int DSDPBlockView2(DSDPBlockData*);
135 extern int DSDPBlockGetMatrix(DSDPBlockData*,int,int*,double*,DSDPDataMat*);
138 extern int DSDPBlockDataRank(DSDPBlockData*,int*,int);
139 
140 extern int DSDPBlockTakeDown(SDPblk*);
141 extern int DSDPBlockInitialize(SDPblk*);
142 
143 extern int DSDPBlockEventInitialize(void);
144 extern int DSDPBlockEventZero(void);
145 
146 extern int DSDPDataMatCheck(DSDPDataMat,SDPConeVec,DSDPIndex,DSDPVMat);
147 
148 /* Operations on the Transpose of the Data */
151 extern int DSDPDataTransposeSetup(DSDPDataTranspose*,SDPblk*,int,int);
152 
153 extern int DSDPUseDefaultDualMatrix(SDPCone);
154 
155 extern int SDPConeSetup(SDPCone,DSDPVec);
158 extern int SDPConeMultiply(SDPCone,int,double,DSDPVec,DSDPVec,DSDPVec);
159 extern int SDPConeComputeRHS(SDPCone, int, double, DSDPVec, DSDPVec,DSDPVec);
160 extern int SDPConeComputeXX(SDPCone,int,DSDPVec,double,DSDPDualMat, DSDPVMat);
161 extern int SDPConeDestroy(SDPCone);
162 
163 extern int SDPConeCheckJ(SDPCone,int);
164 extern int SDPConeCheckN(SDPCone,int, int);
165 extern int SDPConeCheckM(SDPCone,int);
166 extern int SDPConeCheckStorageFormat(SDPCone,int, char);
167 
168 
169 extern int SDPConeComputeSS(SDPCone, int, DSDPVec, DSDPVMat);
170 extern int SDPConeComputeXDot(SDPCone,int,DSDPVec,DSDPVMat,DSDPVec,double*,double*, double *);
171 extern int SDPConeComputeX3(SDPCone,int,double,DSDPVec,DSDPVec,DSDPVMat);
172 
173 /* extern int DSDPPrintSDPA(TAO_DSDP *); */
174 extern int DSDPMakeVMat(char, int, DSDPVMat*);
175 extern int DSDPMakeVMatWithArray(char, double[], int, int, DSDPVMat*);
176 
177 extern int DSDPSetDualMatrix(SDPCone sdpcone,int (*createdualmatrix)(DSDPBlockData*,DSDPVec,DSDPVMat,DSDPVec,DSDPVec,DSDPDualMat*,DSDPDualMat*,DSDPDSMat*,void*),void*);
178 
179 extern int DSDPAddSDP(DSDP,SDPCone);
180 #ifdef __cplusplus
181 }
182 #endif
183 
184 extern int SDPConeSetRIdentity(SDPCone,int,int,double);
185 extern int DSDPDualMatEventInitialize(void);
186 extern int DSDPVMatEventInitialize(void);
187 extern int DSDPDualMatEventZero(void);
188 extern int DSDPVMatEventZero(void);
189 
190 #endif
int SDPConeComputeXX(SDPCone, int, DSDPVec, double, DSDPDualMat, DSDPVMat)
Compute X.
Definition: sdpcompute.c:235
Internal structure for transpose of data.
Definition: dsdpsdp.h:25
The interface between the SDPCone and the matrix S.
int DSDPBlockRemoveDataMatrix(DSDPBlockData *ADATA, int vari)
Remove a data matrix.
Definition: dsdpblock.c:351
int DSDPDataTransposeTakeDown(DSDPDataTranspose *)
Free transpose structure for data.
Definition: sdpconesetup.c:89
struct DSDPVec_C DSDPVec
This object hold m+2 variables: a scaling of C, the y variables, and r.
Definition: dsdpvec.h:25
int DSDPBlockASum(DSDPBlockData *ADATA, double aa, DSDPVec Yk, DSDPVMat XX)
Sum the data matrices.
Definition: dsdpblock.c:20
int DSDPMakeVMatWithArray(char, double[], int, int, DSDPVMat *)
Allocate V matrix using the given array.
Definition: sdpsss.c:381
Schur complement matrix whose solution is the Newton direction.
Definition: dsdpschurmat.h:35
Lanczos procedure determines the maximum step length.
int DSDPBlockDataMarkNonzeroMatrices(DSDPBlockData *ADATA, int *annz)
Mark which variable in block have a data matrix.
Definition: dsdpblock.c:254
int SDPConeSetRIdentity(SDPCone sdpcone, int blockj, int n, double rr)
Add identify matrix to dual matrix.
int SDPConeMultiply(SDPCone, int, double, DSDPVec, DSDPVec, DSDPVec)
Compute the gradient to the barrier term.
Definition: sdpcompute.c:182
int DSDPBlockView(DSDPBlockData *ADATA)
Print the structure of the block.
Definition: dsdpblock.c:454
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 SDPConeDestroy(SDPCone)
Free data structure of the cone.
Definition: sdpconesetup.c:350
The interface between the SDPCone and the Delta S matrix.
Internal structures for the DSDP solver.
Definition: dsdp.h:65
int DSDPDataMatCheck(DSDPDataMat AA, SDPConeVec W, DSDPIndex IS, DSDPVMat XX)
Check correctness of operations on the data.
Definition: dsdpblock.c:498
int DSDPBlockvAv(DSDPBlockData *ADATA, double aa, DSDPVec Alpha, SDPConeVec V, DSDPVec VAV)
Set VAV[i] to aa * Alpha[i] * V' A[i] V.
Definition: dsdpblock.c:84
Apply Lanczos prodedure to find distance to boundary.
Definition: dsdplanczos.h:13
The API to DSDP for those applications using DSDP as a subroutine library.
int SDPConeCheckM(SDPCone sdpcone, int m)
Check validity of parameter.
Definition: dsdpadddata.c:68
int DSDPBlockADot(DSDPBlockData *ADATA, double aa, DSDPVec Alpha, DSDPVMat X, DSDPVec AX)
Compute inner product of XX with data matrices.
Definition: dsdpblock.c:49
int DSDPBlockCountNonzeroMatrices(DSDPBlockData *ADATA, int *nzmats)
Count how many data matrices are in a block of data.
Definition: dsdpblock.c:272
Each block of the SDPCone has two vectors of appropriate size.
int DSDPBlockTakeDownData(DSDPBlockData *ADATA)
Free structures in block of data.
Definition: dsdpblock.c:182
Internal structure for data in one block of semidefintie.
Definition: dsdpsdp.h:39
Solver, solution types, termination codes,.
Vector whose length corresponds to dimension of a block in a cone.
Definition: sdpconevec.h:13
int DSDPBlockSetDataMatrix(DSDPBlockData *ADATA, int vari, struct DSDPDataMat_Ops *dsdpdataops, void *data)
Set data matrix into SDP block.
Definition: dsdpblock.c:406
Symmetric data matrix for one block in the semidefinite cone.
Definition: dsdpdatamat.h:15
int DSDPBlockView2(DSDPBlockData *ADATA)
Print the data.
Definition: dsdpblock.c:474
int DSDPBlockFactorData(DSDPBlockData *ADATA, DSDPVMat X, SDPConeVec W)
Factor the data matrices.
Definition: dsdpblock.c:113
Methods of a Schur Matrix.
The interface between the SDPCone and the dense matrix array.
int DSDPBlockTakeDown(SDPblk *)
Free data structures in one block of the cone.
Definition: sdpconesetup.c:305
Vector operations used by the solver.
The interface between the SDPCone and the data matrices.
int SDPConeComputeSS(SDPCone, int, DSDPVec, DSDPVMat)
Sum the data matrices.
Definition: sdpcone.c:18
Table of function pointers that operate on the data matrix.
int SDPConeCheckStorageFormat(SDPCone sdpcone, int blockj, char format)
Check validity of parameters.
Definition: dsdpadddata.c:101
Internal structure for block of semidefinite cone.
Definition: dsdpsdp.h:52
int DSDPSetDataMatZero(DSDPDataMat *A)
Make a data matrix a zero matrix.
int DSDPBlockDataAllocate(DSDPBlockData *ADATA, int nnz)
Allocate some structures.
Definition: dsdpblock.c:221
int SDPConeCheckJ(SDPCone sdpcone, int blockj)
Check validity of parameter.
Definition: dsdpadddata.c:31
Represents an S matrix for one block in the semidefinite cone.
Definition: dsdpdualmat.h:18
int DSDPDataTransposeInitialize(DSDPDataTranspose *)
Initialize transpose structure for data.
Definition: sdpconesetup.c:15
int DSDPBlockDataRowSparsity(DSDPBlockData *ADATA, int row, int ai[], int rnnz[], int n)
Determine sparsity pattern of data.
Definition: dsdpblock.c:330
int DSDPBlockGetMatrix(DSDPBlockData *ADATA, int id, int *vari, double *scl, DSDPDataMat *A)
Get a data matrix from a block of data.
Definition: dsdpblock.c:307
Internal structure for semidefinite cone.
Definition: dsdpsdp.h:80
int SDPConeComputeRHS(SDPCone, int, double, DSDPVec, DSDPVec, DSDPVec)
Compute the gradient to the barrier term.
Definition: sdpcompute.c:125
int SDPConeCheckN(SDPCone sdpcone, int blockj, int n)
Check validity of parameter.
Definition: dsdpadddata.c:48
int SDPConeComputeHessian(SDPCone, double, DSDPSchurMat, DSDPVec, DSDPVec)
Compute the Hessian to the barrier term.
Definition: sdpcompute.c:30
int DSDPBlockAddDataMatrix(DSDPBlockData *ADATA, int vari, struct DSDPDataMat_Ops *dsdpdataops, void *data)
Add data matrix into SDP block.
Definition: dsdpblock.c:381
int DSDPMakeVMat(char, int, DSDPVMat *)
Allocate V matrix.
Definition: sdpsss.c:351
int SDPConeComputeX3(SDPCone, int, double, DSDPVec, DSDPVec, DSDPVMat)
Compute the matrix X with the given information.
Definition: sdpcone.c:140
Symmetric Delta S matrix for one block in the semidefinite cone.
Definition: dsdpdsmat.h:23
int DSDPDataTransposeSetup(DSDPDataTranspose *, SDPblk *, int, int)
Set up transpose structure for data.
Definition: sdpconesetup.c:36
Dense symmetric matrix for one block in the semidefinite cone.
Definition: dsdpxmat.h:17
int DSDPBlockDataDestroy(DSDPBlockData *ADATA)
Free the data matrices.
Definition: dsdpblock.c:195
int DSDPBlockDataInitialize(DSDPBlockData *ADATA)
Set pointers to null.
Definition: dsdpblock.c:163
int DSDPAddSDP(DSDP, SDPCone)
Pass a semidefinite cone to the solver.
Definition: sdpkcone.c:331
int DSDPBlockInitialize(SDPblk *)
Initialize data structures in one block of the cone.
Definition: sdpconesetup.c:279
int SDPConeSetup(SDPCone, DSDPVec)
Allocate data structure of the cone.
Definition: sdpconesetup.c:249
int SDPConeSetup2(SDPCone, DSDPVec, DSDPSchurMat)
Allocate data structure of the cone.
Definition: sdpconesetup.c:224