SCIP-SDP  2.0.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Macros | Functions
sdpi.c File Reference

General interface methods for SDP-preprocessing (mainly fixing variables and removing empty rows/cols) More...

Go to the source code of this file.

Macros

#define BMS_CALL(x)
 
#define CHECK_IF_SOLVED(sdpi)
 
#define CHECK_IF_SOLVED_BOOL(sdpi)
 
#define DUPLICATE_ARRAY_NULL(blkmem, target, source, size)
 
#define SCIP_CALL_PARAM(x)
 

Functions

static void ensureLowerTriangular (int *i, int *j)
 
static SCIP_Bool isFixed (SCIP_SDPI *sdpi, int v)
 
static SCIP_RETCODE compConstMatAfterFixings (SCIP_SDPI *sdpi, int *sdpconstnnonz, int *sdpconstnblocknonz, int **sdpconstrow, int **sdpconstcol, SCIP_Real **sdpconstval)
 
static SCIP_RETCODE findEmptyRowColsSDP (SCIP_SDPI *sdpi, int *sdpconstnblocknonz, int **sdpconstrow, int **sdpconstcol, SCIP_Real **sdpconstval, int **indchanges, int *nremovedinds, int *blockindchanges, int *nremovedblocks)
 
static SCIP_RETCODE computeLpLhsRhsAfterFixings (SCIP_SDPI *sdpi, int *nactivelpcons, SCIP_Real *lplhsafterfix, SCIP_Real *lprhsafterfix, int *rownactivevars, SCIP_Bool *fixingsfound)
 
Miscellaneous Methods
const char * SCIPsdpiGetSolverName (void)
 
const char * SCIPsdpiGetSolverDesc (void)
 
void * SCIPsdpiGetSolverPointer (SCIP_SDPI *sdpi)
 
SDPI Creation and Destruction Methods
SCIP_RETCODE SCIPsdpiCreate (SCIP_SDPI **sdpi, SCIP_MESSAGEHDLR *messagehdlr, BMS_BLKMEM *blkmem)
 
SCIP_RETCODE SCIPsdpiFree (SCIP_SDPI **sdpi)
 
SCIP_RETCODE SCIPsdpiClone (SCIP_SDPI *oldsdpi, SCIP_SDPI *newsdpi)
 
Modification Methods
SCIP_RETCODE SCIPsdpiLoadSDP (SCIP_SDPI *sdpi, int nvars, SCIP_Real *obj, SCIP_Real *lb, SCIP_Real *ub, int nsdpblocks, int *sdpblocksizes, int *sdpnblockvars, int sdpconstnnonz, int *sdpconstnblocknonz, int **sdpconstrow, int **sdpconstcol, SCIP_Real **sdpconstval, int sdpnnonz, int **sdpnblockvarnonz, int **sdpvar, int ***sdprow, int ***sdpcol, SCIP_Real ***sdpval, int nlpcons, SCIP_Real *lplhs, SCIP_Real *lprhs, int lpnnonz, int *lprow, int *lpcol, SCIP_Real *lpval)
 
SCIP_RETCODE SCIPsdpiAddLPRows (SCIP_SDPI *sdpi, int nrows, const SCIP_Real *lhs, const SCIP_Real *rhs, int nnonz, const int *row, const int *col, const SCIP_Real *val)
 
SCIP_RETCODE SCIPsdpiDelLPRows (SCIP_SDPI *sdpi, int firstrow, int lastrow)
 
SCIP_RETCODE SCIPsdpiDelLPRowset (SCIP_SDPI *sdpi, int *dstat)
 
SCIP_RETCODE SCIPsdpiClear (SCIP_SDPI *sdpi)
 
SCIP_RETCODE SCIPsdpiChgBounds (SCIP_SDPI *sdpi, int nvars, const int *ind, const SCIP_Real *lb, const SCIP_Real *ub)
 
SCIP_RETCODE SCIPsdpiChgLPLhRhSides (SCIP_SDPI *sdpi, int nrows, const int *ind, const SCIP_Real *lhs, const SCIP_Real *rhs)
 
Data Accessing Methods
SCIP_RETCODE SCIPsdpiGetNLPRows (SCIP_SDPI *sdpi, int *nlprows)
 
SCIP_RETCODE SCIPsdpiGetNSDPBlocks (SCIP_SDPI *sdpi, int *nsdpblocks)
 
SCIP_RETCODE SCIPsdpiGetNVars (SCIP_SDPI *sdpi, int *nvars)
 
SCIP_RETCODE SCIPsdpiGetSDPNNonz (SCIP_SDPI *sdpi, int *nnonz)
 
SCIP_RETCODE SCIPsdpiGetConstNNonz (SCIP_SDPI *sdpi, int *nnonz)
 
SCIP_RETCODE SCIPsdpiGetLPNNonz (SCIP_SDPI *sdpi, int *nnonz)
 
SCIP_RETCODE SCIPsdpiGetObj (SCIP_SDPI *sdpi, int firstvar, int lastvar, SCIP_Real *vals)
 
SCIP_RETCODE SCIPsdpiGetBounds (SCIP_SDPI *sdpi, int firstvar, int lastvar, SCIP_Real *lbs, SCIP_Real *ubs)
 
SCIP_RETCODE SCIPsdpiGetLhSides (SCIP_SDPI *sdpi, int firstrow, int lastrow, SCIP_Real *lhss)
 
SCIP_RETCODE SCIPsdpiGetRhSides (SCIP_SDPI *sdpi, int firstrow, int lastrow, SCIP_Real *rhss)
 
Solving Methods
SCIP_RETCODE SCIPsdpiSolve (SCIP_SDPI *sdpi, SCIP_Real *start, int *totalsdpiterations, SCIP_Bool enforceslatercheck)
 
Solution Information Methods
SCIP_Bool SCIPsdpiWasSolved (SCIP_SDPI *sdpi)
 
