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 const char | spxdesc [200] |
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 39 of file lpi_spx2.cpp.
◆ CHECK_SOPLEX_PARAM
#define CHECK_SOPLEX_PARAM | ( | x | ) |
Definition at line 84 of file lpi_spx2.cpp.
◆ SOPLEX_SUBVERSION
#define SOPLEX_SUBVERSION 0 |
Definition at line 106 of file lpi_spx2.cpp.
Referenced by invalidateSolution(), and SCIPlpiGetNNonz().
◆ SOPLEX_APIVERSION
#define SOPLEX_APIVERSION 0 |
Definition at line 110 of file lpi_spx2.cpp.
◆ SOPLEX_VERBLEVEL
#define SOPLEX_VERBLEVEL 5 |
verbosity level for LPINFO
Definition at line 136 of file lpi_spx2.cpp.
Referenced by lpiStrongbranch(), SCIPlpiCreate(), and spxSolve().
◆ NULL
#define NULL 0 |
Definition at line 146 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 157 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 202 of file lpi_spx2.cpp.
◆ COLS_PER_PACKET
#define COLS_PER_PACKET SCIP_DUALPACKETSIZE |
Definition at line 765 of file lpi_spx2.cpp.
Referenced by colpacketNum().
◆ ROWS_PER_PACKET
#define ROWS_PER_PACKET SCIP_DUALPACKETSIZE |
Definition at line 767 of file lpi_spx2.cpp.
Referenced by rowpacketNum().
Typedef Documentation
◆ COLPACKET
typedef SCIP_DUALPACKET COLPACKET |
Definition at line 764 of file lpi_spx2.cpp.
◆ ROWPACKET
typedef SCIP_DUALPACKET ROWPACKET |
Definition at line 766 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 811 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 833 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 862 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 871 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 880 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 896 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 912 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 936 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 963 of file lpi_spx2.cpp.
References SOPLEX_SUBVERSION, spxdesc, and spxname.
Referenced by lpistateFree(), SCIPlpiAddCols(), SCIPlpiAddRows(), SCIPlpiChgBounds(), SCIPlpiChgCoef(), SCIPlpiChgObj(), SCIPlpiChgObjsen(), SCIPlpiChgSides(), SCIPlpiClear(), SCIPlpiCreate(), SCIPlpiDelCols(), SCIPlpiDelColset(), SCIPlpiDelRows(), SCIPlpiDelRowset(), SCIPlpiLoadColLP(), SCIPlpiScaleCol(), SCIPlpiScaleRow(), SCIPlpiSetBase(), and spxSolve().
◆ 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 2366 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 2511 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 4612 of file lpi_spx2.cpp.
References FALSE, NULL, SCIPlpiReadLP(), and TRUE.
Referenced by SCIPlpiIsInfinity(), and SCIPlpiReadLP().
Variable Documentation
◆ spxname
|
static |
Definition at line 983 of file lpi_spx2.cpp.
Referenced by invalidateSolution(), and SCIPlpiGetSolverName().
◆ spxdesc
|
static |
Definition at line 985 of file lpi_spx2.cpp.
Referenced by invalidateSolution(), and SCIPlpiGetSolverDesc().