SCIP-SDP  4.0.0
Functions
cons_sdp.h File Reference

Constraint handler for SDP-constraints. More...

Go to the source code of this file.

Functions

SCIP_EXPORT SCIP_RETCODE SCIPincludeConshdlrSdp (SCIP *scip)
 
SCIP_EXPORT SCIP_RETCODE SCIPincludeConshdlrSdpRank1 (SCIP *scip)
 
SCIP_EXPORT SCIP_RETCODE SCIPcreateConsSdp (SCIP *scip, SCIP_CONS **cons, const char *name, int nvars, int nnonz, int blocksize, int *nvarnonz, int **col, int **row, SCIP_Real **val, SCIP_VAR **vars, int constnnonz, int *constcol, int *constrow, SCIP_Real *constval, SCIP_Bool removeduplicates)
 
SCIP_EXPORT SCIP_RETCODE SCIPcreateConsSdpRank1 (SCIP *scip, SCIP_CONS **cons, const char *name, int nvars, int nnonz, int blocksize, int *nvarnonz, int **col, int **row, SCIP_Real **val, SCIP_VAR **vars, int constnnonz, int *constcol, int *constrow, SCIP_Real *constval, SCIP_Bool removeduplicates)
 
SCIP_EXPORT int SCIPconsSdpCompLowerTriangPos (int i, int j)
 
SCIP_EXPORT SCIP_RETCODE SCIPconsSdpGetData (SCIP *scip, SCIP_CONS *cons, int *nvars, int *nnonz, int *blocksize, int *arraylength, int *nvarnonz, int **col, int **row, SCIP_Real **val, SCIP_VAR **vars, int *constnnonz, int *constcol, int *constrow, SCIP_Real *constval, SCIP_Bool *rankone, int **maxevsubmat, SCIP_Bool *addedquadcons)
 
SCIP_EXPORT SCIP_RETCODE SCIPconsSdpGetNNonz (SCIP *scip, SCIP_CONS *cons, int *nnonz, int *constnnonz)
 
SCIP_EXPORT int SCIPconsSdpGetNVars (SCIP *scip, SCIP_CONS *cons)
 
SCIP_EXPORT SCIP_VAR ** SCIPconsSdpGetVars (SCIP *scip, SCIP_CONS *cons)
 
SCIP_EXPORT int SCIPconsSdpGetBlocksize (SCIP *scip, SCIP_CONS *cons)
 
SCIP_EXPORT SCIP_RETCODE SCIPconsSdpGetFullAj (SCIP *scip, SCIP_CONS *cons, int j, SCIP_Real *Aj)
 
SCIP_EXPORT SCIP_RETCODE SCIPconsSdpGetFullConstMatrix (SCIP *scip, SCIP_CONS *cons, SCIP_Real *mat)
 
SCIP_EXPORT SCIP_RETCODE SCIPconsSdpGetLowerTriangConstMatrix (SCIP *scip, SCIP_CONS *cons, SCIP_Real *mat)
 
SCIP_EXPORT SCIP_RETCODE SCIPconsSdpGuessInitialPoint (SCIP *scip, SCIP_CONS *cons, SCIP_Real *lambdastar)
 
SCIP_EXPORT SCIP_Real SCIPconsSdpGetMaxConstEntry (SCIP *scip, SCIP_CONS *cons)
 
SCIP_EXPORT SCIP_Real SCIPconsSdpGetMaxSdpCoef (SCIP *scip, SCIP_CONS *cons)
 
SCIP_EXPORT int SCIPconsSdpComputeUbSparseSdpMatrixLength (SCIP_CONS *cons)
 
SCIP_EXPORT SCIP_RETCODE SCIPconsSdpComputeSparseSdpMatrix (SCIP *scip, SCIP_CONS *cons, SCIP_SOL *sol, int *length, int *row, int *col, SCIP_Real *val)
 
