46#define CHECK_SOPLEX_PARAM(x) \
49 SCIPmessagePrintWarning(_messagehdlr, "SoPlex: unsupported parameter value\n"); \
63#pragma GCC diagnostic ignored "-Wclass-memaccess"
71#ifndef SOPLEX_SUBVERSION
72#define SOPLEX_SUBVERSION 0
75#ifndef SOPLEX_APIVERSION
76#define SOPLEX_APIVERSION 0
80#if (SOPLEX_APIVERSION < 11)
81#error "This interface requires SoPlex with API version 11 or higher, which is available from SoPlex 5.0.0."
84#if (SOPLEX_APIVERSION <= 5)
85#include "spxgithash.h"
88#ifndef SOPLEX_WITH_GMP
89#error "SOPLEX_WITH_GMP not defined: SoPlex must be build with GMP to be used with LPSEXACT=spx"
92#ifndef SOPLEX_WITH_MPFR
93#error "SOPLEX_WITH_MPFR not defined: SoPlex must be build with MPFR to be used with LPSEXACT=spx"
96#ifndef SOPLEX_WITH_BOOST
97#error "SOPLEX_WITH_BOOST not defined: SoPlex must be build with BOOST to be used with LPSEXACT=spx"
108#if defined(_MSC_VER) && _MSC_VER < 1900
110#define snprintf _snprintf
114#define SOPLEX_VERBLEVEL 5
128using namespace soplex;
136#define SOPLEX_TRY(messagehdlr, x) do \
142 catch( const SPxMemoryException& E ) \
144 std::string s = E.what(); \
145 SCIPerrorMessage("SoPlex threw a memory exception: %s\n", s.c_str()); \
148 catch( const SPxException& E ) \
150 std::string s = E.what(); \
151 SCIPmessagePrintWarning((messagehdlr), "SoPlex threw an exception: %s\n", s.c_str()); \
152 return SCIP_LPERROR; \
158#define SOPLEX_TRY(messagehdlr, x) do \
164 catch( const SPxMemoryException& E ) \
166 std::string s = E.what(); \
167 SCIPerrorMessage("SoPlex threw a memory exception: %s\n", s.c_str()); \
170 catch( const SPxException& ) \
172 return SCIP_LPERROR; \
181#define SOPLEX_TRY_ABORT(x) do \
187 catch( const SPxException& E ) \
189 std::string s = E.what(); \
190 SCIPerrorMessage("SoPlex threw an exception: %s\n", s.c_str()); \
200 const soplex::Rational& spxr
209#if defined(SCIP_WITH_BOOST) && defined(SCIP_WITH_GMP)
212 r->val = (double) spxr;
226 for(
int i = 0;
i < src.dim(); ++
i )
237 soplex::Rational& spxr,
250#if defined(SOPLEX_WITH_GMP) && defined(SCIP_WITH_BOOST) && defined(SCIP_WITH_GMP)
251 spxr = soplex::Rational(*SCIPrationalGetGMP(src));
266 DataArray<SPxSolver::VarStatus> _colStat;
267 DataArray<SPxSolver::VarStatus> _rowStat;
273 const char* probname =
NULL
280 _messagehdlr(messagehdlr)
282 if ( probname !=
NULL )
285#if SOPLEX_APIVERSION >= 2
286 (void) setBoolParam(SoPlex::ENSURERAY,
true);
292 if( _probname !=
NULL )
301 return (intParam(SoPlex::OBJSENSE) == SoPlex::OBJSENSE_MINIMIZE)
302 ? realParam(SoPlex::OBJLIMIT_UPPER)
303 : realParam(SoPlex::OBJLIMIT_LOWER);
334 if( _probname !=
NULL )
337 len = strlen(probname);
338 spx_alloc(_probname, (
int) len + 1);
339 memcpy(_probname, probname, len + 1);
342 void setRep(SPxSolver::Representation p_rep)
344 if( p_rep == SPxSolver::COLUMN && intParam(SoPlex::REPRESENTATION) == SoPlex::REPRESENTATION_ROW )
349 else if( (p_rep == SPxSolver::ROW && intParam(SoPlex::REPRESENTATION) == SoPlex::REPRESENTATION_COLUMN) )
359 for(
int i = 0;
i < numColsRational(); ++
i )
361 if( lowerRational(
i) > upperRational(
i) )
364 i, lowerRational(
i).str().c_str(), upperRational(
i).str().c_str());
374 for(
int i = 0;
i < numRowsRational(); ++
i )
376 if( lhsRational(
i) > rhsRational(
i) )
379 i, lhsRational(
i).str().c_str(), rhsRational(
i).str().c_str());
397 catch(
const SPxException&
x)
399 std::string s =
x.what();
409 assert(status() != SPxSolver::OPTIMAL);
412 assert(intParam(ITERLIMIT) < 0 || numIterations() <= intParam(ITERLIMIT));
415 timespent = solveTime();
419 timelimit = realParam(TIMELIMIT);
420 if( timelimit > timespent )
421 timelimit -= timespent;
430 SPxSolver::Status
doSolve(
bool printwarning =
true)
432 SPxOut::Verbosity verbosity;
434 SPxSolver::Status spxStatus;
437 verbosity = spxout.getVerbosity();
444 spxStatus = status();
447 spxout.setVerbosity(verbosity);
455 _rowStat.reSize(numRowsRational());
456 _colStat.reSize(numColsRational());
460 getBasis(_rowStat.get_ptr(), _colStat.get_ptr());
463 catch(
const SPxException&
x)
465 std::string s =
x.what();
472 assert(status() != SPxSolver::OPTIMAL);
475 catch(
const SPxException&)
483 assert(_rowStat.size() == numRowsRational());
484 assert(_colStat.size() == numColsRational());
488 setBasis(_rowStat.get_ptr(), _colStat.get_ptr());
491 catch(
const SPxException&
x)
493 std::string s =
x.what();
496 catch(
const SPxException&)
503 assert(status() != SPxSolver::OPTIMAL);
517 return ((_rowStat.size() == 0 ) && (_colStat.size() == 0));
545#define COLS_PER_PACKET SCIP_DUALPACKETSIZE
547#define ROWS_PER_PACKET SCIP_DUALPACKETSIZE
597 assert(num <= lpi->cstatsize);
619 assert(num <= lpi->rstatsize);
751#if (SOPLEX_SUBVERSION > 0)
752 const static char spxname[20] = {
'S',
'o',
'P',
'l',
'e',
'x',
' ', SOPLEX_VERSION/100 +
'0',
'.', (SOPLEX_VERSION % 100)/10 +
'0',
'.', SOPLEX_VERSION % 10 +
'0',
'.',
SOPLEX_SUBVERSION +
'0',
'\0'};
754 const static char spxname[20] = {
'S',
'o',
'P',
'l',
'e',
'x',
' ', SOPLEX_VERSION/100 +
'0',
'.', (SOPLEX_VERSION % 100)/10 +
'0',
'.', SOPLEX_VERSION % 10 +
'0',
'\0'};
756const static char spxdesc[200] = {
'L',
'i',
'n',
'e',
'a',
'r',
' ',
'p',
'r',
'o',
'g',
'r',
'a',
'm',
'm',
'i',
'n',
'g',
757 ' ',
's',
'o',
'l',
'v',
'e',
'r',
' ' ,
'd',
'e',
'v',
'e',
'l',
'o',
'p',
'e',
'd',
758 ' ',
'a',
't',
' ',
'Z',
'u',
's',
'e',
' ',
'I',
'n',
's',
't',
'i',
't',
'u',
't',
'e',
759 ' ',
'B',
'e',
'r',
'l',
'i',
'n',
' ',
'(',
's',
'o',
'p',
'l',
'e',
'x',
'.',
'z',
'i',
'b',
'.',
'd',
'e',
')',
760 ' ',
'[',
'G',
'i',
't',
'H',
'a',
's',
'h',
':',
' ',
761 getGitHash()[0], getGitHash()[1], getGitHash()[2], getGitHash()[3],
762 getGitHash()[4], getGitHash()[5], getGitHash()[6], getGitHash()[7],
790 return (
void*) lpi->
spx;
800 assert(ncols == lpi->
spx->numColsRational() || (ncols == 0 && intInfo ==
NULL));
801 lpi->
spx->setIntegralityInformation(ncols, intInfo);
856 (void) (*lpi)->spx->setIntParam(SoPlex::SYNCMODE, (
int) SoPlex::SYNCMODE_AUTO);
857 (void) (*lpi)->spx->setIntParam(SoPlex::SOLVEMODE, (
int) SoPlex::SOLVEMODE_RATIONAL);
858 (void) (*lpi)->spx->setRealParam(SoPlex::FEASTOL, 0.0,
true);
859 (void) (*lpi)->spx->setRealParam(SoPlex::OPTTOL, 0.0,
true);
860 (void) (*lpi)->spx->setBoolParam(SoPlex::FORCEBASIC,
true);
862 (*lpi)->cstat =
NULL;
863 (*lpi)->rstat =
NULL;
864 (*lpi)->cstatsize = 0;
865 (*lpi)->rstatsize = 0;
867 (*lpi)->conditionlimit = -1.0;
868 (*lpi)->checkcondition =
FALSE;
869 (*lpi)->messagehdlr = messagehdlr;
880 SPxOut::Verbosity verbosity = (*lpi)->spx->spxout.getVerbosity();
881 (*lpi)->spx->spxout.setVerbosity((SPxOut::Verbosity)((*lpi)->spx->getLpInfo() ?
SOPLEX_VERBLEVEL : 0));
882 (*lpi)->spx->printVersion();
883 (*lpi)->spx->spxout.setVerbosity(verbosity);
899 (*lpi)->spx->~SPxexSCIP();
942 for( j = 0; j < nnonz; j++ )
969 LPRowSetRational rows(nrows);
970 DSVectorRational emptyVector(0);
973 spx->clearLPRational();
976 (void) spx->setIntParam(SoPlex::OBJSENSE, (
int) (objsen ==
SCIP_OBJSEN_MINIMIZE ? SoPlex::OBJSENSE_MINIMIZE : SoPlex::OBJSENSE_MAXIMIZE));
979 for(
i = 0;
i < nrows; ++
i )
981 soplex::Rational spxlhs;
982 soplex::Rational spxrhs;
985 rows.add(spxlhs, emptyVector, spxrhs);
987 spx->addRowsRational(rows);
994 catch(
const SPxException&
x )
996 std::string s =
x.what();
999 catch(
const SPxException& )
1043 int nrows = lpi->
spx->numRowsRational();
1044 for (
int j = 0; j < nnonz; ++j)
1046 assert( 0 <= ind[j] && ind[j] < nrows );
1056 LPColSetRational cols(ncols);
1057 DSVectorRational colVector(ncols);
1063 for(
i = 0;
i < ncols; ++
i )
1066 soplex::Rational spxlb;
1067 soplex::Rational spxub;
1068 soplex::Rational spxobj;
1069 std::vector<soplex::Rational> spxval;
1078 soplex::Rational tmp;
1081 last = (
i == ncols-1 ? nnonz : beg[
i+1]);
1082 spxval.reserve((
size_t) (last - start));
1083 for( j = start; j < last; ++j )
1085 spxval.push_back(tmp);
1086 SpxRSetRat(lpi, spxval[(
size_t) (j - start)], val[j]);
1088 colVector.add(last - start, ind + start, spxval.data());
1090 cols.add(spxobj, spxlb, colVector, spxub);
1092 spx->addColsRational(cols);
1095 catch(
const SPxException&
x )
1097 std::string s =
x.what();
1100 catch(
const SPxException& )
1120 assert(0 <= firstcol && firstcol <= lastcol && lastcol < lpi->spx->numColsRational());
1152 ncols = lpi->
spx->numColsRational();
1155 for(
i = 0;
i < ncols; ++
i )
1194 int ncols = lpi->
spx->numColsRational();
1195 for (
int j = 0; j < nnonz; ++j)
1198 assert( 0 <= ind[j] && ind[j] < ncols );
1206 LPRowSetRational rows(nrows);
1207 DSVectorRational rowVector;
1213 for(
i = 0;
i < nrows; ++
i )
1215 soplex::Rational spxlhs;
1216 soplex::Rational spxrhs;
1217 std::vector<soplex::Rational> spxval;
1226 last = (
i == nrows-1 ? nnonz : beg[
i+1]);
1227 spxval.reserve((
size_t) (last - start));
1229 for(
int j = start; j < last; ++j )
1231 soplex::Rational tmp;
1232 spxval.push_back(tmp);
1233 SpxRSetRat(lpi, spxval[(
size_t) (j - start)], val[j]);
1235 rowVector.add(last - start, ind + start, spxval.data());
1237 rows.add(spxlhs, rowVector, spxrhs);
1239 spx->addRowsRational(rows);
1242 catch(
const SPxException&
x )
1244 std::string s =
x.what();
1247 catch(
const SPxException& )
1267 assert(0 <= firstrow && firstrow <= lastrow && lastrow < lpi->spx->numRowsRational());
1298 nrows = lpi->
spx->numRowsRational();
1301 for(
i = 0;
i < nrows; ++
i )
1352 soplex::Rational spxlb;
1353 soplex::Rational spxub;
1355 for(
i = 0;
i < ncols; ++
i )
1357 assert(0 <= ind[
i] && ind[
i] < lpi->
spx->numColsRational());
1362 SCIPerrorMessage(
"LP Error: fixing lower bound for variable %d to infinity.\n", ind[
i]);
1367 SCIPerrorMessage(
"LP Error: fixing upper bound for variable %d to -infinity.\n", ind[
i]);
1374 lpi->
spx->changeBoundsRational(ind[
i], spxlb, spxub);
1375 assert(lpi->
spx->lowerRational(ind[
i]) <= lpi->
spx->upperRational(ind[
i]));
1379 catch(
const SPxException&
x )
1381 std::string s =
x.what();
1384 catch(
const SPxException& )
1420 soplex::Rational spxlhs;
1421 soplex::Rational spxrhs;
1423 for(
i = 0;
i < nrows; ++
i )
1425 assert(0 <= ind[
i] && ind[
i] < lpi->
spx->numRowsRational());
1430 lpi->
spx->changeRangeRational(ind[
i], spxlhs, spxrhs);
1431 assert(lpi->
spx->lhsRational(ind[
i]) <= lpi->
spx->rhsRational(ind[
i]));
1435 catch(
const SPxException&
x )
1437 std::string s =
x.what();
1440 catch(
const SPxException& )
1457 soplex::Rational spxval;
1463 assert(0 <= row && row < lpi->spx->numRowsRational());
1464 assert(0 <= col && col < lpi->spx->numColsRational());
1519 soplex::Rational spxobj;
1521 for(
i = 0;
i < ncols; ++
i )
1524 assert(0 <= ind[
i] && ind[
i] < lpi->
spx->numColsRational());
1527 lpi->
spx->changeObjRational(ind[
i], spxobj);
1531 catch(
const SPxException&
x )
1533 std::string s =
x.what();
1536 catch(
const SPxException& )
1567 *nrows = lpi->
spx->numRowsRational();
1584 *ncols = lpi->
spx->numColsRational();
1605 if( lpi->
spx->numRowsRational() < lpi->
spx->numColsRational() )
1607 for(
i = 0;
i < lpi->
spx->numRowsRational(); ++
i )
1608 (*nnonz) += lpi->
spx->rowVectorRational(
i).size();
1612 for(
i = 0;
i < lpi->
spx->numColsRational(); ++
i )
1613 (*nnonz) += lpi->
spx->colVectorRational(
i).size();
1642 assert(0 <= firstcol && firstcol <= lastcol && lastcol < lpi->spx->numColsRational());
1648 const VectorRational& lbvec = lpi->
spx->lowerRational();
1649 const VectorRational& ubvec = lpi->
spx->upperRational();
1651 for(
i = firstcol;
i <= lastcol; ++
i )
1661 for(
i = firstcol;
i <= lastcol; ++
i )
1663 const SVectorRational& cvec = lpi->
spx->colVectorRational(
i);
1664 beg[
i-firstcol] = *nnonz;
1666 for( j = 0; j < cvec.size(); ++j )
1668 ind[*nnonz] = cvec.index(j);
1669 RsetSpxR(lpi, val[*nnonz], cvec.value(j));
1701 assert(0 <= firstrow && firstrow <= lastrow && lastrow < lpi->spx->numRowsRational());
1707 if( lpi->
spx->boolParam(SoPlex::PERSISTENTSCALING) &&
FALSE )
1712 const VectorRational& lhsvec = lpi->
spx->lhsRational();
1713 const VectorRational& rhsvec = lpi->
spx->rhsRational();
1714 for(
i = firstrow;
i <= lastrow; ++
i )
1725 for(
i = firstrow;
i <= lastrow; ++
i )
1727 beg[
i-firstrow] = *nnonz;
1729 if( lpi->
spx->boolParam(SoPlex::PERSISTENTSCALING) )
1734 const SVectorRational& rvec = lpi->
spx->rowVectorRational(
i);
1735 for( j = 0; j < rvec.size(); ++j )
1737 ind[*nnonz] = rvec.index(j);
1738 RsetSpxR(lpi, val[*nnonz], rvec.value(j));
1755 int namestoragesize,
1761 assert( colnames !=
NULL || namestoragesize == 0 );
1762 assert( namestorage !=
NULL || namestoragesize == 0 );
1763 assert( namestoragesize >= 0 );
1765 assert( 0 <= firstcol && firstcol <= lastcol && lastcol < lpi->spx->numColsRational() );
1781 int namestoragesize,
1787 assert( rownames !=
NULL || namestoragesize == 0 );
1788 assert( namestorage !=
NULL || namestoragesize == 0 );
1789 assert( namestoragesize >= 0 );
1791 assert( 0 <= firstrow && firstrow <= lastrow && lastrow < lpi->spx->numRowsRational() );
1831 assert(0 <= firstcol && firstcol <= lastcol && lastcol < lpi->spx->numColsRational());
1834 for(
i = firstcol;
i <= lastcol; ++
i )
1858 assert(0 <= firstcol && firstcol <= lastcol && lastcol < lpi->spx->numColsRational());
1860 for(
i = firstcol;
i <= lastcol; ++
i )
1892 assert(0 <= firstrow && firstrow <= lastrow && lastrow < lpi->spx->numRowsRational());
1894 for(
i = firstrow;
i <= lastrow; ++
i )
1923 assert(0 <= col && col < lpi->spx->numColsRational());
1924 assert(0 <= row && row < lpi->spx->numRowsRational());
1927 RsetSpxR(lpi, val, lpi->
spx->colVectorRational(col)[row]);
1951 SPxOut::Verbosity verbosity;
1953 verbosity = lpi->
spx->spxout.getVerbosity();
1956 SCIPdebugMessage(
"calling exact SoPlex solve(): %d cols, %d rows\n", lpi->
spx->numColsRational(), lpi->
spx->numRowsRational());
1963 lpi->
spx->setDoubleCheck(CHECK_SPXSOLVE);
1971 lpi->
spx->clearBasis();
1974 catch(
const SPxException&
x)
1976 std::string s =
x.what();
1979 catch(
const SPxException&)
1982 assert( lpi->
spx->status() != SPxSolver::OPTIMAL );
1988 SPxSolver::Status status = lpi->
spx->
doSolve();
1989 SCIPdebugMessage(
" -> SoPlex status: %d, basis status: %d\n", lpi->
spx->status(), lpi->
spx->basisStatus());
1993 lpi->
spx->spxout.setVerbosity(verbosity);
1997 case SPxSolver::ABORT_TIME:
1998 case SPxSolver::ABORT_ITER:
1999 case SPxSolver::ABORT_VALUE:
2000 case SPxSolver::SINGULAR:
2001 case SPxSolver::REGULAR:
2002 case SPxSolver::OPTIMAL:
2003#if SOPLEX_APIVERSION >= 3
2004 case SPxSolver::OPTIMAL_UNSCALED_VIOLATIONS:
2006 case SPxSolver::UNBOUNDED:
2007 case SPxSolver::INFEASIBLE:
2009 case SPxSolver::UNKNOWN:
2025 (void) lpi->
spx->setIntParam(SoPlex::ALGORITHM, (
int) SoPlex::ALGORITHM_PRIMAL);
2039 (void) lpi->
spx->setIntParam(SoPlex::ALGORITHM, (
int) SoPlex::ALGORITHM_DUAL);
2147 return (lpi->
spx->status() == SPxSolver::UNBOUNDED);
2162 return lpi->
spx->hasPrimalRay();
2175 assert(lpi->
spx->status() != SPxSolver::UNBOUNDED || lpi->
spx->basisStatus() == SPxBasis::UNBOUNDED);
2180 return lpi->
spx->status() == SPxSolver::UNBOUNDED;
2193 return (lpi->
spx->status() == SPxSolver::INFEASIBLE);
2201 SPxBasis::SPxStatus basestatus;
2208 basestatus = lpi->
spx->basisStatus();
2213 assert(basestatus == SPxBasis::OPTIMAL || lpi->
spx->status() != SPxSolver::OPTIMAL);
2215 return basestatus == SPxBasis::OPTIMAL || basestatus == SPxBasis::PRIMAL;
2230 return (lpi->
spx->status() == SPxSolver::INFEASIBLE);
2245 return lpi->
spx->hasDualFarkas();
2258 return lpi->
spx->status() == SPxSolver::INFEASIBLE && lpi->
spx->basisStatus() == SPxBasis::DUAL;
2271 return (lpi->
spx->status() == SPxSolver::UNBOUNDED);
2287 assert(lpi->
spx->basisStatus() == SPxBasis::OPTIMAL || lpi->
spx->status() != SPxSolver::OPTIMAL);
2289 return (lpi->
spx->basisStatus() == SPxBasis::OPTIMAL) || lpi->
spx->basisStatus() == SPxBasis::DUAL;
2301 assert((lpi->
spx->basisStatus() == SPxBasis::OPTIMAL)
2307 return (lpi->
spx->basisStatus() == SPxBasis::OPTIMAL);
2320 return (lpi->
spx->status() == SPxSolver::ABORT_VALUE);
2333 return (lpi->
spx->status() == SPxSolver::ABORT_ITER);
2346 return (lpi->
spx->status() == SPxSolver::ABORT_TIME);
2359 return static_cast<int>(lpi->
spx->status());
2374#if SOPLEX_APIVERSION >= 4
2375 *success = lpi->
spx->ignoreUnscaledViolations();
2415 DVectorRational* tmpvec;
2421 tmpvec =
new DVectorRational(
MAX(lpi->
spx->numColsRational(), lpi->
spx->numRowsRational()));
2431 VectorRational tmp(lpi->
spx->numColsRational(), tmpvec->get_ptr());
2432 (void)lpi->
spx->getPrimalRational(tmp);
2435 if( dualsol !=
NULL )
2437 VectorRational tmp(lpi->
spx->numRowsRational(), tmpvec->get_ptr());
2438 (void)lpi->
spx->getDualRational(tmp);
2441 if( activity !=
NULL )
2443 VectorRational tmp(lpi->
spx->numRowsRational(), tmpvec->get_ptr());
2444 (void)lpi->
spx->getSlacksRational(tmp);
2447 if( redcost !=
NULL )
2449 VectorRational tmp(lpi->
spx->numColsRational(), tmpvec->get_ptr());
2450 (void)lpi->
spx->getRedCostRational(tmp);
2457 catch(
const SPxException&
x )
2459 std::string s =
x.what();
2462 catch(
const SPxException& )
2478 DVectorRational* tmpvec;
2486 tmpvec =
new DVectorRational(
MAX(lpi->
spx->numColsRational(), lpi->
spx->numRowsRational()));
2490 VectorRational tmp(lpi->
spx->numColsRational(), tmpvec->get_ptr());
2491 (void)lpi->
spx->getPrimalRayRational(tmp);
2495 catch(
const SPxException&
x )
2497 std::string s =
x.what();
2500 catch(
const SPxException& )
2518 DVectorRational* tmpvec;
2526 tmpvec =
new DVectorRational(
MAX(lpi->
spx->numColsRational(), lpi->
spx->numRowsRational()));
2530 VectorRational tmp(lpi->
spx->numRowsRational(), tmpvec->get_ptr());
2531 (void)lpi->
spx->getDualFarkasRational(tmp);
2535 catch(
const SPxException&
x )
2537 std::string s =
x.what();
2540 catch(
const SPxException& )
2562 *iterations = lpi->
spx->numIterations();
2596 for(
i = 0;
i < lpi->
spx->numRowsRational(); ++
i )
2598 switch( lpi->
spx->basisRowStatus(
i) )
2600 case SPxSolver::BASIC:
2603 case SPxSolver::FIXED:
2604 case SPxSolver::ON_LOWER:
2607 case SPxSolver::ON_UPPER:
2610 case SPxSolver::ZERO:
2611 SCIPerrorMessage(
"slack variable has basis status ZERO (should not occur)\n");
2613 case SPxSolver::UNDEFINED:
2624 for(
i = 0;
i < lpi->
spx->numColsRational(); ++
i )
2626 switch( lpi->
spx->basisColStatus(
i) )
2628 case SPxSolver::BASIC:
2631 case SPxSolver::FIXED:
2645 case SPxSolver::ON_LOWER:
2648 case SPxSolver::ON_UPPER:
2651 case SPxSolver::ZERO:
2654 case SPxSolver::UNDEFINED:
2691 DataArray<SPxSolver::VarStatus>& _colstat = lpi->
spx->
colStat();
2692 DataArray<SPxSolver::VarStatus>& _rowstat = lpi->
spx->
rowStat();
2694 _colstat.reSize(ncols);
2695 _rowstat.reSize(nrows);
2697 for(
i = 0;
i < nrows; ++
i )
2702 _rowstat[
i] = SPxSolver::ON_LOWER;
2705 _rowstat[
i] = SPxSolver::BASIC;
2708 _rowstat[
i] = SPxSolver::ON_UPPER;
2711 SCIPerrorMessage(
"slack variable has basis status ZERO (should not occur)\n");
2720 for(
i = 0;
i < ncols; ++
i )
2725 _colstat[
i] = SPxSolver::ON_LOWER;
2728 _colstat[
i] = SPxSolver::BASIC;
2731 _colstat[
i] = SPxSolver::ON_UPPER;
2734 _colstat[
i] = SPxSolver::ZERO;
2763 lpi->
spx->getBasisInd(bind);
2784 SSVectorBase<soplex::Rational> tmpvec(0);
2795 if( !lpi->
spx->getBasisInverseRowRational(
r, tmpvec) )
2798 for(
i = 0;
i < tmpvec.size(); ++
i )
2800 inds[
i] = tmpvec.index(
i);
2804 *ninds = tmpvec.size();
2829 SSVectorRational tmpvec(0);
2838 if( ! lpi->
spx->getBasisInverseColRational(
c, tmpvec) )
2841 for(
i = 0;
i < tmpvec.size(); ++
i )
2843 inds[
i] = tmpvec.index(
i);
2847 *ninds = tmpvec.size();
2882 ncols = lpi->
spx->numColsRational();
2883 nrows = lpi->
spx->numRowsRational();
2898 (*lpistate)->ncols = ncols;
2899 (*lpistate)->nrows = nrows;
2926 lpncols = lpi->
spx->numColsRational();
2927 lpnrows = lpi->
spx->numRowsRational();
2939 for(
i = lpistate->
ncols;
i < lpncols; ++
i )
2945 bnd = lpi->
spx->lowerReal(
i);
2957 for(
i = lpistate->
nrows;
i < lpnrows; ++
i )
2978 lpi->
spx->clearBasis();
2981 catch(
const SPxException&
x )
2983 std::string s =
x.what();
2986 catch(
const SPxException& )
2989 assert( lpi->
spx->status() != SPxSolver::OPTIMAL );
3009 if ( *lpistate !=
NULL )
3099 *ival = lpi->
spx->intParam(SoPlex::ITERLIMIT);
3104 *ival = lpi->
spx->intParam(SoPlex::SIMPLIFIER) == (int) SoPlex::SIMPLIFIER_AUTO;
3110 scaleparam = lpi->
spx->intParam(SoPlex::SCALER);
3112 if( scaleparam == SoPlex::SCALER_OFF )
3114 else if( scaleparam == SoPlex::SCALER_BIEQUI )
3116#if SOPLEX_VERSION > 221 || (SOPLEX_VERSION == 221 && SOPLEX_SUBVERSION >= 2)
3119 assert(scaleparam == SoPlex::SCALER_LEASTSQ);
3125 assert(scaleparam == SoPlex::SCALER_GEO8);
3130#if SOPLEX_VERSION >= 201
3132 *ival = (int) (lpi->
spx->intParam(SoPlex::TIMER));
3135#if SOPLEX_VERSION >= 230 || (SOPLEX_VERSION == 220 && SOPLEX_SUBVERSION >= 3)
3137 *ival = (int) lpi->
spx->randomSeed();
3140#if SOPLEX_APIVERSION >= 1
3142 *ival = (int) lpi->
spx->intParam(SoPlex::FACTOR_UPDATE_MAX);
3177 if( ival >= INT_MAX )
3179 (void) lpi->
spx->setIntParam(SoPlex::ITERLIMIT, ival);
3183 (void) lpi->
spx->setIntParam(SoPlex::SIMPLIFIER, (
int) (ival ? SoPlex::SIMPLIFIER_AUTO : SoPlex::SIMPLIFIER_OFF));
3191 (void) lpi->
spx->setIntParam(SoPlex::PRICER, (
int) SoPlex::PRICER_AUTO);
3194 (void) lpi->
spx->setIntParam(SoPlex::PRICER, (
int) SoPlex::PRICER_STEEP);
3197 (void) lpi->
spx->setIntParam(SoPlex::PRICER, (
int) SoPlex::PRICER_PARMULT);
3200 (void) lpi->
spx->setIntParam(SoPlex::PRICER, (
int) SoPlex::PRICER_STEEP);
3203 (void) lpi->
spx->setIntParam(SoPlex::PRICER, (
int) SoPlex::PRICER_QUICKSTEEP);
3206 (void) lpi->
spx->setIntParam(SoPlex::PRICER, (
int) SoPlex::PRICER_DEVEX);
3213 assert(ival >= 0 && ival <= 2);
3215 (void) lpi->
spx->setIntParam(SoPlex::SCALER, (
int) SoPlex::SCALER_OFF);
3216 else if( ival == 1 )
3217 (void) lpi->
spx->setIntParam(SoPlex::SCALER, (
int) SoPlex::SCALER_BIEQUI);
3219#if SOPLEX_VERSION > 221 || (SOPLEX_VERSION == 221 && SOPLEX_SUBVERSION >= 2)
3220 (void) lpi->
spx->setIntParam(SoPlex::SCALER, (
int) SoPlex::SCALER_LEASTSQ);
3222 (void) lpi->
spx->setIntParam(SoPlex::SCALER, (
int) SoPlex::SCALER_GEO8);
3226#if SOPLEX_VERSION >= 201
3228 assert(ival >= 0 && ival < 3);
3229 (void) lpi->
spx->setIntParam(SoPlex::TIMER, ival);
3232#if SOPLEX_VERSION > 221 || (SOPLEX_VERSION == 221 && SOPLEX_SUBVERSION >= 3)
3234 lpi->
spx->setRandomSeed((
unsigned long)(
long)ival);
3237#if SOPLEX_VERSION > 221 || (SOPLEX_VERSION >= 221 && SOPLEX_SUBVERSION >= 3)
3239 assert(ival >= 0 && ival < 3);
3240 (void) lpi->
spx->setIntParam(SoPlex::SOLUTION_POLISHING, ival);
3243#if SOPLEX_APIVERSION >= 1
3246 (void) lpi->
spx->setIntParam(SoPlex::FACTOR_UPDATE_MAX, ival);
3279 if ( lpi->
spx->intParam(SoPlex::OBJSENSE) == SoPlex::OBJSENSE_MINIMIZE )
3280 *dval = lpi->
spx->realParam(SoPlex::OBJLIMIT_UPPER);
3282 *dval = lpi->
spx->realParam(SoPlex::OBJLIMIT_LOWER);
3285 *dval = lpi->
spx->realParam(SoPlex::TIMELIMIT);
3288 *dval = lpi->
spx->realParam(SoPlex::REPRESENTATION_SWITCH);
3318 if ( lpi->
spx->intParam(SoPlex::OBJSENSE) == SoPlex::OBJSENSE_MINIMIZE )
3319 (void) lpi->
spx->setRealParam(SoPlex::OBJLIMIT_UPPER, dval);
3321 (
void) lpi->
spx->setRealParam(SoPlex::OBJLIMIT_LOWER, dval);
3326 (void) lpi->
spx->setRealParam(SoPlex::TIMELIMIT, dval);
3330 assert( dval >= 0.0 || dval == -1.0 );
3334 (
void) lpi->
spx->setRealParam(SoPlex::REPRESENTATION_SWITCH, dval);
3365 return lpi->
spx->realParam(SoPlex::INFTY);
3377 return (val >= lpi->
spx->realParam(SoPlex::INFTY));
3393 const char* filename
3398 f = fopen(filename,
"r");
3426 assert(lpi->
spx->intParam(SoPlex::READMODE) == SoPlex::READMODE_RATIONAL);
3427 if( !lpi->
spx->readFile(fname) )
3431 catch(
const SPxException&
x )
3433 std::string s =
x.what();
3436 catch(
const SPxException& )
3459 (void) lpi->
spx->writeFileRational(fname);
3462 catch(
const SPxException&
x )
3464 std::string s =
x.what();
3467 catch(
const SPxException& )
void SCIPdecodeDualBit(const SCIP_DUALPACKET *inp, int *out, int count)
void SCIPencodeDualBit(const int *inp, SCIP_DUALPACKET *out, int count)
packing single and dual bit values
unsigned int SCIP_DUALPACKET
void setProbname(const char *probname)
DataArray< SPxSolver::VarStatus > & colStat()
bool checkConsistentSides() const
bool getFromScratch() const
SPxSolver::Status doSolve(bool printwarning=true)
void savePreStrongbranchingBasis()
bool preStrongbranchingBasisFreed() const
SPxexSCIP(SCIP_MESSAGEHDLR *messagehdlr=NULL, const char *probname=NULL)
void freePreStrongbranchingBasis()
void setRep(SPxSolver::Representation p_rep)
void trySolve(bool printwarning=true)
bool checkConsistentBounds() const
void setFromScratch(bool fs)
void setLpInfo(bool lpinfo)
DataArray< SPxSolver::VarStatus > & rowStat()
void restorePreStrongbranchingBasis()
common defines and data types used in all packages of SCIP
void * SCIPlpiExactGetSolverPointer(SCIP_LPIEXACT *lpi)
SCIP_Bool SCIPlpiExactHasDualRay(SCIP_LPIEXACT *lpi)
SCIP_RETCODE SCIPlpiExactSetRealpar(SCIP_LPIEXACT *lpi, SCIP_LPPARAM type, SCIP_Real dval)
SCIP_RETCODE SCIPlpiExactSetBase(SCIP_LPIEXACT *lpi, int *cstat, int *rstat)
SCIP_RETCODE SCIPlpiExactReadState(SCIP_LPIEXACT *lpi, const char *fname)
SCIP_Bool SCIPlpiExactHasStateBasis(SCIP_LPIEXACT *lpi, SCIP_LPISTATE *lpistate)
SCIP_RETCODE SCIPlpiExactGetObj(SCIP_LPIEXACT *lpi, int firstcol, int lastcol, SCIP_RATIONAL **vals)
SCIP_RETCODE SCIPlpiExactStartStrongbranch(SCIP_LPIEXACT *lpi)
SCIP_RETCODE SCIPlpiExactIgnoreInstability(SCIP_LPIEXACT *lpi, SCIP_Bool *success)
SCIP_RETCODE SCIPlpiExactGetObjval(SCIP_LPIEXACT *lpi, SCIP_RATIONAL *objval)
SCIP_Bool SCIPlpiExactIsDualUnbounded(SCIP_LPIEXACT *lpi)
SCIP_Bool SCIPlpiExactHasBarrierSolve(void)
SCIP_RETCODE SCIPlpiExactWriteLP(SCIP_LPIEXACT *lpi, const char *fname)
SCIP_Bool SCIPlpiExactHasPrimalRay(SCIP_LPIEXACT *lpi)
SCIP_Bool SCIPlpiExactExistsDualRay(SCIP_LPIEXACT *lpi)
SCIP_RETCODE SCIPlpiExactGetDualfarkas(SCIP_LPIEXACT *lpi, SCIP_RATIONAL **dualfarkas)
SCIP_RETCODE SCIPlpiExactEndStrongbranch(SCIP_LPIEXACT *lpi)
SCIP_RETCODE SCIPlpiExactSolveDual(SCIP_LPIEXACT *lpi)
const char * SCIPlpiExactGetSolverDesc(void)
SCIP_RETCODE SCIPlpiExactChgObjsen(SCIP_LPIEXACT *lpi, SCIP_OBJSEN objsen)
SCIP_RETCODE SCIPlpiExactSetIntpar(SCIP_LPIEXACT *lpi, SCIP_LPPARAM type, int ival)
SCIP_RETCODE SCIPlpiExactWriteState(SCIP_LPIEXACT *lpi, const char *fname)
SCIP_RETCODE SCIPlpiExactChgCoef(SCIP_LPIEXACT *lpi, int row, int col, SCIP_RATIONAL *newval)
SCIP_Bool SCIPlpiExactWasSolved(SCIP_LPIEXACT *lpi)
SCIP_Bool SCIPlpiExactIsPrimalUnbounded(SCIP_LPIEXACT *lpi)
SCIP_RETCODE SCIPlpiExactGetSides(SCIP_LPIEXACT *lpi, int firstrow, int lastrow, SCIP_RATIONAL **lhss, SCIP_RATIONAL **rhss)
SCIP_Bool SCIPlpiExactHasDualSolve(void)
const char * SCIPlpiExactGetSolverName(void)
SCIP_RETCODE SCIPlpiExactGetCols(SCIP_LPIEXACT *lpi, int firstcol, int lastcol, SCIP_RATIONAL **lb, SCIP_RATIONAL **ub, int *nnonz, int *beg, int *ind, SCIP_RATIONAL **val)
SCIP_Bool SCIPlpiExactIsPrimalInfeasible(SCIP_LPIEXACT *lpi)
SCIP_Real SCIPlpiExactInfinity(SCIP_LPIEXACT *lpi)
SCIP_RETCODE SCIPlpiExactGetRows(SCIP_LPIEXACT *lpi, int firstrow, int lastrow, SCIP_RATIONAL **lhs, SCIP_RATIONAL **rhs, int *nnonz, int *beg, int *ind, SCIP_RATIONAL **val)
SCIP_RETCODE SCIPlpiExactGetSolFeasibility(SCIP_LPIEXACT *lpi, SCIP_Bool *primalfeasible, SCIP_Bool *dualfeasible)
SCIP_RETCODE SCIPlpiExactGetBInvCol(SCIP_LPIEXACT *lpi, int c, SCIP_RATIONAL **coef, int *inds, int *ninds)
SCIP_Bool SCIPlpiExactExistsPrimalRay(SCIP_LPIEXACT *lpi)
SCIP_Bool SCIPlpiExactIsInfinity(SCIP_LPIEXACT *lpi, SCIP_Real val)
SCIP_Bool SCIPlpiExactHasPrimalSolve(void)
SCIP_RETCODE SCIPlpiExactAddRows(SCIP_LPIEXACT *lpi, int nrows, SCIP_RATIONAL **lhs, SCIP_RATIONAL **rhs, char **rownames, int nnonz, int *beg, int *ind, SCIP_RATIONAL **val)
SCIP_RETCODE SCIPlpiExactCreate(SCIP_LPIEXACT **lpi, SCIP_MESSAGEHDLR *messagehdlr, const char *name, SCIP_OBJSEN objsen)
SCIP_Bool SCIPlpiExactIsIterlimExc(SCIP_LPIEXACT *lpi)
SCIP_RETCODE SCIPlpiExactLoadColLP(SCIP_LPIEXACT *lpi, SCIP_OBJSEN objsen, int ncols, SCIP_RATIONAL **obj, SCIP_RATIONAL **lb, SCIP_RATIONAL **ub, char **colnames, int nrows, SCIP_RATIONAL **lhs, SCIP_RATIONAL **rhs, char **, int nnonz, int *beg, int *ind, SCIP_RATIONAL **val)
SCIP_Bool SCIPlpiExactIsPrimalFeasible(SCIP_LPIEXACT *lpi)
SCIP_Bool SCIPlpiExactIsDualFeasible(SCIP_LPIEXACT *lpi)
SCIP_RETCODE SCIPlpiExactReadLP(SCIP_LPIEXACT *lpi, const char *fname)
SCIP_RETCODE SCIPlpiExactGetBasisInd(SCIP_LPIEXACT *lpi, int *bind)
SCIP_RETCODE SCIPlpiExactGetObjsen(SCIP_LPIEXACT *lpi, SCIP_OBJSEN *objsen)
SCIP_Bool SCIPlpiExactIsOptimal(SCIP_LPIEXACT *lpi)
SCIP_RETCODE SCIPlpiExactGetRowNames(SCIP_LPIEXACT *lpi, int firstrow, int lastrow, char **rownames, char *namestorage, int namestoragesize, int *storageleft)
SCIP_RETCODE SCIPlpiExactAddCols(SCIP_LPIEXACT *lpi, int ncols, SCIP_RATIONAL **obj, SCIP_RATIONAL **lb, SCIP_RATIONAL **ub, char **colnames, int nnonz, int *beg, int *ind, SCIP_RATIONAL **val)
SCIP_RETCODE SCIPlpiExactGetBase(SCIP_LPIEXACT *lpi, int *cstat, int *rstat)
SCIP_RETCODE SCIPlpiExactDelCols(SCIP_LPIEXACT *lpi, int firstcol, int lastcol)
SCIP_RETCODE SCIPlpiExactChgObj(SCIP_LPIEXACT *lpi, int ncols, int *ind, SCIP_RATIONAL **obj)
SCIP_RETCODE SCIPlpiExactGetPrimalRay(SCIP_LPIEXACT *lpi, SCIP_RATIONAL **ray)
SCIP_RETCODE SCIPlpiExactGetBounds(SCIP_LPIEXACT *lpi, int firstcol, int lastcol, SCIP_RATIONAL **lbs, SCIP_RATIONAL **ubs)
int SCIPlpiExactGetInternalStatus(SCIP_LPIEXACT *lpi)
SCIP_RETCODE SCIPlpiDelColset(SCIP_LPIEXACT *lpi, int *dstat)
SCIP_RETCODE SCIPlpiExactGetCoef(SCIP_LPIEXACT *lpi, int row, int col, SCIP_RATIONAL *val)
SCIP_RETCODE SCIPlpiExactGetColNames(SCIP_LPIEXACT *lpi, int firstcol, int lastcol, char **colnames, char *namestorage, int namestoragesize, int *storageleft)
SCIP_RETCODE SCIPlpiExactClear(SCIP_LPIEXACT *lpi)
SCIP_RETCODE SCIPlpiExactGetNNonz(SCIP_LPIEXACT *lpi, int *nnonz)
SCIP_RETCODE SCIPlpiExactFree(SCIP_LPIEXACT **lpi)
SCIP_Bool SCIPlpiExactIsDualInfeasible(SCIP_LPIEXACT *lpi)
SCIP_Bool SCIPlpiExactIsObjlimExc(SCIP_LPIEXACT *lpi)
SCIP_RETCODE SCIPlpiExactClearState(SCIP_LPIEXACT *lpi)
SCIP_RETCODE SCIPlpiExactGetNCols(SCIP_LPIEXACT *lpi, int *ncols)
SCIP_RETCODE SCIPlpiExactSolveBarrier(SCIP_LPIEXACT *lpi, SCIP_Bool crossover)
SCIP_RETCODE SCIPlpiExactGetBInvRow(SCIP_LPIEXACT *lpi, int r, SCIP_RATIONAL **coef, int *inds, int *ninds)
SCIP_RETCODE SCIPlpiExactChgSides(SCIP_LPIEXACT *lpi, int nrows, int *ind, SCIP_RATIONAL **lhs, SCIP_RATIONAL **rhs)
SCIP_RETCODE SCIPlpiExactGetState(SCIP_LPIEXACT *lpi, BMS_BLKMEM *blkmem, SCIP_LPISTATE **lpistate)
SCIP_RETCODE SCIPlpiExactDelRows(SCIP_LPIEXACT *lpi, int firstrow, int lastrow)
SCIP_RETCODE SCIPlpiExactGetNRows(SCIP_LPIEXACT *lpi, int *nrows)
SCIP_Bool SCIPlpiExactIsTimelimExc(SCIP_LPIEXACT *lpi)
SCIP_RETCODE SCIPlpiExactGetRealpar(SCIP_LPIEXACT *lpi, SCIP_LPPARAM type, SCIP_Real *dval)
SCIP_RETCODE SCIPlpiExactChgBounds(SCIP_LPIEXACT *lpi, int ncols, int *ind, SCIP_RATIONAL **lb, SCIP_RATIONAL **ub)
SCIP_RETCODE SCIPlpiExactFreeState(SCIP_LPIEXACT *lpi, BMS_BLKMEM *blkmem, SCIP_LPISTATE **lpistate)
SCIP_RETCODE SCIPlpiExactDelRowset(SCIP_LPIEXACT *lpi, int *dstat)
SCIP_RETCODE SCIPlpiExactGetSol(SCIP_LPIEXACT *lpi, SCIP_RATIONAL *objval, SCIP_RATIONAL **primsol, SCIP_RATIONAL **dualsol, SCIP_RATIONAL **activity, SCIP_RATIONAL **redcost)
SCIP_RETCODE SCIPlpiExactSolvePrimal(SCIP_LPIEXACT *lpi)
SCIP_RETCODE SCIPlpiExactGetIntpar(SCIP_LPIEXACT *lpi, SCIP_LPPARAM type, int *ival)
SCIP_RETCODE SCIPlpiExactSetState(SCIP_LPIEXACT *lpi, BMS_BLKMEM *blkmem, SCIP_LPISTATE *lpistate)
SCIP_RETCODE SCIPlpiExactGetIterations(SCIP_LPIEXACT *lpi, int *iterations)
SCIP_RETCODE SCIPlpiExactSetIntegralityInformation(SCIP_LPIEXACT *lpi, int ncols, int *intInfo)
void SCIPrationalSetInfinity(SCIP_RATIONAL *res)
SCIP_Real SCIPrationalGetReal(SCIP_RATIONAL *rational)
SCIP_Bool SCIPrationalIsAbsInfinity(SCIP_RATIONAL *rational)
SCIP_Bool SCIPrationalIsPositive(SCIP_RATIONAL *rational)
SCIP_Bool SCIPrationalIsZero(SCIP_RATIONAL *rational)
void SCIPrationalSetNegInfinity(SCIP_RATIONAL *res)
SCIP_Bool SCIPrationalIsInfinity(SCIP_RATIONAL *rational)
SCIP_Bool SCIPrationalIsNegInfinity(SCIP_RATIONAL *rational)
assert(minobj< SCIPgetCutoffbound(scip))
static SCIP_RETCODE optimize(SCIP *scip, SCIP_SOL *worksol, SCIP_VAR **vars, int *blockstart, int *blockend, int nblocks, OPTTYPE opttype, SCIP_Real *activities, int nrows, SCIP_Bool *improvement, SCIP_Bool *varboundserr, SCIP_HEURDATA *heurdata)
SCIP_DUALPACKET ROWPACKET
SCIP_DUALPACKET COLPACKET
static void setIntParam(SCIP_LPI *lpi, int const param, int const parval)
static const char spxdesc[200]
static const char spxname[20]
interface methods for specific exact LP solvers
static void RsetSpxR(SCIP_LPIEXACT *lpi, SCIP_RATIONAL *r, const soplex::Rational &spxr)
static void lpistatePack(SCIP_LPISTATE *lpistate, const int *cstat, const int *rstat)
static void lpistateUnpack(const SCIP_LPISTATE *lpistate, int *cstat, int *rstat)
static SCIP_Bool fileExists(const char *filename)
#define SOPLEX_TRY(messagehdlr, x)
static int rowpacketNum(int nrows)
static void invalidateSolution(SCIP_LPIEXACT *lpi)
static void lpistateFree(SCIP_LPISTATE **lpistate, BMS_BLKMEM *blkmem)
static SCIP_RETCODE ensureCstatMem(SCIP_LPIEXACT *lpi, int num)
static SCIP_RETCODE spxSolve(SCIP_LPIEXACT *lpi)
static int colpacketNum(int ncols)
static SCIP_RETCODE ensureRstatMem(SCIP_LPIEXACT *lpi, int num)
#define CHECK_SOPLEX_PARAM(x)
#define SOPLEX_SUBVERSION
static void SpxRSetRat(SCIP_LPIEXACT *lpi, soplex::Rational &spxr, SCIP_RATIONAL *src)
static SCIP_RETCODE lpistateCreate(SCIP_LPISTATE **lpistate, BMS_BLKMEM *blkmem, int ncols, int nrows)
#define SOPLEX_TRY_ABORT(x)
static const char spxname[20]
static void RsetSpxVector(SCIP_LPIEXACT *lpi, SCIP_RATIONAL **r, VectorRational src)
memory allocation routines
#define BMSfreeMemory(ptr)
#define BMSfreeBlockMemory(mem, ptr)
#define BMSallocBlockMemory(mem, ptr)
#define BMSreallocMemoryArray(ptr, num)
#define BMSallocMemoryCPP(size)
#define BMSallocBlockMemoryArray(mem, ptr, num)
#define BMSfreeBlockMemoryArray(mem, ptr, num)
struct BMS_BlkMem BMS_BLKMEM
#define BMSfreeMemoryArrayNull(ptr)
#define BMSallocMemory(ptr)
void SCIPmessagePrintWarning(SCIP_MESSAGEHDLR *messagehdlr, const char *formatstr,...)
public methods for message output
wrapper for rational number arithmetic
wrapper for rational number arithmetic that interacts with GMP
SCIP_MESSAGEHDLR * messagehdlr
definition of wrapper class for rational numbers
@ SCIP_PRICING_STEEPQSTART
@ SCIP_PRICING_LPIDEFAULT
enum SCIP_Pricing SCIP_PRICING
enum SCIP_LPParam SCIP_LPPARAM
struct SCIP_LPiState SCIP_LPISTATE
@ SCIP_LPPAR_CONDITIONLIMIT
@ SCIP_LPPAR_ROWREPSWITCH
enum SCIP_ObjSen SCIP_OBJSEN
type definitions for specific exact LP solvers interface
struct SCIP_LPiExact SCIP_LPIEXACT
struct SCIP_Messagehdlr SCIP_MESSAGEHDLR
struct SCIP_Rational SCIP_RATIONAL
@ SCIP_ISFPREPRESENTABLE_UNKNOWN
type definitions for return codes for SCIP methods
enum SCIP_Retcode SCIP_RETCODE