Primal and dual nondegeneracy conditions are defined for SDP's in [6]. It is important to realize that these conditions are defined with respect to the specified block structure (see [7]), so that they reduce to standard LP conditions in the special case that all blocks are one. The extensions of these concepts to SQLP's will be discussed in [3]. See also the comments in the codes for the definitions. The most important of these can be accessed using Matlab's help command. The routines are:
[cndp,Dsize,D] = pcond(A,blk,X,tol)
where , , are structures as earlier and tol is a tolerance used to decide whether components of are or are not on the boundary of their cones. In exact arithmetic, the routine would return the value ( ) if and only if the problem is primal degenerate at . A large value of cndp is a strong indication that the problem is primal degenerate. Type help pcond for the definition, as well as an explanation of the output parameters Dsize and D.
[cndd,Bsize,B] = dcond(A,blk,Z,tol)
where , , are structures as earlier and tol is a tolerance used to decide whether components of are or are not on the boundary of their cones. In exact arithmetic, the routine would return the value ( ) if and only if the problem is dual degenerate at . A large value of cndd is a strong indication that the problem is dual degenerate. Type help dcond for the definition, as well as an explanation of the output parameters Bsize and B.
As a rough guide, if ( ) passed to pcond.m (dcond.m) is the solution of an SQLP solved with the default parameter values in setopt.m, and if , then a value exceeding, say , for cndp (cndd) is indicative of primal (dual) degeneracy. Avoid setting tol too small, especially if strict complementarity does not hold, in which case try values larger than .
Primal (dual) nondegeneracy implies the uniqueness of dual (primal) solutions. The converse is true if strict complementarity holds [6].
Before calling pcond.m or dcond.m for a diagonally constrained SDP or a Lovász problem, the user must ensure that , and have been constructed. This can easily be done by calling the appropriate script (dsdp.m or lsdp.m) with and . Upon termination of the script, the variables will be defined in the Matlab workspace.