SCIP_Bool SCIPsdpiSolvedOrig (SCIP_SDPI *sdpi)
 
SCIP_Bool SCIPsdpiFeasibilityKnown (SCIP_SDPI *sdpi)
 
SCIP_RETCODE SCIPsdpiGetSolFeasibility (SCIP_SDPI *sdpi, SCIP_Bool *primalfeasible, SCIP_Bool *dualfeasible)
 
SCIP_Bool SCIPsdpiIsPrimalUnbounded (SCIP_SDPI *sdpi)
 
SCIP_Bool SCIPsdpiIsPrimalInfeasible (SCIP_SDPI *sdpi)
 
SCIP_Bool SCIPsdpiIsPrimalFeasible (SCIP_SDPI *sdpi)
 
SCIP_Bool SCIPsdpiIsDualUnbounded (SCIP_SDPI *sdpi)
 
SCIP_Bool SCIPsdpiIsDualInfeasible (SCIP_SDPI *sdpi)
 
SCIP_Bool SCIPsdpiIsDualFeasible (SCIP_SDPI *sdpi)
 
SCIP_Bool SCIPsdpiIsConverged (SCIP_SDPI *sdpi)
 
SCIP_Bool SCIPsdpiIsObjlimExc (SCIP_SDPI *sdpi)
 
SCIP_Bool SCIPsdpiIsIterlimExc (SCIP_SDPI *sdpi)
 
SCIP_Bool SCIPsdpiIsTimelimExc (SCIP_SDPI *sdpi)
 
int SCIPsdpiGetInternalStatus (SCIP_SDPI *sdpi)
 
SCIP_Bool SCIPsdpiIsOptimal (SCIP_SDPI *sdpi)
 
SCIP_Bool SCIPsdpiIsAcceptable (SCIP_SDPI *sdpi)
 
SCIP_RETCODE SCIPsdpiGetObjval (SCIP_SDPI *sdpi, SCIP_Real *objval)
 
SCIP_RETCODE SCIPsdpiGetSol (SCIP_SDPI *sdpi, SCIP_Real *objval, SCIP_Real *dualsol, int *dualsollength)
 
SCIP_RETCODE SCIPsdpiGetPrimalBoundVars (SCIP_SDPI *sdpi, SCIP_Real *lbvars, SCIP_Real *ubvars, int *arraylength)
 
SCIP_RETCODE SCIPsdpiGetIterations (SCIP_SDPI *sdpi, int *iterations)
 
Numerical Methods
SCIP_Real SCIPsdpiInfinity (SCIP_SDPI *sdpi)
 
SCIP_Bool SCIPsdpiIsInfinity (SCIP_SDPI *sdpi, SCIP_Real val)
 
SCIP_Real SCIPsdpiMaxPenParam (SCIP_SDPI *sdpi)
 
SCIP_Bool SCIPsdpiIsGEMaxPenParam (SCIP_SDPI *sdpi, SCIP_Real val)
 
SCIP_RETCODE SCIPsdpiGetRealpar (SCIP_SDPI *sdpi, SCIP_SDPPARAM type, SCIP_Real *dval)
 
SCIP_RETCODE SCIPsdpiSetRealpar (SCIP_SDPI *sdpi, SCIP_SDPPARAM type, SCIP_Real dval)
 
SCIP_RETCODE SCIPsdpiGetIntpar (SCIP_SDPI *sdpi, SCIP_SDPPARAM type, int *ival)
 
SCIP_RETCODE SCIPsdpiSetIntpar (SCIP_SDPI *sdpi, SCIP_SDPPARAM type, int ival)
 
File Interface Methods
SCIP_RETCODE SCIPsdpiReadSDP (SCIP_SDPI *sdpi, const char *fname)
 
SCIP_RETCODE SCIPsdpiWriteSDP (SCIP_SDPI *sdpi, const char *fname)
 

Detailed Description

General interface methods for SDP-preprocessing (mainly fixing variables and removing empty rows/cols)

Author
Tristan Gally

Definition in file sdpi.c.

Macro Definition Documentation

#define BMS_CALL (   x)
Value:
do \
{ \
if( NULL == (x) ) \
{ \
SCIPerrorMessage("No memory in function call\n"); \
return SCIP_NOMEMORY; \
} \
} \
while( FALSE )

Checks if a BMSallocMemory-call was successfull, otherwise returns SCIP_NOMEMRY

Definition at line 53 of file sdpi.c.

Referenced by compConstMatAfterFixings(), SCIPsdpiAddLPRows(), SCIPsdpiClone(), SCIPsdpiCreate(), SCIPsdpiDelLPRows(), SCIPsdpiLoadSDP(), and SCIPsdpiSolve().

#define CHECK_IF_SOLVED (   sdpi)
Value:
do \
{ \
if ( ! (sdpi->solved) ) \
{ \
SCIPerrorMessage("Tried to access solution information ahead of solving! \n"); \
return SCIP_LPERROR; \
} \
} \
while( FALSE )

this will be called in all functions that want to access solution information to check if the problem was solved since the last change of the problem

Definition at line 64 of file sdpi.c.

Referenced by SCIPsdpiGetIterations(), SCIPsdpiGetObjval(), SCIPsdpiGetPrimalBoundVars(), SCIPsdpiGetSol(), and SCIPsdpiGetSolFeasibility().

#define CHECK_IF_SOLVED_BOOL (   sdpi)
Value:
do \
{ \
if ( ! (sdpi->solved) ) \
{ \
SCIPerrorMessage("Tried to access solution information ahead of solving! \n"); \
return FALSE; \
} \
} \
while( FALSE )

same as CHECK_IF_SOLVED, but this will be used in functions returning a boolean value

Definition at line 75 of file sdpi.c.

