27 #define MAX_DSDP_MONITORS 5 51 int (*monitor)(
struct DSDP_C *,
void*);
80 int solvetime,cgtime,ptime,dtime,ctime;
97 double rho,potential,logdet,rhon;
99 double maxtrustradius;
100 double cnorm,anorm,bnorm;
101 double tracex,tracexs;
120 DSDPPenalty UsePenalty;
125 XMaker xmaker[MAX_XMAKERS];
136 ConvergenceMonitor conv;
139 DMonitor dmonitor[MAX_DSDP_MONITORS];
142 DRoutine droutine[10];
146 typedef struct DSDP_C PD_DSDP;
150 #define DSDPValid(a) {if (!(a)||((a)->keyid!=DSDPKEY)){ DSDPSETERR(101,"DSDPERROR: Invalid DSDP object\n");}} 206 extern int DSDPComputeDualStepDirection(
DSDP,
double,
DSDPVec);
225 extern int DSDPMonitor(
DSDP);
227 extern int DSDPPrintStatsFile(
DSDP,
void*);
237 extern int RConeSetType(
RRCone, DSDPPenalty);
238 extern int RConeGetRX(
RRCone,
double*);
243 extern int DSDPSetDefaultSchurMatrixStructure(
DSDP);
DSDPTruth
Boolean variables.
int DSDPViewCones(DSDP)
Each cone should print its state.
int DSDPComputeLogSDeterminant(DSDP, double *)
Compute the logarithmic barrier function for the dual varialbe S.
int DSDPTakeDown(DSDP)
Destroy internal data structures.
struct DSDPVec_C DSDPVec
This object hold m+2 variables: a scaling of C, the y variables, and r.
struct RDCone * RRCone
Cone with nonnegativity on variable r.
int DSDPInvertS(DSDP)
Invert the S variables in each cone.
int DSDPComputeDualStepDirections(DSDP)
Compute the step direction by computing a linear system and solving it.
Schur complement matrix whose solution is the Newton direction.
int DSDPComputeSS(DSDP, DSDPVec, DSDPDualFactorMatrix, DSDPTruth *)
Compute the dual variables S in each cone.
int DSDPComputePDY1(DSDP, double, DSDPVec)
Compute an affine step direction dy1.
int DSDPComputeNewY(DSDP, double, DSDPVec)
Update the Y variables.
Detect convergence of the solver from the duality gap and step sizes.
int DSDPObjectiveGH(DSDP, DSDPSchurMat, DSDPVec)
Compute gradient of dual objective.
int DSDPMonitorCones(DSDP, int)
This routine is called once per iteration.
int DSDPSetCone(DSDP, DSDPCone)
Pass a cone to the DSDP solver.
Internal structures for the DSDP solver.
int DSDPPrintStats(DSDP, void *)
Print statistics about the current solution to standard output.
DSDPTerminationReason
There are many reasons to terminate the solver.
int DSDPCheckConvergence(DSDP, DSDPTerminationReason *)
Check for convergence and monitor solution.
int DSDPSetRR(DSDP, double)
Set variable r.
int DSDPScaleData(DSDP)
Scale the matrix C.
int DSDPSetDefaultParameters(DSDP)
Set default parameters.
int DSDPComputeDualityGap(DSDP, double, double *)
Compute the current duality gap.
int DSDPComputePY(DSDP, double, DSDPVec)
Compute PY = Y - beta DY for use in computing X.
int DSDPComputeDataNorms(DSDP)
Compute norms of A,C, and b.
Solver, solution types, termination codes,.
int DSDPInitializeVariables(DSDP)
Initialize variables and factor S.
int DSDPSaveYForX(DSDP, double, double)
Save the current solution for later computation of X.
int DSDPSetY(DSDP, double, double, DSDPVec)
Update the solver with these y variables.
int DSDPGetConicDimension(DSDP, double *)
Get the total dimension of the cones.
int DSDPDefaultConvergence(DSDP, void *)
Check for Convergence.
int DSDPComputeRHS(DSDP, double, DSDPVec)
Compute the right-hand side of the linear system that determines the step direction.
int DSDPSetDefaultStatistics(DSDP)
Set default statistics.
int DSDPAddRCone(DSDP dsdp, RCone **rrcone)
A separate cone specifies that r must be nonnegative.
int DSDPSolveDynamicRho(DSDP)
Apply dual-scaling algorithm.
int DSDPCreateLUBoundsCone(DSDP, YBoundCone *)
Create bounds cone.
Methods of a Schur Matrix.
Vector operations used by the solver.
int DSDPHessianMultiplyAdd(DSDP, DSDPVec, DSDPVec)
Add the product of Schur matrix with v.
int DSDPSetUpCones(DSDP)
Each cone should factor data or allocate internal data structures.
int DSDPComputeDY(DSDP, double, DSDPVec, double *)
Compute the step direction.
struct DSDPCone_C DSDPCone
This object holds the data of a SDP, LP, or other cone. Its structure is opaque to the DSDP Solver...
int DSDPComputeHessian(DSDP, DSDPSchurMat, DSDPVec, DSDPVec)
Compute the Schur complement, or Gram, matrix for each cone.
int DSDPComputeXVariables(DSDP, double, DSDPVec, DSDPVec, DSDPVec, double *)
Compute the X variables in each cone.
The public interface between the cones and the solver.
int DSDPComputePotential(DSDP, DSDPVec, double, double *)
Compute the potential of the given point.
int DSDPGetConvergenceMonitor(DSDP, ConvergenceMonitor **)
Get the structure containing convergence parameters.
int DSDPComputeANorm2(DSDP, DSDPVec)
Compute norm of A and C.
int DSDPComputeObjective(DSDP, DSDPVec, double *)
Compute the objective function (DD).
int DSDPGetRR(DSDP, double *)
Get variable r.
int DSDPComputeG(DSDP, DSDPVec, DSDPVec, DSDPVec)
Compute the gradient of the barrier for each cone.
int DSDPComputeMaxStepLength(DSDP, DSDPVec, DSDPDualFactorMatrix, double *)
Compute the maximum step length for the given step direction.
DSDPDualFactorMatrix
DSDP requires two instances of the data structures S.
int DSDPComputePNorm(DSDP, double, DSDPVec, double *)
Compute proximity to a point on the central path.
int DSDPDestroyCones(DSDP)
Each cone shoudl free its data structures.
struct LUBounds_C * YBoundCone
Cone with bounds on variables y.
int DSDPPassXVectors(DSDP, double, DSDPVec, DSDPVec)
Pass the information needed to compute the variables X in each cone but do not compute X...
int BoundYConeSetBounds(YBoundCone, double, double)
Set bounds on the variables.
int DSDPSchurSparsity(DSDP, int, int[], int)
Each cone should print its state.
int DSDPComputePDY(DSDP, double, DSDPVec, double *)
Compute the step direction.
int DSDPSetUpCones2(DSDP, DSDPVec, DSDPSchurMat)
Each cone should allocate its data structures .
int BoundYConeGetBounds(YBoundCone, double *, double *)
Get bounds on the variables.
int DSDPComputePotential2(DSDP, DSDPVec, double, double, double *)
Compute the objective function plus the barrier function.
int DSDPCGSolve(DSDP, DSDPSchurMat, DSDPVec, DSDPVec, double, DSDPTruth *)
Apply CG to solve for the step directions.
int DSDPSetDefaultMonitors(DSDP)
Set convergence monitor.
DSDPSolutionType
Formulations (P) and (D) can be feasible and bounded, feasible and unbounded, or infeasible.
int DSDPGetMaxYElement(DSDP, double *)
Copy the the infinity norm of the variables y.