All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
lpi_spx2.cpp
Go to the documentation of this file.
24 * This is an implementation of SCIP's LP interface for SoPlex. While the ratio test is fixed to SoPlex's standard,
25 * different pricing methods can be chosen and an autopricing strategy (start with devex and switch to steepest edge
26 * after too many iterations) is implemented directly. Scaler and simplifier may be applied if solving from scratch.
28 * For debugging purposes, the SoPlex results can be double checked with CPLEX if WITH_LPSCHECK is defined. This may
29 * yield false positives, since the LP is dumped to a file for transfering it to CPLEX, hence, precision may be lost.
32 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
34 #define STRONGBRANCH_RESTOREBASIS /**< if defined then in SCIPlpiStrongbranch() we restore the basis after the
43 #define CHECK_SPXSOLVE true /**< shall the SoPlex results in spxSolve() be double checked using CPLEX? */
44 #define CHECK_SPXSTRONGBRANCH true /**< shall the SoPlex results in SCIPlpStrongbranch() be double checked using CPLEX? */
46 #define EXIT_AT_WRONG_RESULT false/**< shall program be exited if CPLEX returns different result than SoPlex? */
54 SCIPmessagePrintWarning(_messagehdlr, "CPLEX error <%d>; SoPlex result unchecked\n", _cpxstat_); \
120 /** Macro for a single SoPlex call for which exceptions have to be catched - return an LP error. We
121 * make no distinction between different exception types, e.g., between memory allocation and other
236 // we might need these methods to return the original values SCIP provided, even if they could not be set
237 /** return feastol set by SCIPlpiSetRealpar(), which might be tighter than what SoPlex accepted */
251 /** return opttol set by SCIPlpiSetRealpar(), which might be tighter than what SoPlex accepted */
499 if( getDoubleCheck() && (spxStatus == SPxSolver::OPTIMAL || spxStatus == SPxSolver::UNBOUNDED || spxStatus == SPxSolver::INFEASIBLE || spxStatus == SPxSolver::ABORT_VALUE) )
533 _probname, spxStatus, spxStatusString(spxStatus), cpxstat, cpxStatusString(cpxstat), _checknum);
545 SCIPerrorMessage("In %s: SoPlex returned status=%d (%s) while CPLEX claims obj=%.10f %s %.10f=obj.limit (%s) (checknum=%d)\n",
553 SCIPerrorMessage("In %s: SoPlex returned status=%d (%s) while CPLEX claims obj=%.10f %s %.10f=obj.limit (%s) (checknum=%d)\n",
562 SCIPerrorMessage("In %s: SoPlex returned status=%d (%s) while CPLEX claims obj=%.10f %s %.10f=obj.limit (%s) (checknum=%d)\n",
571 _probname, spxStatus, spxStatusString(spxStatus), cpxstat, cpxStatusString(cpxstat), _checknum);
578 _probname, spxStatus, spxStatusString(spxStatus), cpxstat, cpxStatusString(cpxstat), _checknum);
588 /* SCIPerrorMessage("In %s: LP optimal; SoPlex value=%.10f %s CPLEX value=%.10f too good (checknum=%d)\n", value(),
594 SCIPerrorMessage("In %s: LP optimal; SoPlex value=%.10f %s CPLEX value=%.10f suboptimal (checknum=%d)\n", objValueReal(),
690 typedef SCIP_DUALPACKET COLPACKET; /* each column needs two bits of information (basic/on_lower/on_upper) */
692 typedef SCIP_DUALPACKET ROWPACKET; /* each row needs two bit of information (basic/on_lower/on_upper) */
707 SCIP_Real rowrepswitch; /**< use row representation if number of rows divided by number of columns exceeds this value */
708 SCIP_Real conditionlimit; /**< maximum condition number of LP basis counted as stable (-1.0: no limit) */
910 {
914 sprintf(spxname, "SoPlex2 %d.%d.%d.%d", SOPLEX_VERSION/100, (SOPLEX_VERSION % 100)/10, SOPLEX_VERSION % 10, SOPLEX_SUBVERSION); /*lint !e778*/
916 sprintf(spxname, "SoPlex2 %d.%d.%d", SOPLEX_VERSION/100, (SOPLEX_VERSION % 100)/10, SOPLEX_VERSION % 10); /*lint !e778*/
925 {
926 sprintf(spxdesc, "%s", "Linear Programming Solver developed at Zuse Institute Berlin (soplex.zib.de)");
938 {
966 /* we use this construction to allocate the memory for the SoPlex class also via the blockmemshell */
1001 {
1069 (void) spx->setIntParam(SoPlex::OBJSENSE, (objsen == SCIP_OBJSEN_MINIMIZE ? SoPlex::OBJSENSE_MINIMIZE : SoPlex::OBJSENSE_MAXIMIZE));
1100 const int* beg, /**< start index of each column in ind- and val-array, or NULL if nnonz == 0 */
1177 /** deletes columns from SCIP_LP; the new position of a column must not be greater that its old position */
1199 /* SoPlex removeCols() method deletes the columns with dstat[i] < 0, so we have to negate the values */
1292 /** deletes rows from SCIP_LP; the new position of a row must not be greater that its old position */
1314 /* SoPlex removeRows() method deletes the rows with dstat[i] < 0, so we have to negate the values */
1327 {
1457 )
1468 SOPLEX_TRY( lpi->messagehdlr, (void) lpi->spx->setIntParam(SoPlex::OBJSENSE, objsen == SCIP_OBJSEN_MINIMIZE ? SoPlex::OBJSENSE_MINIMIZE : SoPlex::OBJSENSE_MAXIMIZE ) );
1514 /** multiplies a row with a non-zero scalar; for negative scalars, the row's sense is switched accordingly */
1579 /** multiplies a column with a non-zero scalar; the objective value is multiplied with the scalar, and the bounds
1667 )
1684 )
1701 )
1711 /* SoPlex has no direct method to return the number of nonzeros, so we have to count them manually */
1727 /** gets columns from LP problem object; the arrays have to be large enough to store all values
1864 int namestoragesize, /**< size of namestorage (if 0, storageleft returns the storage needed) */
1878 // lpi->spx->getColNames(firstcol, lastcol, colnames, namestorage, namestoragesize, storageleft);
1890 int namestoragesize, /**< size of namestorage (if 0, -storageleft returns the storage needed) */
1904 // lpi->spx->getRowNames(firstrow, lastrow, rownames, namestorage, namestoragesize, storageleft);
1913 )
1921 *objsen = (lpi->spx->intParam(SoPlex::OBJSENSE) == SoPlex::OBJSENSE_MINIMIZE) ? SCIP_OBJSEN_MINIMIZE : SCIP_OBJSEN_MAXIMIZE;
2038 /** solves LP -- used for both, primal and dual simplex, because SoPlex doesn't distinct the two cases */
2056 SCIPdebugMessage("calling SoPlex solve(): %d cols, %d rows\n", lpi->spx->numColsReal(), lpi->spx->numRowsReal());
2077 SCIPdebugMessage(" -> SoPlex status: %d, basis status: %d\n", lpi->spx->status(), lpi->spx->basisStatus());
2104 {
2113 /* first decide if we want to switch the basis representation; in order to avoid oscillatory behaviour, we add the
2137 retcode = rowrep ? spxSolve(lpi, SPxSolver::ROW, SPxSolver::LEAVE) : spxSolve(lpi, SPxSolver::COLUMN, SPxSolver::ENTER);
2148 {
2157 /* first decide if we want to switch the basis representation; in order to avoid oscillatory behaviour, we add the
2181 retcode = rowrep ? spxSolve(lpi, SPxSolver::ROW, SPxSolver::ENTER) : spxSolve(lpi, SPxSolver::COLUMN, SPxSolver::LEAVE);
2188 /** calls barrier or interior point algorithm to solve the LP with crossover to simplex basis */
2192 )
2204 {
2215 {
2254 SCIPdebugMessage("calling SCIPlpiStrongbranch() on variable %d (%d iterations)\n", col, itlim);
2280 (void) spx->setIntParam(SoPlex::ALGORITHM, spx->intParam(SoPlex::REPRESENTATION) == SoPlex::REPRESENTATION_ROW
2330 /* if cycling or singular basis occured and we started not from the pre-strong-branching basis, then we restore the
2332 if( (status == SPxSolver::ABORT_CYCLING || status == SPxSolver::SINGULAR) && !fromparentbasis && spx->numIterations() < itlim )
2334 SCIPdebugMessage(" --> Repeat strong branching down with %d iterations after restoring basis\n",
2409 /* if cycling or singular basis occured and we started not from the pre-strong-branching basis, then we restore the
2411 else if( (status == SPxSolver::ABORT_CYCLING || status == SPxSolver::SINGULAR) && !fromparentbasis && spx->numIterations() < itlim )
2413 SCIPdebugMessage(" --> Repeat strong branching up with %d iterations after restoring basis\n", itlim - spx->numIterations());
2516 retcode = lpiStrongbranch(lpi, cols[j], psols[j], itlim, &(down[j]), &(up[j]), &(downvalid[j]), &(upvalid[j]), iter);
2590 retcode = lpiStrongbranch(lpi, cols[j], psols[j], itlim, &(down[j]), &(up[j]), &(downvalid[j]), &(upvalid[j]), iter);
2618 {
2643 /** returns TRUE iff LP is proven to have a primal unbounded ray (but not necessary a primal feasible point);
2649 {
2658 /** returns TRUE iff LP is proven to have a primal unbounded ray (but not necessary a primal feasible point),
2664 {
2677 {
2683 assert(lpi->spx->status() != SPxSolver::UNBOUNDED || lpi->spx->basisStatus() == SPxBasis::UNBOUNDED);
2685 /* if SoPlex returns unbounded, this may only mean that an unbounded ray is available, not necessarily a primal
2695 {
2708 {
2718 /* note that the solver status may be ABORT_VALUE and the basis status optimal; if we are optimal, isPerturbed() may
2726 /** returns TRUE iff LP is proven to have a dual unbounded ray (but not necessary a dual feasible point);
2732 {
2741 /** returns TRUE iff LP is proven to have a dual unbounded ray (but not necessary a dual feasible point),
2747 {
2760 {
2766 return lpi->spx->status() == SPxSolver::INFEASIBLE && lpi->spx->basisStatus() == SPxBasis::DUAL;
2773 {
2786 {
2792 /* note that the solver status may be ABORT_VALUE and the basis status optimal; if we are optimal, isPerturbed() may
2795 assert(lpi->spx->basisStatus() == SPxBasis::OPTIMAL || lpi->spx->status() != SPxSolver::OPTIMAL);
2797 return (lpi->spx->basisStatus() == SPxBasis::OPTIMAL) || lpi->spx->basisStatus() == SPxBasis::DUAL;
2804 {
2811 /* note that the solver status may be ABORT_VALUE and the basis status optimal; if we are optimal, isPerturbed() may
2821 {
2830 /* only if we have a regular basis and the condition limit is set, we compute the condition number of the basis;
2856 {
2869 {
2882 {
2895 {
2904 /** tries to reset the internal status of the LP solver in order to ignore an instability of the last solving call */
2908 )
2925 )
2995 )
3023 )
3051 )
3065 * Such information is usually only available, if also a (maybe not optimal) solution is available.
3066 * The LPI should return SCIP_INVALID for @p quality, if the requested quantity is not available.
3123 /** gets current basis status for columns and rows; arrays must be large enough to store the basis status */
3296 /** returns the indices of the basic columns and rows; basic column n gives value n, basic row m gives value -1-m */
3300 )
3317 * @note The LP interface defines slack variables to have coefficient +1. This means that if, internally, the LP solver
3318 * uses a -1 coefficient, then rows associated with slacks variables whose coefficient is -1, should be negated;
3344 * @note The LP interface defines slack variables to have coefficient +1. This means that if, internally, the LP solver
3345 * uses a -1 coefficient, then rows associated with slacks variables whose coefficient is -1, should be negated;
3372 * @note The LP interface defines slack variables to have coefficient +1. This means that if, internally, the LP solver
3373 * uses a -1 coefficient, then rows associated with slacks variables whose coefficient is -1, should be negated;
3379 const SCIP_Real* binvrow, /**< row in (A_B)^-1 from prior call to SCIPlpiGetBInvRow(), or NULL */
3425 * @note The LP interface defines slack variables to have coefficient +1. This means that if, internally, the LP solver
3426 * uses a -1 coefficient, then rows associated with slacks variables whose coefficient is -1, should be negated;
3514 /** loads LPi state (like basis information) into solver; note that the LP might have been extended with additional
3624 )
3633 )
3649 )
3692 /** loads LPi pricing norms into solver; note that the LP might have been extended with additional
3805 (void) lpi->spx->setIntParam(SoPlex::SIMPLIFIER, (ival ? SoPlex::SIMPLIFIER_AUTO : SoPlex::SIMPLIFIER_OFF));
3836 (void) lpi->spx->setIntParam(SoPlex::SCALER, ( ival ? SoPlex::SCALER_BIEQUI : SoPlex::SCALER_OFF));
3954 {
3964 )
4004 )
4038 )
SCIP_RETCODE SCIPlpiDelColset(SCIP_LPI *lpi, int *dstat) Definition: lpi_spx2.cpp:1181 Definition: type_lpi.h:58 SCIP_RETCODE SCIPlpiReadLP(SCIP_LPI *lpi, const char *fname) Definition: lpi_spx2.cpp:4004 SCIP_RETCODE SCIPlpiStrongbranchFrac(SCIP_LPI *lpi, int col, SCIP_Real psol, int itlim, SCIP_Real *down, SCIP_Real *up, SCIP_Bool *downvalid, SCIP_Bool *upvalid, int *iter) Definition: lpi_spx2.cpp:2458 Definition: type_lpi.h:50 SCIP_RETCODE SCIPlpiSetIntpar(SCIP_LPI *lpi, SCIP_LPPARAM type, int ival) Definition: lpi_spx2.cpp:3781 Definition: type_lpi.h:41 interface methods for specific LP solvers SCIP_Bool SCIPlpiIsPrimalInfeasible(SCIP_LPI *lpi) Definition: lpi_spx2.cpp:2695 SCIP_RETCODE SCIPlpiDelRows(SCIP_LPI *lpi, int firstrow, int lastrow) Definition: lpi_spx2.cpp:1274 Definition: type_lpi.h:52 SCIP_RETCODE SCIPlpiDelRowset(SCIP_LPI *lpi, int *dstat) Definition: lpi_spx2.cpp:1296 Definition: type_lpi.h:72 SCIP_Bool SCIPlpiIsPrimalFeasible(SCIP_LPI *lpi) Definition: lpi_spx2.cpp:2708 SCIP_RETCODE SCIPlpiEndStrongbranch(SCIP_LPI *lpi) Definition: lpi_spx2.cpp:2215 Definition: type_lpi.h:89 SCIP_RETCODE SCIPlpiAddCols(SCIP_LPI *lpi, int ncols, const SCIP_Real *obj, const SCIP_Real *lb, const SCIP_Real *ub, char **, int nnonz, const int *beg, const int *ind, const SCIP_Real *val) Definition: lpi_spx2.cpp:1095 SCIP_RETCODE SCIPlpiGetIntpar(SCIP_LPI *lpi, SCIP_LPPARAM type, int *ival) Definition: lpi_spx2.cpp:3736 SCIP_RETCODE SCIPlpiSetState(SCIP_LPI *lpi, BMS_BLKMEM *, SCIP_LPISTATE *lpistate) Definition: lpi_spx2.cpp:3520 SCIP_RETCODE SCIPlpiFreeNorms(SCIP_LPI *lpi, BMS_BLKMEM *blkmem, SCIP_LPINORMS **lpinorms) Definition: lpi_spx2.cpp:3711 Definition: type_retcode.h:38 SCIP_RETCODE SCIPlpiGetBInvARow(SCIP_LPI *lpi, int r, const SCIP_Real *binvrow, SCIP_Real *coef) Definition: lpi_spx2.cpp:3379 SCIP_RETCODE SCIPlpiGetObjsen(SCIP_LPI *lpi, SCIP_OBJSEN *objsen) Definition: lpi_spx2.cpp:1913 SCIP_RETCODE SCIPlpiSetBase(SCIP_LPI *lpi, int *cstat, int *rstat) Definition: lpi_spx2.cpp:3216 SCIP_RETCODE SCIPlpiGetPrimalRay(SCIP_LPI *lpi, SCIP_Real *ray) Definition: lpi_spx2.cpp:2995 void SCIPmessagePrintWarning(SCIP_MESSAGEHDLR *messagehdlr, const char *formatstr,...) SCIP_RETCODE SCIPlpiIgnoreInstability(SCIP_LPI *lpi, SCIP_Bool *success) Definition: lpi_spx2.cpp:2908 SCIP_RETCODE SCIPlpiGetCoef(SCIP_LPI *lpi, int row, int col, SCIP_Real *val) Definition: lpi_spx2.cpp:2009 Definition: lpi_cpx.c:191 Definition: type_lpi.h:53 Definition: type_lpi.h:70 SCIP_RETCODE SCIPlpiReadState(SCIP_LPI *lpi, const char *fname) Definition: lpi_spx2.cpp:3633 SCIP_RETCODE SCIPlpiGetObjval(SCIP_LPI *lpi, SCIP_Real *objval) Definition: lpi_spx2.cpp:2925 SCIP_RETCODE SCIPlpiLoadColLP(SCIP_LPI *lpi, SCIP_OBJSEN objsen, int ncols, const SCIP_Real *obj, const SCIP_Real *lb, const SCIP_Real *ub, char **colnames, int nrows, const SCIP_Real *lhs, const SCIP_Real *rhs, char **, int nnonz, const int *beg, const int *ind, const SCIP_Real *val) Definition: lpi_spx2.cpp:1034 Definition: type_lpi.h:90 Definition: type_retcode.h:36 SCIP_RETCODE SCIPlpiScaleRow(SCIP_LPI *lpi, int row, SCIP_Real scaleval) Definition: lpi_spx2.cpp:1518 SCIP_Bool SCIPlpiIsInfinity(SCIP_LPI *lpi, SCIP_Real val) Definition: lpi_spx2.cpp:3964 SCIP_RETCODE SCIPlpiSetNorms(SCIP_LPI *lpi, BMS_BLKMEM *blkmem, SCIP_LPINORMS *lpinorms) Definition: lpi_spx2.cpp:3698 Definition: type_lpi.h:34 Definition: type_lpi.h:44 SCIP_RETCODE SCIPlpiScaleCol(SCIP_LPI *lpi, int col, SCIP_Real scaleval) Definition: lpi_spx2.cpp:1585 Definition: type_lpi.h:51 Definition: type_retcode.h:33 Definition: type_lpi.h:33 Definition: type_lpi.h:45 Definition: type_retcode.h:46 SCIP_Bool SCIPlpiIsPrimalUnbounded(SCIP_LPI *lpi) Definition: lpi_spx2.cpp:2677 SCIP_RETCODE SCIPlpiStrongbranchInt(SCIP_LPI *lpi, int col, SCIP_Real psol, int itlim, SCIP_Real *down, SCIP_Real *up, SCIP_Bool *downvalid, SCIP_Bool *upvalid, int *iter) Definition: lpi_spx2.cpp:2532 Definition: type_lpi.h:68 SCIP_RETCODE SCIPlpiCreate(SCIP_LPI **lpi, SCIP_MESSAGEHDLR *messagehdlr, const char *name, SCIP_OBJSEN objsen) Definition: lpi_spx2.cpp:957 SCIP_RETCODE SCIPlpiGetDualfarkas(SCIP_LPI *lpi, SCIP_Real *dualfarkas) Definition: lpi_spx2.cpp:3023 SCIP_RETCODE SCIPlpiWriteLP(SCIP_LPI *lpi, const char *fname) Definition: lpi_spx2.cpp:4038 SCIP_RETCODE SCIPlpiGetBounds(SCIP_LPI *lpi, int firstcol, int lastcol, SCIP_Real *lbs, SCIP_Real *ubs) Definition: lpi_spx2.cpp:1953 Definition: type_lpi.h:71 SCIP_RETCODE SCIPlpiChgCoef(SCIP_LPI *lpi, int row, int col, SCIP_Real newval) Definition: lpi_spx2.cpp:1433 SCIP_RETCODE SCIPlpiGetSides(SCIP_LPI *lpi, int firstrow, int lastrow, SCIP_Real *lhss, SCIP_Real *rhss) Definition: lpi_spx2.cpp:1981 SCIP_RETCODE SCIPlpiGetSolFeasibility(SCIP_LPI *lpi, SCIP_Bool *primalfeasible, SCIP_Bool *dualfeasible) Definition: lpi_spx2.cpp:2628 Definition: type_lpi.h:67 SCIP_RETCODE SCIPlpiStrongbranchesFrac(SCIP_LPI *lpi, int *cols, int ncols, SCIP_Real *psols, int itlim, SCIP_Real *down, SCIP_Real *up, SCIP_Bool *downvalid, SCIP_Bool *upvalid, int *iter) Definition: lpi_spx2.cpp:2488 SCIP_RETCODE SCIPlpiGetIterations(SCIP_LPI *lpi, int *iterations) Definition: lpi_spx2.cpp:3051 SCIP_RETCODE SCIPlpiGetSol(SCIP_LPI *lpi, SCIP_Real *objval, SCIP_Real *primsol, SCIP_Real *dualsol, SCIP_Real *activity, SCIP_Real *redcost) Definition: lpi_spx2.cpp:2942 SCIP_RETCODE SCIPlpiDelCols(SCIP_LPI *lpi, int firstcol, int lastcol) Definition: lpi_spx2.cpp:1159 SCIP_RETCODE SCIPlpiStrongbranchesInt(SCIP_LPI *lpi, int *cols, int ncols, SCIP_Real *psols, int itlim, SCIP_Real *down, SCIP_Real *up, SCIP_Bool *downvalid, SCIP_Bool *upvalid, int *iter) Definition: lpi_spx2.cpp:2562 SCIP_RETCODE SCIPlpiGetRealSolQuality(SCIP_LPI *lpi, SCIP_LPSOLQUALITY qualityindicator, SCIP_Real *quality) Definition: lpi_spx2.cpp:3071 Definition: type_lpi.h:43 SCIP_RETCODE SCIPlpiGetNorms(SCIP_LPI *lpi, BMS_BLKMEM *blkmem, SCIP_LPINORMS **lpinorms) Definition: lpi_spx2.cpp:3682 SCIP_RETCODE SCIPlpiGetRowNames(SCIP_LPI *lpi, int firstrow, int lastrow, char **rownames, char *namestorage, int namestoragesize, int *storageleft) Definition: lpi_spx2.cpp:1887 SCIP_RETCODE SCIPlpiChgObjsen(SCIP_LPI *lpi, SCIP_OBJSEN objsen) Definition: lpi_spx2.cpp:1457 SCIP_RETCODE SCIPlpiAddRows(SCIP_LPI *lpi, int nrows, const SCIP_Real *lhs, const SCIP_Real *rhs, char **, int nnonz, const int *beg, const int *ind, const SCIP_Real *val) Definition: lpi_spx2.cpp:1212 SCIP_RETCODE SCIPlpiGetState(SCIP_LPI *lpi, BMS_BLKMEM *blkmem, SCIP_LPISTATE **lpistate) Definition: lpi_spx2.cpp:3476 Definition: type_lpi.h:47 SCIP_Bool SCIPlpiIsDualInfeasible(SCIP_LPI *lpi) Definition: lpi_spx2.cpp:2773 SCIP_Bool SCIPlpiHasStateBasis(SCIP_LPI *lpi, SCIP_LPISTATE *lpistate) Definition: lpi_spx2.cpp:3624 SCIP_RETCODE SCIPlpiChgBounds(SCIP_LPI *lpi, int ncols, const int *ind, const SCIP_Real *lb, const SCIP_Real *ub) Definition: lpi_spx2.cpp:1345 SCIP_RETCODE SCIPlpiGetBInvCol(SCIP_LPI *lpi, int c, SCIP_Real *coef) Definition: lpi_spx2.cpp:3351 Definition: type_retcode.h:40 SCIP_RETCODE SCIPlpiGetCols(SCIP_LPI *lpi, int firstcol, int lastcol, SCIP_Real *lb, SCIP_Real *ub, int *nnonz, int *beg, int *ind, SCIP_Real *val) Definition: lpi_spx2.cpp:1734 SCIP_RETCODE SCIPlpiGetBase(SCIP_LPI *lpi, int *cstat, int *rstat) Definition: lpi_spx2.cpp:3127 public methods for message output Definition: type_lpi.h:79 Definition: type_lpi.h:69 SCIP_RETCODE SCIPlpiChgObj(SCIP_LPI *lpi, int ncols, int *ind, SCIP_Real *obj) Definition: lpi_spx2.cpp:1477 SCIP_RETCODE SCIPlpiGetBInvACol(SCIP_LPI *lpi, int c, SCIP_Real *coef) Definition: lpi_spx2.cpp:3432 SCIP_RETCODE SCIPlpiGetColNames(SCIP_LPI *lpi, int firstcol, int lastcol, char **colnames, char *namestorage, int namestoragesize, int *storageleft) Definition: lpi_spx2.cpp:1861 SCIP_RETCODE SCIPlpiFreeState(SCIP_LPI *lpi, BMS_BLKMEM *blkmem, SCIP_LPISTATE **lpistate) Definition: lpi_spx2.cpp:3606 SCIP_RETCODE SCIPlpiGetBasisInd(SCIP_LPI *lpi, int *bind) Definition: lpi_spx2.cpp:3300 SCIP_RETCODE SCIPlpiGetObj(SCIP_LPI *lpi, int firstcol, int lastcol, SCIP_Real *vals) Definition: lpi_spx2.cpp:1930 SCIP_RETCODE SCIPlpiSolveBarrier(SCIP_LPI *lpi, SCIP_Bool crossover) Definition: lpi_spx2.cpp:2192 SCIP_RETCODE SCIPlpiGetBInvRow(SCIP_LPI *lpi, int r, SCIP_Real *coef) Definition: lpi_spx2.cpp:3324 SCIP_RETCODE SCIPlpiGetRows(SCIP_LPI *lpi, int firstrow, int lastrow, SCIP_Real *lhs, SCIP_Real *rhs, int *nnonz, int *beg, int *ind, SCIP_Real *val) Definition: lpi_spx2.cpp:1799 Definition: type_lpi.h:66 Definition: type_retcode.h:37 Definition: type_lpi.h:46 Definition: type_lpi.h:80 SCIP_RETCODE SCIPlpiSetRealpar(SCIP_LPI *lpi, SCIP_LPPARAM type, SCIP_Real dval) Definition: lpi_spx2.cpp:3898 SCIP_RETCODE SCIPlpiStartStrongbranch(SCIP_LPI *lpi) Definition: lpi_spx2.cpp:2204 SCIP_RETCODE SCIPlpiWriteState(SCIP_LPI *lpi, const char *fname) Definition: lpi_spx2.cpp:3649 Definition: type_retcode.h:43 SCIP_RETCODE SCIPlpiChgSides(SCIP_LPI *lpi, int nrows, const int *ind, const SCIP_Real *lhs, const SCIP_Real *rhs) Definition: lpi_spx2.cpp:1389 Definition: type_lpi.h:55 SCIP_RETCODE SCIPlpiGetRealpar(SCIP_LPI *lpi, SCIP_LPPARAM type, SCIP_Real *dval) Definition: lpi_spx2.cpp:3855 Definition: type_lpi.h:82 Definition: type_lpi.h:48 Definition: type_lpi.h:81 Definition: type_lpi.h:59 |