Referenced by SCIPsdpiFeasibilityKnown(), SCIPsdpiIsAcceptable(), SCIPsdpiIsConverged(), SCIPsdpiIsDualFeasible(), SCIPsdpiIsDualInfeasible(), SCIPsdpiIsDualUnbounded(), SCIPsdpiIsIterlimExc(), SCIPsdpiIsObjlimExc(), SCIPsdpiIsOptimal(), SCIPsdpiIsPrimalFeasible(), SCIPsdpiIsPrimalInfeasible(), SCIPsdpiIsPrimalUnbounded(), and SCIPsdpiIsTimelimExc().

#define DUPLICATE_ARRAY_NULL (   blkmem,
  target,
  source,
  size 
)
Value:
do \
{ \
if (size > 0) \
BMS_CALL( BMSduplicateBlockMemoryArray(blkmem, target, source, size) ); \
else \
*target = NULL; \
} \
while( FALSE )
#define BMS_CALL(x)
Definition: sdpi.c:53

duplicate an array that might be null (in that case null is returned, otherwise BMSduplicateMemory is called)

Definition at line 86 of file sdpi.c.

Referenced by SCIPsdpiLoadSDP().

#define SCIP_CALL_PARAM (   x)
Value:
do \
{ \
SCIP_RETCODE _restat_; \
if ( (_restat_ = (x)) != SCIP_OKAY ) \
{ \
if ( _restat_ != SCIP_PARAMETERUNKNOWN ) \
{ \
SCIPerrorMessage("Error <%d> in function call\n", _restat_); \
SCIPABORT(); \
} \
return _restat_; \
} \
} \
while( FALSE )

same as SCIP_CALL, but gives a SCIP_PARAMETERUNKNOWN error if it fails

Definition at line 96 of file sdpi.c.

Referenced by SCIPsdpiGetIntpar(), SCIPsdpiGetRealpar(), SCIPsdpiSetIntpar(), and SCIPsdpiSetRealpar().

Function Documentation

static void ensureLowerTriangular ( int *  i,
int *  j 
)
static

For given row and column (i,j) checks if i >= j, so that i and j give a position in the lower triangular part, otherwise i and j will be switched. This function will be called whenever a position in a symmetric matrix is given, to prevent problems if position (i,j) is given but later (j,i) should be changed.

Parameters
irow index
jcolumn index

Definition at line 172 of file sdpi.c.

Referenced by SCIPsdpiLoadSDP().

static SCIP_Bool isFixed ( SCIP_SDPI sdpi,
int  v 
)
static

tests if for a given variable the lower bound is in an epsilon neighborhood of the upper bound

Parameters
sdpipointer to an SDP interface structure
vglobal index of the variable to check this for

Definition at line 189 of file sdpi.c.

Referenced by compConstMatAfterFixings(), computeLpLhsRhsAfterFixings(), and findEmptyRowColsSDP().

static SCIP_RETCODE compConstMatAfterFixings ( SCIP_SDPI sdpi,
int *  sdpconstnnonz,
int *  sdpconstnblocknonz,
int **  sdpconstrow,
int **  sdpconstcol,
SCIP_Real **  sdpconstval 
)
static

Computes the constant Matrix after all variables with lb=ub have been fixed and their nonzeros were moved to the constant part. The five variables other than sdpi are used to return the matrix.

The size of sdpconstnblocknonz and the first pointers of sdpconst row/col/val should be equal to sdpi->nsdpblocks, the size of sdpconst row/col/val [i], which is given in sdpconstblocknnonz, needs to be sufficient, otherwise the needed length will be returned in sdpconstnblocknonz and a debug message will be thrown.

Parameters
sdpipointer to an SDP interface structure
sdpconstnnonznumber of nonzero elements in the constant matrices of the SDP-Blocks
sdpconstnblocknonznumber of nonzeros for each variable in the constant part, also the i-th entry gives the number of entries of sdpconst row/col/val [i]
sdpconstrowpointers to row-indices for each block
sdpconstcolpointers to column-indices for each block
sdpconstvalpointers to the values of the nonzeros for each block

Definition at line 221 of file sdpi.c.

References BMS_CALL, isFixed(), and SCIPsdpVarfixerMergeArraysIntoNew().

Referenced by SCIPsdpiSolve().

static SCIP_RETCODE findEmptyRowColsSDP ( SCIP_SDPI sdpi,
int *  sdpconstnblocknonz,
int **  sdpconstrow,
int **  sdpconstcol,
SCIP_Real **  sdpconstval,
int **  indchanges,
int *  nremovedinds,
int *  blockindchanges,
int *  nremovedblocks 
)
static

This takes the sdpi and the computed constant matrix after fixings as input and checks for empty rows and columns in each block, which should be removed to not harm the Slater condition. It also removes SDP blocks with no entries left, these are returned in blockindchanges and nremovedblocks.

Parameters
sdpipointer to an SDP interface structure
sdpconstnblocknonznumber of nonzeros for each variable in the constant part, also the i-th entry gives the number of entries of sdpconst row/col/val [i]
sdpconstrowpointers to row-indices for each block
sdpconstcolpointers to column-indices for each block
sdpconstvalpointers to the values of the nonzeros for each block
indchangespointer to store the changes needed to be done to the indices, if indchange[block][nonz]=-1, then the index can be removed, otherwise it gives the number of indices removed before this, i.e. the value to decrease this index by, this array should have memory allocated in the size sdpi->nsdpblocks times sdpi->sdpblocksizes[block]
nremovedindspointer to store the number of rows/cols to be fixed for each block
blockindchangespointer to store index change for each block, system is the same as for indchanges
nremovedblockspointer to store the number of blocks to be removed from the SDP

Definition at line 335 of file sdpi.c.

References isFixed().

Referenced by SCIPsdpiSolve().

static SCIP_RETCODE computeLpLhsRhsAfterFixings ( SCIP_SDPI sdpi,
int *  nactivelpcons,
SCIP_Real *  lplhsafterfix,
SCIP_Real *  lprhsafterfix,
int *  rownactivevars,
SCIP_Bool *  fixingsfound 
)
static

