next up previous contents index
Next: Convergence Criteria Up: DSDP Subroutine Library Previous: LP Cone   Contents   Index

Applying the Solver

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 $y$. 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 $y_i$ and the third argument is an upper bound of each variable. These bounds should not be tight. Bounds of negative and positive 1.0e6 can significantly improve the robustness of the solver while usually not affecting the solution. Even if the solution set for $y$ is bounded and bounds have already been incorporated into the model, the developers suggest setting bounds using this routine. If one of the variables nearly equals the bound at the solution, the solver will return a termination code saying (D) is unbounded.

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 $X$ in (P). These computations are not perfomed within the solver because these variables are not needed to compute the step direction. Infeasibility in either (P) or (D) can be determined using the command
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.


next up previous contents index
Next: Convergence Criteria Up: DSDP Subroutine Library Previous: LP Cone   Contents   Index
Steven Benson 2005-02-11