After setting the data associated with the constraint cones, DSDP
must allocate internal data
structures and factor the data in the subroutine
DSDPSetup(DSDP dsdp);This subroutine identifies factors the data, creates a Schur complement matrix with the appropriate sparsity, and allocates additional resources for the solver. This subroutine should be called after setting the data but before solving the problem. Furthermore, it should be called only once for each
DSDP
solver. On very large problems, insufficient
memory on the computer may be encountered in this subroutine, so the error code should be checked.
The convergence of the dual-scaling algorithm assumes the existence of a strict
interior in both (P) and (D). The use
of a penalty parameter can add an interior to (D).
An interior to (P) can be created by bounding the variables . If
lower and upper bounds on
these variables can be determined beforehand, they may be set
using the subroutine
DSDPBoundDualVariables(DSDP dsdp, double minbound, double maxbound).The second argument should be a negative number that is a lower bound of each variable
The subroutine
DSDPSetStandardMonitor(DSDP dsdp, int k)will tell the solver to print the objective values and other information at each k iteration to standard output. The subroutine info=DSDPLogInfoAllow(int,0); will print even more information if the first argument is positive.
The subroutine
DSDPSolve(DSDP dsdp)attempts to solve the problem. This subroutine can be called more than once. For instance, the user may try solving the problem using different initial points.
The subroutine
DSDPComputeX(DSDP dsdp)can be called after DSDPSolve() to compute the variables
DSDPGetSolutionType(DSDP dsdp, DSDPSolutionType *pdfeasible);This command sets the second argument to an enumerated type. There are four types for DSDPSolutionType. The type DSDP_UNBOUNDED means that (D) is unbounded and (P) is infeasible. The type DSDP_INFEASIBLE means that (D) is infeasible and (P) is unbounded. The type DSDP_PDFEASIBLE means that both (D) and (P) are feasible and their objective values are bounded, and the type DSDP_PDUNKNOWN means DSDP was unable to determine boundedness or feasibility in solutions. The latter type applies when the initial point for (DD) was infeasible.
Each solver created should be destroyed with the command
DSDPDestroy(DSDP dsdp);This subroutine frees the work arrays and data structures allocated by the solver.