computes the number of active variables for each constraint, thereby detecting constraints that may be removed, and computes the LP-left- and right-hand-sides after including all locally fixed variables for all constraints with at least two remaining active variables

Parameters
sdpipointer to an SDP interface structure
nactivelpconsoutput: number of active LP-constraints
lplhsafterfixoutput: first nlpcons (output) entries give left-hand sides of active lp-constraints after fixing variables, these are in the same relative order as before (with non-active rows removed)
lprhsafterfixoutput: first nlpcons (output) entries give right-hand sides of active lp-constraints after fixing variables, these are in the same relative order as before (with non-active rows removed)
rownactivevarsoutput: number of active variable for every row
fixingsfoundoutput: returns true if a variable was fixed during this function call

Definition at line 462 of file sdpi.c.

References isFixed(), and SCIPsdpiInfinity().

Referenced by SCIPsdpiSolve().

const char* SCIPsdpiGetSolverName ( void  )

gets name and potentially version of SDP solver

Definition at line 813 of file sdpi.c.

References SCIPsdpiSolverGetSolverName().

Referenced by SCIP_DECL_RELAXINIT(), and SCIPincludeRelaxSdp().

const char* SCIPsdpiGetSolverDesc ( void  )

gets description of SDP solver (developer, webpage, ...)

Definition at line 821 of file sdpi.c.

References SCIPsdpiSolverGetSolverDesc().

Referenced by SCIPincludeRelaxSdp().

void* SCIPsdpiGetSolverPointer ( SCIP_SDPI sdpi)

gets pointer for SDP solver - use only with great care

The behavior of this function depends on the solver and its use is therefore only recommended if you really know what you are doing. In general, it returns a pointer to the SDP solver object.

Parameters
sdpiSDP interface structure

Definition at line 834 of file sdpi.c.

References SCIPsdpiSolverGetSolverPointer().

SCIP_RETCODE SCIPsdpiCreate ( SCIP_SDPI **  sdpi,
SCIP_MESSAGEHDLR *  messagehdlr,
BMS_BLKMEM *  blkmem 
)

creates an SDP problem object

Parameters
sdpipointer to an SDP interface structure
messagehdlrmessage handler to use for printing messages, or NULL
blkmemblock memory

Definition at line 852 of file sdpi.c.

References BMS_CALL, and SCIPsdpiSolverCreate().

Referenced by SCIPincludeRelaxSdp().

SCIP_RETCODE SCIPsdpiFree ( SCIP_SDPI **  sdpi)

deletes an SDP problem object

Parameters
sdpipointer to an SDP interface structure

Definition at line 908 of file sdpi.c.

References SCIPsdpiSolverFree().

Referenced by SCIP_DECL_RELAXFREE().

SCIP_RETCODE SCIPsdpiClone ( SCIP_SDPI oldsdpi,
SCIP_SDPI newsdpi 
)

cloning method of the general SDP-Interface

Note
the solver specific interface is created anew and not copied
Parameters
oldsdpipointer to the SDP interface structure that should be cloned
newsdpipointer to an SDP interface structure to clone into

Definition at line 971 of file sdpi.c.

References BMS_CALL, and SCIPsdpiSolverCreate().

SCIP_RETCODE SCIPsdpiLoadSDP ( SCIP_SDPI sdpi,
int  nvars,
SCIP_Real *  obj,
SCIP_Real *  lb,
SCIP_Real *  ub,
int  nsdpblocks,
int *  sdpblocksizes,
int *  sdpnblockvars,
int  sdpconstnnonz,
int *  sdpconstnblocknonz,
int **  sdpconstrow,
int **  sdpconstcol,
SCIP_Real **  sdpconstval,
int  sdpnnonz,
int **  sdpnblockvarnonz,
int **  sdpvar,
int ***  sdprow,
int ***  sdpcol,
SCIP_Real ***  sdpval,
int  nlpcons,
SCIP_Real *  lplhs,
SCIP_Real *  lprhs,
int  lpnnonz,
int *  lprow,
int *  lpcol,
SCIP_Real *  lpval 
)

copies SDP data into SDP solver

Note
as the SDP-constraint matrices are symmetric, only the upper triangular part of them must be specified
there must be at least one variable, the SDP- and/or LP-part may be empty
Parameters
sdpiSDP interface structure
nvarsnumber of variables
objobjective function values of variables
lblower bounds of variables
ubupper bounds of variables
nsdpblocksnumber of SDP-blocks
sdpblocksizessizes of the SDP-blocks (may be NULL if nsdpblocks = sdpconstnnonz = sdpnnonz = 0)
sdpnblockvarsnumber of variables in each SDP block (may be NULL if nsdpblocks = sdpconstnnonz = sdpnnonz = 0)
sdpconstnnonznumber of nonzero elements in the constant matrices of the SDP-Blocks
sdpconstnblocknonznumber of nonzeros for each variable in the constant part, also the i-th entry gives the number of entries of sdpconst row/col/val [i]
sdpconstrowpointer to row-indices of constant matrix for each block (may be NULL if sdpconstnnonz = 0)
sdpconstcolpointer to column-indices of constant matrix for each block (may be NULL if sdpconstnnonz = 0)
sdpconstvalpointer to values of entries of constant matrix for each block (may be NULL if sdpconstnnonz = 0)
sdpnnonznumber of nonzero elements in the SDP-constraint matrices
sdpnblockvarnonzsdpnblockvarnonz[i][j] gives the number of nonzeros for the j-th variable (not necessarly variable j) in the i-th block, this is also the length of row/col/val[i][j]
sdpvarsdpvar[i][j] gives the sdp-index of the j-th variable (according to the sorting for row/col/val) in the i-th block
sdprowpointer to the row-indices for each block and variable in this block, so row[i][j][k] gives the k-th nonzero of the j-th variable (not necessarly variable j) in the i-th block (may be NULL if sdptnnonz = 0)
sdpcolpointer to the column-indices for each block and variable in this block (may be NULL if sdptnnonz = 0)
sdpvalpointer to the values of the nonzeros for each block and variable in this block (may be NULL if sdptnnonz = 0)
nlpconsnumber of LP-constraints
lplhsleft hand sides of LP rows (may be NULL if nlpcons = 0)
lprhsright hand sides of LP rows (may be NULL if nlpcons = 0)
lpnnonznumber of nonzero elements in the LP-constraint matrix
lprowrow-index for each entry in lpval-array (may be NULL if lpnnonz = 0)
lpcolcolumn-index for each entry in lpval-array (may be NULL if lpnnonz = 0)
lpvalvalues of LP-constraint matrix entries (may be NULL if lpnnonz = 0)