SCIP_EXPORT SCIP_Bool SCIPconsSdpShouldBeRankOne (SCIP_CONS *cons)
 
SCIP_EXPORT SCIP_RETCODE SCIPconsSdpGetMaxEVSubmat (SCIP_CONS *cons, int **maxevsubmat)
 
SCIP_EXPORT SCIP_Bool SCIPconsSdpAddedQuadCons (SCIP_CONS *cons)
 

Detailed Description

Constraint handler for SDP-constraints.

Author
Sonja Mars
Lars Schewe
Tristan Gally

Constraint handler for semidefinite constraints of the form \( \sum_{j=1}^n A_j y_j - A_0 \succeq 0 \), where the matrices \(A_j\) and \(A_0\) need to be symmetric. Only the nonzero entries of the matrices are stored.

Definition in file cons_sdp.h.

Function Documentation

SCIP_EXPORT SCIP_RETCODE SCIPincludeConshdlrSdp ( SCIP *  scip)
SCIP_EXPORT SCIP_RETCODE SCIPincludeConshdlrSdpRank1 ( SCIP *  scip)
SCIP_EXPORT SCIP_RETCODE SCIPcreateConsSdp ( SCIP *  scip,
SCIP_CONS **  cons,
const char *  name,
int  nvars,
int  nnonz,
int  blocksize,
int *  nvarnonz,
int **  col,
int **  row,
SCIP_Real **  val,
SCIP_VAR **  vars,
int  constnnonz,
int *  constcol,
int *  constrow,
SCIP_Real *  constval,
SCIP_Bool  removeduplicates 
)

creates an SDP-constraint

The matrices should be lower triangular.

Parameters
scipSCIP data structure
conspointer to hold the created constraint
namename of constraint
nvarsnumber of variables in this SDP constraint
nnonznumber of nonzeros in this SDP constraint
blocksizesize of this SDP-block
nvarnonznumber of nonzeros for each variable, also length of the arrays col/row/val point to
colpointer to column indices of the nonzeros for each variable
rowpointer to row indices of the nonzeros for each variable
valpointer to values of the nonzeros for each variable
varsvariables present in this SDP constraint that correspond to the indices in col/row/val
constnnonznumber of nonzeros in the constant part of this SDP constraint
constcolcolumn indices of the constant nonzeros
constrowrow indices of the constant nonzeros
constvalvalues of the constant nonzeros
removeduplicatesShould duplicate matrix entries be removed (then order of col/row/val might change)?

Definition at line 8567 of file cons_sdp.c.

References SCIPcreateConsSdpRank1(), SCIPsdpVarfixerSortRowCol(), and setMaxRhsEntry().

Referenced by propagateUpperBounds(), SCIP_DECL_CONSCOPY(), SCIP_DECL_QUADCONSUPGD(), SCIP_DECL_READERREAD(), and SCIPconsSdpAddedQuadCons().

SCIP_EXPORT SCIP_RETCODE SCIPcreateConsSdpRank1 ( SCIP *  scip,
SCIP_CONS **  cons,
const char *  name,
int  nvars,
int  nnonz,
int  blocksize,
int *  nvarnonz,
int **  col,
int **  row,
SCIP_Real **  val,
SCIP_VAR **  vars,
int  constnnonz,
int *  constcol,
int *  constrow,
SCIP_Real *  constval,
SCIP_Bool  removeduplicates 
)

creates a rank 1 SDP-constraint

The matrices should be lower triangular.

Parameters
scipSCIP data structure
conspointer to hold the created constraint
namename of constraint
nvarsnumber of variables in this SDP constraint
nnonznumber of nonzeros in this SDP constraint
blocksizesize of this SDP-block
nvarnonznumber of nonzeros for each variable, also length of the arrays col/row/val point to
colpointer to column indices of the nonzeros for each variable
rowpointer to row indices of the nonzeros for each variable
valpointer to values of the nonzeros for each variable
varsvariables present in this SDP constraint that correspond to the indices in col/row/val
constnnonznumber of nonzeros in the constant part of this SDP constraint
constcolcolumn indices of the constant nonzeros
constrowrow indices of the constant nonzeros
constvalvalues of the constant nonzeros
removeduplicatesShould duplicate matrix entries be removed (then order of col/row/val might change)?

