Detailed Description
LP interface for SoPlex version 2.0 and higher.
This is an implementation of SCIP's LP interface for SoPlex using the extended and improved interface of SoPlex 2.0
For debugging purposes, the SoPlex results can be double checked with CPLEX if SCIP_WITH_LPSCHECK is defined. This may yield false positives, since the LP is dumped to a file for transfering it to CPLEX, hence, precision may be lost.
Definition in file lpi_spx2.cpp.
#include "scip/config.h"
#include "soplex.h"
#include "spxgithash.h"
#include "scip/pub_message.h"
#include <cassert>
#include "lpi/lpi.h"
#include "scip/bitencode.h"
Go to the source code of this file.
Data Structures | |
struct | SCIP_LPi |
struct | SCIP_LPiState |
struct | SCIP_LPiNorms |
Macros | |
#define | STRONGBRANCH_RESTOREBASIS |
#define | CHECK_SOPLEX_PARAM(x) |
#define | SOPLEX_SUBVERSION 0 |
#define | SOPLEX_APIVERSION 0 |
#define | SOPLEX_VERBLEVEL 5 |
#define | NULL 0 |
#define | SOPLEX_TRY(messagehdlr, x) |
#define | SOPLEX_TRY_ABORT(x) |
#define | COLS_PER_PACKET SCIP_DUALPACKETSIZE |
#define | ROWS_PER_PACKET SCIP_DUALPACKETSIZE |
Typedefs | |
typedef SCIP_DUALPACKET | COLPACKET |
typedef SCIP_DUALPACKET | ROWPACKET |
Variables | |
static const char | spxname [20] = {'S', 'o', 'p', 'l', 'e', 'x', ' ', SOPLEX_VERSION/100 + '0', '.', (SOPLEX_VERSION % 100)/10 + '0', '.', SOPLEX_VERSION % 10 + '0'} |
static char * | spxdesc = initSpxDesc() |
Macro Definition Documentation
◆ STRONGBRANCH_RESTOREBASIS
#define STRONGBRANCH_RESTOREBASIS |
if defined then in SCIPlpiStrongbranch() we restore the basis after the down branch and after the up branch; if false only after the end of a strong branching phase, which however seems to mostly increase strong branching time and iterations
Definition at line 30 of file lpi_spx2.cpp.
◆ CHECK_SOPLEX_PARAM
#define CHECK_SOPLEX_PARAM | ( | x | ) |
Definition at line 75 of file lpi_spx2.cpp.
◆ SOPLEX_SUBVERSION
#define SOPLEX_SUBVERSION 0 |
Definition at line 95 of file lpi_spx2.cpp.
Referenced by SCIPlpiGetNNonz().
◆ SOPLEX_APIVERSION
#define SOPLEX_APIVERSION 0 |
Definition at line 99 of file lpi_spx2.cpp.
◆ SOPLEX_VERBLEVEL
#define SOPLEX_VERBLEVEL 5 |
verbosity level for LPINFO
Definition at line 125 of file lpi_spx2.cpp.
Referenced by lpiStrongbranch(), SCIPlpiCreate(), and spxSolve().
◆ NULL
#define NULL 0 |
Definition at line 135 of file lpi_spx2.cpp.
Referenced by ensureCstatMem(), ensureRstatMem(), fileExists(), lpistateCreate(), lpistateFree(), lpistatePack(), lpistateUnpack(), lpiStrongbranch(), SCIPlpiAddCols(), SCIPlpiAddRows(), SCIPlpiChgBounds(), SCIPlpiChgCoef(), SCIPlpiChgObj(), SCIPlpiChgObjsen(), SCIPlpiChgSides(), SCIPlpiClear(), SCIPlpiClearState(), SCIPlpiCreate(), SCIPlpiDelCols(), SCIPlpiDelColset(), SCIPlpiDelRows(), SCIPlpiDelRowset(), SCIPlpiEndStrongbranch(), SCIPlpiExistsDualRay(), SCIPlpiExistsPrimalRay(), SCIPlpiFree(), SCIPlpiFreeNorms(), SCIPlpiFreeState(), SCIPlpiGetBase(), SCIPlpiGetBasisInd(), SCIPlpiGetBInvACol(), SCIPlpiGetBInvARow(), SCIPlpiGetBInvCol(), SCIPlpiGetBInvRow(), SCIPlpiGetBounds(), SCIPlpiGetCoef(), SCIPlpiGetColNames(), SCIPlpiGetCols(), SCIPlpiGetDualfarkas(), SCIPlpiGetInternalStatus(), SCIPlpiGetIntpar(), SCIPlpiGetIterations(), SCIPlpiGetNCols(), SCIPlpiGetNNonz(), SCIPlpiGetNorms(), SCIPlpiGetNRows(), SCIPlpiGetObj(), SCIPlpiGetObjsen(), SCIPlpiGetObjval(), SCIPlpiGetPrimalRay(), SCIPlpiGetRealpar(), SCIPlpiGetRealSolQuality(), SCIPlpiGetRowNames(), SCIPlpiGetRows(), SCIPlpiGetSides(), SCIPlpiGetSol(), SCIPlpiGetSolFeasibility(), SCIPlpiGetState(), SCIPlpiHasDualRay(), SCIPlpiHasPrimalRay(), SCIPlpiHasStateBasis(), SCIPlpiIgnoreInstability(), SCIPlpiInfinity(), SCIPlpiInterrupt(), SCIPlpiIsDualFeasible(), SCIPlpiIsDualInfeasible(), SCIPlpiIsDualUnbounded(), SCIPlpiIsInfinity(), SCIPlpiIsIterlimExc(), SCIPlpiIsObjlimExc(), SCIPlpiIsOptimal(), SCIPlpiIsPrimalFeasible(), SCIPlpiIsPrimalInfeasible(), SCIPlpiIsPrimalUnbounded(), SCIPlpiIsStable(), SCIPlpiIsTimelimExc(), SCIPlpiLoadColLP(), SCIPlpiReadLP(), SCIPlpiReadState(), SCIPlpiScaleCol(), SCIPlpiScaleRow(), SCIPlpiSetBase(), SCIPlpiSetIntegralityInformation(), SCIPlpiSetIntpar(), SCIPlpiSetNorms(), SCIPlpiSetRealpar(), SCIPlpiSetState(), SCIPlpiSolveBarrier(), SCIPlpiSolveDual(), SCIPlpiSolvePrimal(), SCIPlpiStartStrongbranch(), SCIPlpiStrongbranchesFrac(), SCIPlpiStrongbranchesInt(), SCIPlpiWasSolved(), SCIPlpiWriteLP(), SCIPlpiWriteState(), and spxSolve().
◆ SOPLEX_TRY
#define SOPLEX_TRY | ( | messagehdlr, | |
x | |||
) |
Macro for a single SoPlex call for which exceptions have to be catched - return an LP error. We make no distinction between different exception types, e.g., between memory allocation and other exceptions.
Definition at line 146 of file lpi_spx2.cpp.
Referenced by SCIPlpiChgCoef(), SCIPlpiChgObjsen(), SCIPlpiClear(), SCIPlpiCreate(), SCIPlpiDelCols(), SCIPlpiDelColset(), SCIPlpiDelRows(), SCIPlpiDelRowset(), SCIPlpiReadState(), SCIPlpiSetBase(), and SCIPlpiWriteState().
◆ SOPLEX_TRY_ABORT
#define SOPLEX_TRY_ABORT | ( | x | ) |
Definition at line 191 of file lpi_spx2.cpp.
◆ COLS_PER_PACKET
#define COLS_PER_PACKET SCIP_DUALPACKETSIZE |
Definition at line 754 of file lpi_spx2.cpp.
Referenced by colpacketNum().
◆ ROWS_PER_PACKET
#define ROWS_PER_PACKET SCIP_DUALPACKETSIZE |
Definition at line 756 of file lpi_spx2.cpp.
Referenced by rowpacketNum().
Typedef Documentation
◆ COLPACKET
typedef SCIP_DUALPACKET COLPACKET |
Definition at line 753 of file lpi_spx2.cpp.
◆ ROWPACKET
typedef SCIP_DUALPACKET ROWPACKET |
Definition at line 755 of file lpi_spx2.cpp.
Function Documentation
◆ ensureCstatMem()
|
static |
resizes cstat array to have at least num entries
- Parameters
-
lpi LP interface structure num minimal number of entries in array
Definition at line 800 of file lpi_spx2.cpp.
References BMSreallocMemoryArray, SCIP_LPi::cstat, SCIP_LPi::cstatsize, ensureRstatMem(), MAX, NULL, SCIP_ALLOC, and SCIP_OKAY.
Referenced by SCIPlpiGetState(), and SCIPlpiSetState().
◆ ensureRstatMem()
|
static |
resizes rstat array to have at least num entries
- Parameters
-
lpi LP interface structure num minimal number of entries in array
Definition at line 822 of file lpi_spx2.cpp.
References BMSreallocMemoryArray, colpacketNum(), MAX, NULL, SCIP_LPi::rstat, SCIP_LPi::rstatsize, SCIP_ALLOC, and SCIP_OKAY.
Referenced by ensureCstatMem(), SCIPlpiGetState(), and SCIPlpiSetState().
◆ colpacketNum()
|
static |
returns the number of packets needed to store column packet information
- Parameters
-
ncols number of columns to store
Definition at line 851 of file lpi_spx2.cpp.
References COLS_PER_PACKET, and rowpacketNum().
Referenced by ensureRstatMem(), lpistateCreate(), and lpistateFree().
◆ rowpacketNum()
|
static |
returns the number of packets needed to store row packet information
- Parameters
-
nrows number of rows to store
Definition at line 860 of file lpi_spx2.cpp.
References lpistatePack(), and ROWS_PER_PACKET.
Referenced by colpacketNum(), lpistateCreate(), and lpistateFree().
◆ lpistatePack()
|
static |
store row and column basis status in a packed LPi state object
- Parameters
-
lpistate pointer to LPi state data cstat basis status of columns in unpacked format rstat basis status of rows in unpacked format
Definition at line 869 of file lpi_spx2.cpp.
References lpistateUnpack(), SCIP_LPiState::ncols, SCIP_LPiState::nrows, NULL, SCIP_LPiState::packcstat, SCIP_LPiState::packrstat, and SCIPencodeDualBit().
Referenced by rowpacketNum(), and SCIPlpiGetState().
◆ lpistateUnpack()
|
static |
unpacks row and column basis status from a packed LPi state object
- Parameters
-
lpistate pointer to LPi state data cstat buffer for storing basis status of columns in unpacked format rstat buffer for storing basis status of rows in unpacked format
Definition at line 885 of file lpi_spx2.cpp.
References lpistateCreate(), SCIP_LPiState::ncols, SCIP_LPiState::nrows, NULL, SCIP_LPiState::packcstat, SCIP_LPiState::packrstat, and SCIPdecodeDualBit().
Referenced by lpistatePack(), and SCIPlpiSetState().
◆ lpistateCreate()
|
static |
creates LPi state information object
- Parameters
-
lpistate pointer to LPi state blkmem block memory ncols number of columns to store nrows number of rows to store
Definition at line 901 of file lpi_spx2.cpp.
References BMSallocBlockMemory, BMSallocBlockMemoryArray, colpacketNum(), lpistateFree(), NULL, rowpacketNum(), SCIP_ALLOC, and SCIP_OKAY.
Referenced by lpistateUnpack(), and SCIPlpiGetState().
◆ lpistateFree()
|
static |
frees LPi state information
- Parameters
-
lpistate pointer to LPi state information (like basis information) blkmem block memory
Definition at line 925 of file lpi_spx2.cpp.
References BMSfreeBlockMemory, BMSfreeBlockMemoryArray, colpacketNum(), invalidateSolution(), NULL, and rowpacketNum().
Referenced by lpistateCreate(), and SCIPlpiFreeState().
◆ invalidateSolution()
|
static |
marks the current LP to be unsolved
Definition at line 952 of file lpi_spx2.cpp.
Referenced by lpistateFree(), SCIPlpiAddCols(), SCIPlpiAddRows(), SCIPlpiChgBounds(), SCIPlpiChgCoef(), SCIPlpiChgObj(), SCIPlpiChgObjsen(), SCIPlpiChgSides(), SCIPlpiClear(), SCIPlpiCreate(), SCIPlpiDelCols(), SCIPlpiDelColset(), SCIPlpiDelRows(), SCIPlpiDelRowset(), SCIPlpiLoadColLP(), SCIPlpiScaleCol(), SCIPlpiScaleRow(), SCIPlpiSetBase(), and spxSolve().
◆ initSpxDesc()
char* initSpxDesc | ( | ) |
Definition at line 978 of file lpi_spx2.cpp.
◆ spxSolve()
|
static |
solves LP – used for both, primal and dual simplex, because SoPlex doesn't distinct the two cases
- Parameters
-
lpi LP interface structure
Definition at line 2357 of file lpi_spx2.cpp.
References invalidateSolution(), SCIP_LPi::messagehdlr, NULL, SCIP_LPERROR, SCIP_OKAY, SCIPdebugMessage, SCIPlpiSolvePrimal(), SCIPmessagePrintWarning(), SCIP_LPi::solved, SOPLEX_VERBLEVEL, SCIP_LPi::spx, TRUE, UNKNOWN, and x.
Referenced by SCIPlpiGetCoef(), SCIPlpiSolveDual(), and SCIPlpiSolvePrimal().
◆ lpiStrongbranch()
|
static |
performs strong branching iterations on one arbitrary candidate
- Parameters
-
lpi LP interface structure col column to apply strong branching on psol current primal solution value of column itlim iteration limit for strong branchings down stores dual bound after branching column down up stores dual bound after branching column up downvalid stores whether the returned down value is a valid dual bound; otherwise, it can only be used as an estimate value upvalid stores whether the returned up value is a valid dual bound; otherwise, it can only be used as an estimate value iter stores total number of strong branching iterations, or -1; may be NULL
Definition at line 2502 of file lpi_spx2.cpp.
References EPSCEIL, EPSFLOOR, FALSE, NULL, SCIP_Bool, SCIP_LPERROR, SCIP_OKAY, SCIP_Real, SCIPdebugMessage, SCIPlpiStrongbranchFrac(), SOPLEX_VERBLEVEL, SCIP_LPi::spx, and TRUE.
Referenced by SCIPlpiEndStrongbranch(), SCIPlpiStrongbranchesFrac(), SCIPlpiStrongbranchesInt(), SCIPlpiStrongbranchFrac(), and SCIPlpiStrongbranchInt().
◆ fileExists()
|
static |
returns, whether the given file exists
- Parameters
-
filename file name
Definition at line 4588 of file lpi_spx2.cpp.
References FALSE, NULL, SCIPlpiReadLP(), and TRUE.
Referenced by SCIPlpiIsInfinity(), and SCIPlpiReadLP().
Variable Documentation
◆ spxname
|
static |
Definition at line 974 of file lpi_spx2.cpp.
Referenced by SCIPlpiGetSolverName().
◆ spxdesc
|
static |
Definition at line 976 of file lpi_spx2.cpp.
Referenced by SCIPlpiGetSolverDesc().