Definition at line 1089 of file sdpi.c.

References BMS_CALL, DUPLICATE_ARRAY_NULL, and ensureLowerTriangular().

Referenced by putSdpDataInInterface().

SCIP_RETCODE SCIPsdpiAddLPRows ( SCIP_SDPI sdpi,
int  nrows,
const SCIP_Real *  lhs,
const SCIP_Real *  rhs,
int  nnonz,
const int *  row,
const int *  col,
const SCIP_Real *  val 
)

adds rows to the LP-Block

Note
arrays are not checked for duplicates, problems may appear if indices are added more than once
Parameters
sdpiSDP interface structure
nrowsnumber of rows to be added
lhsleft hand sides of new rows
rhsright hand sides of new rows
nnonznumber of nonzero elements to be added to the LP constraint matrix
rowrow indices of constraint matrix entries, going from 0 to nrows - 1, these will be changed to nlpcons + i
colcolumn indices of constraint matrix entries
valvalues of constraint matrix entries

Definition at line 1306 of file sdpi.c.

References BMS_CALL.

Referenced by putLpDataInInterface().

SCIP_RETCODE SCIPsdpiDelLPRows ( SCIP_SDPI sdpi,
int  firstrow,
int  lastrow 
)

deletes all rows in the given range from the LP-Block

Parameters
sdpiSDP interface structure
firstrowfirst row to be deleted
lastrowlast row to be deleted

Definition at line 1369 of file sdpi.c.

References BMS_CALL.

Referenced by putLpDataInInterface(), and SCIPsdpiDelLPRowset().

SCIP_RETCODE SCIPsdpiDelLPRowset ( SCIP_SDPI sdpi,
int *  dstat 
)

deletes LP rows from SCIP_SDPI

Parameters
sdpiSDP interface structure
dstatdeletion status of LP rows
input: 1 if row should be deleted, 0 otherwise
output: new position of row, -1 if row was deleted

Definition at line 1473 of file sdpi.c.

References SCIPsdpiDelLPRows().

SCIP_RETCODE SCIPsdpiClear ( SCIP_SDPI sdpi)

clears the whole SDP

Parameters
sdpiSDP interface structure

Definition at line 1512 of file sdpi.c.

References SCIPsdpiSolverResetCounter().

Referenced by SCIP_DECL_RELAXEXIT().

SCIP_RETCODE SCIPsdpiChgBounds ( SCIP_SDPI sdpi,
int  nvars,
const int *  ind,
const SCIP_Real *  lb,
const SCIP_Real *  ub 
)

changes lower and upper bounds of variables

Parameters
sdpiSDP interface structure
nvarsnumber of variables to change bounds for
indvariables indices
lbvalues for the new lower bounds
ubvalues for the new upper bounds

Definition at line 1528 of file sdpi.c.

Referenced by putLpDataInInterface().

SCIP_RETCODE SCIPsdpiChgLPLhRhSides ( SCIP_SDPI sdpi,
int  nrows,
const int *  ind,
const SCIP_Real *  lhs,
const SCIP_Real *  rhs 
)

changes left and right hand sides of LP rows

Parameters
sdpiSDP interface structure
nrowsnumber of LP rows to change right hand sides for
indrow indices between 1 and nlpcons
lhsnew values for left hand sides
rhsnew values for right hand sides

Definition at line 1558 of file sdpi.c.

SCIP_RETCODE SCIPsdpiGetNLPRows ( SCIP_SDPI sdpi,
int *  nlprows 
)

gets the number of LP-rows in the SDP

Parameters
sdpiSDP interface structure
nlprowspointer to store the number of rows

Definition at line 1598 of file sdpi.c.

Referenced by putLpDataInInterface().

SCIP_RETCODE SCIPsdpiGetNSDPBlocks ( SCIP_SDPI sdpi,
int *  nsdpblocks 
)

gets the number of SDP-Blocks in the SDP

Parameters
sdpiSDP interface structure
nsdpblockspointer to store the number of blocks

Definition at line 1611 of file sdpi.c.

SCIP_RETCODE SCIPsdpiGetNVars ( SCIP_SDPI sdpi,
int *  nvars 
)

gets the number of variables in the SDP

Parameters
sdpiSDP interface structure
nvarspointer to store the number of variables

Definition at line 1624 of file sdpi.c.

SCIP_RETCODE SCIPsdpiGetSDPNNonz ( SCIP_SDPI sdpi,
int *  nnonz 
)

gets the number of nonzero elements in the SDP constraint matrices

Parameters
sdpiSDP interface structure
nnonzpointer to store the number of nonzeros in the SDP constraint matrcies

Definition at line 1635 of file sdpi.c.

SCIP_RETCODE SCIPsdpiGetConstNNonz ( SCIP_SDPI sdpi,
int *  nnonz 
)

gets the number of nonzero elements in the constant matrices of the SDP-Blocks

Parameters
sdpiSDP interface structure
nnonzpointer to store the number of nonzeros in the constant matrices of the SDP-Blocks

Definition at line 1648 of file sdpi.c.

SCIP_RETCODE SCIPsdpiGetLPNNonz ( SCIP_SDPI sdpi,
int *  nnonz 
)

gets the number of nonzero elements in the LP Matrix