Definition at line 8794 of file cons_sdp.c.

References CONSHDLRRANK1_NAME, SCIPsdpVarfixerSortRowCol(), and setMaxRhsEntry().

Referenced by propagateUpperBounds(), SCIP_DECL_CONSCOPY(), SCIP_DECL_QUADCONSUPGD(), SCIP_DECL_READERREAD(), and SCIPcreateConsSdp().

SCIP_EXPORT int SCIPconsSdpCompLowerTriangPos ( int  i,
int  j 
)

for given row and column (i,j) computes the position in the lower triangular part, if these positions are numbered from 0 to n(n+1)/2 - 1, this needs to be called for i >= j

Parameters
irow index
jcolumn index

Definition at line 7965 of file cons_sdp.c.

References SCIPconsSdpGetData().

Referenced by addRank1QuadConss(), calcRelax(), computeSdpMatrix(), diagGEzero(), expandSymMatrix(), isMatrixRankOne(), SCIPconsSdpGetLowerTriangConstMatrix(), and SCIPincludeConshdlrSdpRank1().

SCIP_EXPORT SCIP_RETCODE SCIPconsSdpGetData ( SCIP *  scip,
SCIP_CONS *  cons,
int *  nvars,
int *  nnonz,
int *  blocksize,
int *  arraylength,
int *  nvarnonz,
int **  col,
int **  row,
SCIP_Real **  val,
SCIP_VAR **  vars,
int *  constnnonz,
int *  constcol,
int *  constrow,
SCIP_Real *  constval,
SCIP_Bool *  rankone,
int **  maxevsubmat,
SCIP_Bool *  addedquadcons 
)

get the data belonging to a single SDP-constraint

In arraylength the length of the nvarnonz, col, row and val arrays has to be given, if it is not sufficient to store all block-pointers that need to be inserted, a debug message will be thrown and this variable will be set to the needed length. constnnonz should give the length of the const arrays, if it is too short it will also give the needed number and a debug message is thrown.

get the data belonging to a single SDP-constraint

In arraylength the length of the nvarnonz, col, row and val arrays has to be given, if it is not sufficient to store all block-pointers that need to be inserted, a debug message will be thrown and this variable will be set to the needed length. constnnonz should give the length of the const arrays, if it is too short it will also give the needed number and a debug message is thrown. rankone and maxevsubmat can be NULL-pointers, if the corresponding information is not needed.

Parameters
scipSCIP data structure
consSDP constraint to get data of
nvarspointer to store the number of variables in this SDP constraint
nnonzpointer to store the number of nonzeros in this SDP constraint
blocksizepointer to store the size of this SDP-block
arraylengthlength of the given nvarnonz, col, row and val arrays; if this is too short, this will return the needed length
nvarnonzpointer to store the number of nonzeros for each variable, also length of the arrays col/row/val are pointing to
colpointer to store the column indices of the nonzeros for each variable
rowpointer to store the row indices of the nonzeros for each variable
valpointer to store the values of the nonzeros for each variable
varspointer to store the SCIP variables present in this constraint that correspond to the indices in col/row/val
constnnonzpointer to store the number of nonzeros in the constant part of this SDP constraint, also length of the const arrays
constcolpointer to store the column indices of the constant nonzeros
constrowpointer to store the row indices of the constant nonzeros
constvalpointer to store the values of the constant nonzeros
rankonepointer to store if matrix should be rank one (or NULL, if information not necessary)
maxevsubmatpointer to store two row indices of 2x2 subdeterminant with maximal eigenvalue [-1,-1 if not yet computed] (or NULL, if information not necessary)
addedquadconspointer to store if the quadratic 2x2-minor constraints already added (in the rank1-case) (or NULL, if information not necessary)