Parameters
sdpiSDP interface structure
nnonzpointer to store the number of nonzeros in the LP Matrix

Definition at line 1661 of file sdpi.c.

SCIP_RETCODE SCIPsdpiGetObj ( SCIP_SDPI sdpi,
int  firstvar,
int  lastvar,
SCIP_Real *  vals 
)

gets objective coefficients from SDP problem object

Parameters
sdpiSDP interface structure
firstvarfirst variable to get objective coefficient for
lastvarlast variable to get objective coefficient for
valspointer to store objective coefficients (memory of size lastvar - firstvar + 1 needs to be allocated)

Definition at line 1674 of file sdpi.c.

SCIP_RETCODE SCIPsdpiGetBounds ( SCIP_SDPI sdpi,
int  firstvar,
int  lastvar,
SCIP_Real *  lbs,
SCIP_Real *  ubs 
)

gets current variable bounds from SDP problem object

Parameters
sdpiSDP interface structure
firstvarfirst variable to get bounds for
lastvarlast variable to get bounds for
lbspointer to store lower bound values, or NULL (memory of size lastvar - firstvar + 1 needs to be allocated)
ubspointer to store upper bound values, or NULL (memory of size lastvar - firstvar + 1 needs to be allocated)

Definition at line 1696 of file sdpi.c.

SCIP_RETCODE SCIPsdpiGetLhSides ( SCIP_SDPI sdpi,
int  firstrow,
int  lastrow,
SCIP_Real *  lhss 
)

gets current left hand sides from SDP problem object

Parameters
sdpiSDP interface structure
firstrowfirst row to get sides for
lastrowlast row to get sides for
lhsspointer to store left hand side values (memory of size lastvar - firstvar + 1 needs to be allocated)

Definition at line 1724 of file sdpi.c.

SCIP_RETCODE SCIPsdpiGetRhSides ( SCIP_SDPI sdpi,
int  firstrow,
int  lastrow,
SCIP_Real *  rhss 
)

gets current right hand sides from SDP problem object

Parameters
sdpiSDP interface structure
firstrowfirst row to get sides for
lastrowlast row to get sides for
rhsspointer to store right hand side values (memory of size lastvar - firstvar + 1 needs to be allocated)

Definition at line 1746 of file sdpi.c.

SCIP_RETCODE SCIPsdpiSolve ( SCIP_SDPI sdpi,
SCIP_Real *  start,
int *  totalsdpiterations,
SCIP_Bool  enforceslatercheck 
)

solves the SDP, as start optionally a starting point for the solver may be given, if it is NULL, the solver will start from scratch

Parameters
sdpiSDP interface structure
startNULL or a starting point for the solver, this should have length nvars
totalsdpiterationsthe number of sdpiterations needed will be added to the int this points to
enforceslatercheckalways check for Slater condition in case the problem could not be solved and printf the solution of this check

Definition at line 1780 of file sdpi.c.

References BMS_CALL, compConstMatAfterFixings(), computeLpLhsRhsAfterFixings(), findEmptyRowColsSDP(), SCIPsdpiSolverGetIterations(), SCIPsdpiSolverGetObjval(), SCIPsdpiSolverIncreaseCounter(), SCIPsdpiSolverIsAcceptable(), SCIPsdpiSolverIsDualUnbounded(), SCIPsdpiSolverIsGEMaxPenParam(), SCIPsdpiSolverIsOptimal(), SCIPsdpiSolverLoadAndSolve(), and SCIPsdpiSolverLoadAndSolveWithPenalty().

Referenced by calc_relax().

SCIP_Bool SCIPsdpiWasSolved ( SCIP_SDPI sdpi)

returns whether a solve method was called after the last modification of the SDP

Parameters
sdpiSDP interface structure

Definition at line 2062 of file sdpi.c.

Referenced by calc_relax().

SCIP_Bool SCIPsdpiSolvedOrig ( SCIP_SDPI sdpi)

returns whether the original problem was solved, if SCIPsdpiWasSolved = true and SCIPsdpiSolvedOrig = false, then a penalty formulation was solved

Parameters
sdpiSDP interface structure

Definition at line 2072 of file sdpi.c.

Referenced by calc_relax(), and SCIPrelaxSdpSolvedOrig().

SCIP_Bool SCIPsdpiFeasibilityKnown ( SCIP_SDPI sdpi)

returns true if the solver could determine whether the problem is feasible, so it returns true if the solver knows that the problem is feasible/infeasible/unbounded, it returns false if the solver doesn't know anything about the feasibility status and thus the functions IsPrimalFeasible etc. shouldn't be used

Parameters
sdpiSDP interface structure

Definition at line 2084 of file sdpi.c.

References CHECK_IF_SOLVED_BOOL, and SCIPsdpiSolverFeasibilityKnown().

Referenced by calc_relax().

SCIP_RETCODE SCIPsdpiGetSolFeasibility ( SCIP_SDPI sdpi,
SCIP_Bool *  primalfeasible,
SCIP_Bool *  dualfeasible 
)

gets information about primal and dual feasibility of the current SDP solution

Parameters
sdpiSDP interface structure
primalfeasiblepointer to store the primal feasibility status
dualfeasiblepointer to store the dual feasibility status

Definition at line 2098 of file sdpi.c.

References CHECK_IF_SOLVED, and SCIPsdpiSolverGetSolFeasibility().

SCIP_Bool SCIPsdpiIsPrimalUnbounded ( SCIP_SDPI sdpi)

returns TRUE iff SDP is proven to be primal unbounded returns FALSE with a debug-message if the solver couldnot determine feasibility

Parameters
sdpiSDP interface structure

Definition at line 2121 of file sdpi.c.

References CHECK_IF_SOLVED_BOOL, and SCIPsdpiSolverIsPrimalUnbounded().

SCIP_Bool SCIPsdpiIsPrimalInfeasible ( SCIP_SDPI sdpi)

returns TRUE iff SDP is proven to be primal infeasible returns FALSE with a debug-message if the solver couldnot determine feasibility

Parameters
sdpiSDP interface structure

Definition at line 2139 of file sdpi.c.

References CHECK_IF_SOLVED_BOOL, and SCIPsdpiSolverIsPrimalInfeasible().

SCIP_Bool SCIPsdpiIsPrimalFeasible ( SCIP_SDPI sdpi)

returns TRUE iff SDP is proven to be primal feasible returns FALSE with a debug-message if the solver couldnot determine feasibility

Parameters
sdpiSDP interface structure

Definition at line 2157 of file sdpi.c.

References CHECK_IF_SOLVED_BOOL, and SCIPsdpiSolverIsPrimalFeasible().

Referenced by calc_relax().

SCIP_Bool SCIPsdpiIsDualUnbounded ( SCIP_SDPI sdpi)

returns TRUE iff SDP is proven to be dual unbounded returns FALSE with a debug-message if the solver couldnot determine feasibility

Parameters
sdpiSDP interface structure

Definition at line 2175 of file sdpi.c.

References CHECK_IF_SOLVED_BOOL, and SCIPsdpiSolverIsDualUnbounded().

Referenced by calc_relax().

SCIP_Bool SCIPsdpiIsDualInfeasible ( SCIP_SDPI sdpi)

returns TRUE iff SDP is proven to be dual infeasible returns FALSE with a debug-message if the solver couldnot determine feasibility

Parameters
sdpiSDP interface structure

Definition at line 2193 of file sdpi.c.

References CHECK_IF_SOLVED_BOOL, and SCIPsdpiSolverIsDualInfeasible().

Referenced by calc_relax().

SCIP_Bool SCIPsdpiIsDualFeasible ( SCIP_SDPI sdpi)

returns TRUE iff SDP is proven to be dual feasible returns FALSE with a debug-message if the solver couldnot determine feasibility

Parameters
sdpiSDP interface structure

Definition at line 2211 of file sdpi.c.

References CHECK_IF_SOLVED_BOOL, and SCIPsdpiSolverIsDualFeasible().

Referenced by calc_relax().

SCIP_Bool SCIPsdpiIsConverged ( SCIP_SDPI sdpi)

returns TRUE iff the solver converged

Parameters
sdpiSDP interface structure

Definition at line 2228 of file sdpi.c.

References CHECK_IF_SOLVED_BOOL, and SCIPsdpiSolverIsConverged().

SCIP_Bool SCIPsdpiIsObjlimExc ( SCIP_SDPI sdpi)

returns TRUE iff the objective limit was reached

Parameters
sdpiSDP interface structure

Definition at line 2245 of file sdpi.c.

References CHECK_IF_SOLVED_BOOL, and SCIPsdpiSolverIsObjlimExc().

Referenced by calc_relax().

SCIP_Bool SCIPsdpiIsIterlimExc ( SCIP_SDPI sdpi)

returns TRUE iff the iteration limit was reached

Parameters
sdpiSDP interface structure

Definition at line 2262 of file sdpi.c.

References CHECK_IF_SOLVED_BOOL, and SCIPsdpiSolverIsIterlimExc().

SCIP_Bool SCIPsdpiIsTimelimExc ( SCIP_SDPI sdpi)

returns TRUE iff the time limit was reached

Parameters
sdpiSDP interface structure

Definition at line 2279 of file sdpi.c.

References CHECK_IF_SOLVED_BOOL, and SCIPsdpiSolverIsTimelimExc().

int SCIPsdpiGetInternalStatus ( SCIP_SDPI sdpi)

returns the internal solution status of the solver, which has the following meaning:
-1: solver wasn't started
0: converged
1: infeasible start
2: numerical problems
3: objective limit reached
4: iteration limit reached
5: time limit reached
6: user termination
7: other

Parameters
sdpiSDP interface structure

Definition at line 2305 of file sdpi.c.

References SCIPsdpiSolverGetInternalStatus().

SCIP_Bool SCIPsdpiIsOptimal ( SCIP_SDPI sdpi)

returns TRUE iff SDP was solved to optimality, meaning the solver converged and returned primal and dual feasible solutions

Parameters
sdpiSDP interface structure

Definition at line 2326 of file sdpi.c.

References CHECK_IF_SOLVED_BOOL, and SCIPsdpiSolverIsOptimal().

SCIP_Bool SCIPsdpiIsAcceptable ( SCIP_SDPI sdpi)

returns TRUE iff SDP was solved to optimality or some other status was reached that is still acceptable inside a Branch & Bound framework

Parameters
sdpiSDP interface structure

Definition at line 2344 of file sdpi.c.

References CHECK_IF_SOLVED_BOOL, and SCIPsdpiSolverIsAcceptable().

Referenced by calc_relax().

SCIP_RETCODE SCIPsdpiGetObjval ( SCIP_SDPI sdpi,
SCIP_Real *  objval 
)

gets objective value of solution

Parameters
sdpiSDP interface structure
objvalpointer to store the objective value

Definition at line 2361 of file sdpi.c.

References CHECK_IF_SOLVED, and SCIPsdpiSolverGetObjval().

SCIP_RETCODE SCIPsdpiGetSol ( SCIP_SDPI sdpi,
SCIP_Real *  objval,
SCIP_Real *  dualsol,
int *  dualsollength 
)

gets dual solution vector for feasible SDPs, if dualsollength isn't equal to the number of variables this will return the needed length and a debug message

Parameters
sdpiSDP interface structure
objvalpointer to store the objective value, may be NULL if not needed
dualsolpointer to store the dual solution vector, may be NULL if not needed
dualsollengthlength of the dualsol vector, must be 0 if dualsol is NULL, if this is less than the number of variables in the SDP, a DebugMessage will be thrown and this is set to the needed value

Definition at line 2383 of file sdpi.c.

References CHECK_IF_SOLVED, and SCIPsdpiSolverGetSol().

Referenced by calc_relax(), and SCIPrelaxSdpGetRelaxSol().