Definition at line 7983 of file cons_sdp.c.

References SCIPconsSdpGetNNonz().

Referenced by calcRelax(), putSdpDataInInterface(), SCIP_DECL_READERWRITE(), and SCIPconsSdpCompLowerTriangPos().

SCIP_EXPORT SCIP_RETCODE SCIPconsSdpGetNNonz ( SCIP *  scip,
SCIP_CONS *  cons,
int *  nnonz,
int *  constnnonz 
)

gets the number of nonzeros and constant nonzeros for this SDP constraint

Either nnonz or constnnonz may be NULL if only the other one is needed.

Parameters
scipSCIP data structure
consSDP constraint to get number of nonzeros for
nnonzpointer to store the number of nonzeros in this SDP constraint
constnnonzpointer to store the number of nonzeros in the constant part of this SDP constraint

Definition at line 8090 of file cons_sdp.c.

References SCIPconsSdpGetNVars().

Referenced by calcRelax(), putSdpDataInInterface(), SCIP_DECL_READERWRITE(), and SCIPconsSdpGetData().

SCIP_EXPORT int SCIPconsSdpGetNVars ( SCIP *  scip,
SCIP_CONS *  cons 
)

gets the number of variables of the SDP constraint

Parameters
scipSCIP data structure
consSDP constraint to get number of variables for

Definition at line 8115 of file cons_sdp.c.

References SCIPconsSdpGetVars().

Referenced by SCIP_DECL_HEUREXEC(), and SCIPconsSdpGetNNonz().

SCIP_EXPORT SCIP_VAR** SCIPconsSdpGetVars ( SCIP *  scip,
SCIP_CONS *  cons 
)

gets the variables of the SDP constraint

Parameters
scipSCIP data structure
consSDP constraint to get variables for

Definition at line 8132 of file cons_sdp.c.

References SCIPconsSdpGetBlocksize().

Referenced by SCIP_DECL_HEUREXEC(), and SCIPconsSdpGetNVars().

SCIP_EXPORT int SCIPconsSdpGetBlocksize ( SCIP *  scip,
SCIP_CONS *  cons 
)

gets the blocksize of the SDP constraint

Parameters
scipSCIP data structure
consSDP constraint to get blocksize for

Definition at line 8149 of file cons_sdp.c.

References SCIPconsSdpGetFullAj().

Referenced by calcRelax(), SCIP_DECL_HEUREXEC(), SCIP_DECL_READERWRITE(), SCIPconsSdpGetVars(), and SCIPrelaxSdpComputeAnalyticCenters().

SCIP_EXPORT SCIP_RETCODE SCIPconsSdpGetFullAj ( SCIP *  scip,
SCIP_CONS *  cons,
int  j,
SCIP_Real *  Aj 
)

gets the full constraint Matrix \( A_j \) for a given variable j

Parameters
scipSCIP data structure
consSDP constraint to get matrix for
jthe variable j to get the corresponding matrix \( A_j \) for
Ajpointer to store the full matrix \( A_j \)

Definition at line 8166 of file cons_sdp.c.

References SCIPconsSdpGetFullConstMatrix().

Referenced by addRank1QuadConss(), addTwoMinorLinConstraints(), addTwoMinorProdConstraints(), addTwoMinorSOCConstraints(), addTwoMinorVarBounds(), checkVarsLocks(), computeAllmatricespsd(), constructMatrixvar(), SCIP_DECL_CONSCHECK(), SCIP_DECL_CONSLOCK(), SCIP_DECL_HEUREXEC(), SCIPconsSdpGetBlocksize(), and updateVarLocks().

SCIP_EXPORT SCIP_RETCODE SCIPconsSdpGetFullConstMatrix ( SCIP *  scip,
SCIP_CONS *  cons,
SCIP_Real *  mat 
)

gives an n*n-long array with the full constant matrix

Parameters
scipSCIP data structure
consSDP constraint to get matrix for
matpointer to store the full constant matrix

Definition at line 8201 of file cons_sdp.c.

References SCIPconsSdpGetLowerTriangConstMatrix().

Referenced by addTwoMinorLinConstraints(), addTwoMinorProdConstraints(), addTwoMinorSOCConstraints(), addTwoMinorVarBounds(), constructMatrixvar(), SCIP_DECL_CONSCHECK(), SCIP_DECL_CONSPRESOL(), SCIP_DECL_HEUREXEC(), SCIPconsSdpGetFullAj(), separateSol(), tightenBounds(), and tightenMatrices().

SCIP_EXPORT SCIP_RETCODE SCIPconsSdpGetLowerTriangConstMatrix ( SCIP *  scip,
SCIP_CONS *  cons,
SCIP_Real *  mat 
)

gives a 0.5*n*(n+1)-long array with the lower triangular part of the constant matrix indexed by SCIPconsSdpCompLowerTriangPos

Parameters
scipSCIP data structure
consSDP constraint to get data of
matpointer to store the lower triangular part of the constant matrix

Definition at line 8235 of file cons_sdp.c.

References SCIPconsSdpCompLowerTriangPos(), and SCIPconsSdpGuessInitialPoint().

Referenced by addRank1QuadConss(), diagGEzero(), and SCIPconsSdpGetFullConstMatrix().

SCIP_EXPORT SCIP_RETCODE SCIPconsSdpGuessInitialPoint ( SCIP *  scip,
SCIP_CONS *  cons,
SCIP_Real *  lambdastar 
)

Compute a heuristic guess for a good starting solution \( \lambda ^* \cdot I \).

The solution is computed as

\[ \lambda^* = \max \Bigg\{S \cdot \max_{i \in [m]} \{|u_i|, |l_i|\} \cdot \max_{i \in [m]} \|A_i\|_\infty + \|C\|_\infty, \frac{\max_{i \in [m]} b_i}{S \cdot \min_{i \in [m]} \min_{j, \ell \in [n]} (A_i)_{j\ell} } \Bigg\}, \]

where \( S = \frac{ | \text{nonzero-entries of all } A_i | }{0.5 \cdot \text{ blocksize } (\text{ blocksize } + 1)} \) measures the sparsity of the matrices.

Parameters
scipSCIP data structure
consthe constraint for which the initial point should be constructed
lambdastarpointer to store the guess for the initial point

Definition at line 8274 of file cons_sdp.c.

References CONSHDLR_NAME, CONSHDLRRANK1_NAME, and SCIPconsSdpGetMaxConstEntry().

Referenced by SCIP_DECL_RELAXINITSOL(), and SCIPconsSdpGetLowerTriangConstMatrix().

SCIP_EXPORT SCIP_Real SCIPconsSdpGetMaxConstEntry ( SCIP *  scip,
SCIP_CONS *  cons 
)

Gets maximum absolute entry of constant matrix \( A_0 \)

Parameters
scipSCIP data structure
consthe constraint to get the maximum constant matrix entry for

Definition at line 8370 of file cons_sdp.c.

References SCIPconsSdpGetMaxSdpCoef().

Referenced by SCIP_DECL_RELAXINITSOL(), and SCIPconsSdpGuessInitialPoint().

SCIP_EXPORT SCIP_Real SCIPconsSdpGetMaxSdpCoef ( SCIP *  scip,
SCIP_CONS *  cons 
)

Gets maximum absolute entry of all matrices \( A_i \)

Parameters
scipSCIP data structure
consthe constraint to get the maximum constant matrix entry for

Definition at line 8386 of file cons_sdp.c.

References SCIPconsSdpComputeUbSparseSdpMatrixLength().