SCIP_RETCODE SCIPsdpiGetPrimalBoundVars ( SCIP_SDPI sdpi,
SCIP_Real *  lbvars,
SCIP_Real *  ubvars,
int *  arraylength 
)

gets the primal variables corresponding to the lower and upper variable-bounds in the dual problem, the last input should specify the length of the arrays, if this is less than the number of variables, the needed length will be returned and a debug message thrown

Note
if a variable is either fixed or unbounded in the dual problem, a zero will be returned for the non-existent primal variable
Parameters
sdpipointer to an SDP interface structure
lbvarspointer to store the values of the variables corresponding to lower bounds in the dual problems
ubvarspointer to store the values of the variables corresponding to upper bounds in the dual problems
arraylengthinput: length of lbvars and ubvars
output: number of elements inserted into lbvars/ubvars (or needed length if it wasn't sufficient)

Definition at line 2410 of file sdpi.c.

References CHECK_IF_SOLVED, and SCIPsdpiSolverGetPrimalBoundVars().

Referenced by SCIPrelaxSdpGetPrimalBoundVars().

SCIP_RETCODE SCIPsdpiGetIterations ( SCIP_SDPI sdpi,
int *  iterations 
)

gets the number of SDP iterations of the last solve call

Parameters
sdpiSDP interface structure
iterationspointer to store the number of iterations of the last solve call

Definition at line 2437 of file sdpi.c.

References CHECK_IF_SOLVED, and SCIPsdpiSolverGetIterations().

SCIP_Real SCIPsdpiInfinity ( SCIP_SDPI sdpi)

returns value treated as infinity in the SDP solver

Parameters
sdpiSDP interface structure

Definition at line 2470 of file sdpi.c.

References SCIPsdpiSolverInfinity().

Referenced by calc_relax(), computeLpLhsRhsAfterFixings(), and SCIPsdpiIsInfinity().

SCIP_Bool SCIPsdpiIsInfinity ( SCIP_SDPI sdpi,
SCIP_Real  val 
)

checks if given value is treated as (plus or minus) infinity in the SDP solver

Parameters
sdpiSDP interface structure
valvalue to be checked for infinity

Definition at line 2480 of file sdpi.c.

References SCIPsdpiInfinity().

SCIP_Real SCIPsdpiMaxPenParam ( SCIP_SDPI sdpi)

returns highest penalty parameter to be used

Parameters
sdpiSDP interface structure

Definition at line 2491 of file sdpi.c.

References SCIPsdpiSolverMaxPenParam().

Referenced by SCIPsdpiIsGEMaxPenParam().

SCIP_Bool SCIPsdpiIsGEMaxPenParam ( SCIP_SDPI sdpi,
SCIP_Real  val 
)

checks if given value is greater or equal to the highest penalty parameter to be used

Parameters
sdpiSDP interface structure
valvalue to be compared to maximum penalty parameter

Definition at line 2501 of file sdpi.c.

References SCIPsdpiMaxPenParam().

SCIP_RETCODE SCIPsdpiGetRealpar ( SCIP_SDPI sdpi,
SCIP_SDPPARAM  type,
SCIP_Real *  dval 
)

gets floating point parameter of SDP

Parameters
sdpiSDP interface structure
typeparameter number
dvalpointer to store the parameter value

Definition at line 2512 of file sdpi.c.

References SCIP_CALL_PARAM, SCIP_SDPPAR_EPSILON, SCIP_SDPPAR_FEASTOL, SCIP_SDPPAR_OBJLIMIT, and SCIPsdpiSolverGetRealpar().

SCIP_RETCODE SCIPsdpiSetRealpar ( SCIP_SDPI sdpi,
SCIP_SDPPARAM  type,
SCIP_Real  dval 
)

sets floating point parameter of SDP

Parameters
sdpiSDP interface structure
typeparameter number
dvalparameter value

Definition at line 2549 of file sdpi.c.

References SCIP_CALL_PARAM, SCIP_SDPPAR_EPSILON, SCIP_SDPPAR_FEASTOL, SCIP_SDPPAR_OBJLIMIT, SCIPsdpiSolverGetRealpar(), and SCIPsdpiSolverSetRealpar().

Referenced by calc_relax(), and SCIP_DECL_RELAXINIT().

SCIP_RETCODE SCIPsdpiGetIntpar ( SCIP_SDPI sdpi,
SCIP_SDPPARAM  type,
int *  ival 
)

gets integer parameter of SDP

Parameters
sdpiSDP interface structure
typeparameter number
ivalpointer to store the parameter value

Definition at line 2587 of file sdpi.c.

References SCIP_CALL_PARAM, SCIP_SDPPAR_SDPINFO, SCIP_SDPPAR_SLATERCHECK, and SCIPsdpiSolverGetIntpar().

SCIP_RETCODE SCIPsdpiSetIntpar ( SCIP_SDPI sdpi,
SCIP_SDPPARAM  type,
int  ival 
)

sets integer parameter of SDP

Parameters
sdpiSDP interface structure
typeparameter number
ivalparameter value

Definition at line 2629 of file sdpi.c.

References SCIP_CALL_PARAM, SCIP_SDPPAR_SDPINFO, SCIP_SDPPAR_SLATERCHECK, SCIPsdpiSolverGetIntpar(), and SCIPsdpiSolverSetIntpar().

Referenced by SCIP_DECL_RELAXINIT().

SCIP_RETCODE SCIPsdpiReadSDP ( SCIP_SDPI sdpi,
const char *  fname 
)

reads SDP from a file

Parameters
sdpiSDP interface structure
fnamefile name

Definition at line 2684 of file sdpi.c.

SCIP_RETCODE SCIPsdpiWriteSDP ( SCIP_SDPI sdpi,
const char *  fname 
)

writes SDP to a file

Parameters
sdpiSDP interface structure
fnamefile name

Definition at line 2694 of file sdpi.c.