Referenced by SCIP_DECL_RELAXINITSOL(), and SCIPconsSdpGetMaxConstEntry().

SCIP_EXPORT int SCIPconsSdpComputeUbSparseSdpMatrixLength ( SCIP_CONS *  cons)

Computes an upper bound on the number of nonzeros of the (dual) SDP matrix \( Z = \sum_{j=1}^n A_j y_j - A_0 \), this should be used to allocate enough memory before calling SCIPconsSdpComputeSparseSdpMatrix.

Upper bound is computed as \( \min \{ \sum_{v \leq m} \text{nvarnonz}(v) + \text{constnnonz}, n \cdot (n+1) / 2 \} \).

Parameters
consthe constraint for which the Matrix should be assembled

Definition at line 8420 of file cons_sdp.c.

References SCIPconsSdpComputeSparseSdpMatrix().

Referenced by calcRelax(), SCIPconsSdpGetMaxSdpCoef(), and SCIPrelaxSdpComputeAnalyticCenters().

SCIP_EXPORT SCIP_RETCODE SCIPconsSdpComputeSparseSdpMatrix ( SCIP *  scip,
SCIP_CONS *  cons,
SCIP_SOL *  sol,
int *  length,
int *  row,
int *  col,
SCIP_Real *  val 
)

Computes (dual) SDP matrix \( Z = \sum_{j=1}^n A_j y_j - A_0 \) and returns it in sparse format

Note
row, col and val should have memory allocated equal to SCIPconsSdpComputeUbSparseSdpMatrixLength(), if the memory is not sufficient, length will be set to -1 and an error will be thrown
Parameters
scipSCIP data structure
consthe constraint for which the Matrix should be assembled
solthe solution to assemble the matrix for
lengthinput: allocated memory for row/col/val arrays output: number of nonzeros of the matrix / length of row/col/val arrays
rowpointer to store row indices of SDP-matrix
colpointer to store column indices of SDP-matrix
valpointer to store values of SDP-matrix

Definition at line 8448 of file cons_sdp.c.

References SCIPconsSdpShouldBeRankOne(), and SCIPsdpVarfixerMergeArrays().

Referenced by calcRelax(), SCIPconsSdpComputeUbSparseSdpMatrixLength(), and SCIPrelaxSdpComputeAnalyticCenters().

SCIP_EXPORT SCIP_Bool SCIPconsSdpShouldBeRankOne ( SCIP_CONS *  cons)

returns wheter matrix should be rank one

returns whether the matrix should be rank one

Parameters
consthe constraint for which the existence of a rank one constraint should be checked

Definition at line 8513 of file cons_sdp.c.

References SCIPconsSdpGetMaxEVSubmat().

Referenced by SCIP_DECL_READERWRITE(), and SCIPconsSdpComputeSparseSdpMatrix().

SCIP_EXPORT SCIP_RETCODE SCIPconsSdpGetMaxEVSubmat ( SCIP_CONS *  cons,
int **  maxevsubmat 
)

returns two row indices of 2x2 subdeterminant with maximal eigenvalue [or -1,-1 if not available]

Parameters
consthe constraint for which the existence of a rank one constraint should be checked
maxevsubmatpointer to store the two row indices of 2x2 subdeterminant with maximal eigenvalue [or -1,-1 if not available]

Definition at line 8528 of file cons_sdp.c.

References SCIPconsSdpAddedQuadCons().

Referenced by SCIPconsSdpShouldBeRankOne().

SCIP_EXPORT SCIP_Bool SCIPconsSdpAddedQuadCons ( SCIP_CONS *  cons)

returns whether the quadratic 2x2-minor constraints are already added (in the rank1-case)

Parameters
consthe constraint for which it should be checked whether the quadratic 2x2-minor constraints are already added (in the rank1-case)

Definition at line 8549 of file cons_sdp.c.

References SCIPcreateConsSdp().

Referenced by SCIPconsSdpGetMaxEVSubmat().