29 #define MAXSTALLS 10000 30 #define MAXSTALLRECOVERS 10 31 #define MAXREFACPIVOTS 10 51 bool reached = maxViolRedCost <
opttol() && maxViolBounds <
feastol() && maxViolConst <
feastol();
59 <<
" new tolerance = " << newpricertol
61 <<
" maxViolRedCost= " << maxViolRedCost
62 <<
" maxViolBounds= " << maxViolBounds
63 <<
" maxViolConst= " << maxViolConst
65 <<
" sumViolRedCost= " << sumViolRedCost
66 <<
" sumViolBounds= " << sumViolBounds
67 <<
" sumViolConst= " << sumViolConst
85 for(
int j = 0; j <
nCols(); ++j)
93 minbound =
MINIMUM(minbound, abslow);
94 maxbound =
MAXIMUM(maxbound, abslow);
99 minbound =
MINIMUM(minbound, absupp);
100 maxbound =
MAXIMUM(maxbound, absupp);
103 minobj =
MINIMUM(minobj, absobj);
104 maxobj =
MAXIMUM(maxobj, absobj);
108 for(
int i = 0; i <
nRows(); ++i)
115 minside =
MINIMUM(minside, abslhs);
116 maxside =
MAXIMUM(maxside, abslhs);
121 minside =
MINIMUM(minside, absrhs);
122 maxside =
MAXIMUM(maxside, absrhs);
149 int stallNumRecovers;
221 (*
spxout) <<
"starting value = " <<
value() << std::endl
222 <<
"starting shift = " <<
shift() << std::endl;
241 stallNumRecovers = 0;
245 bool tightened =
false;
267 int enterCycleCount = 0;
268 int enterFacPivotCount = 0;
275 stallRefShift =
shift();
276 stallRefValue =
value();
282 Real minpricertol = 0.01 * maxpricertol;
400 Real newpricertol = minpricertol;
427 if(newpricertol < minpricertol)
428 newpricertol = minpricertol;
438 MSG_INFO3((*
spxout), (*spxout) <<
" --- solve(enter) triggers refactorization" << std::endl;)
460 enterFacPivotCount++;
474 <<
") reached" << std::endl;)
498 <<
"entering algorithm" << std::endl;);
522 " --- stalling detected - trying to recover by switching to LEAVING algorithm." << std::endl;)
541 stallRefShift =
shift();
542 stallRefValue =
value();
552 <<
", value: " <<
value()
553 <<
", shift: " <<
shift()
556 <<
", opttol: " <<
opttol()
558 <<
"ISOLVE56 stop: " << stop
560 <<
", solver status: " <<
m_status <<
" (" <<
int(
m_status) <<
")" << std::endl;
578 (*
spxout) <<
" --- maxInfeas: " << maxinfeas
579 <<
", shift: " <<
shift()
580 <<
", entertol: " <<
entertol() << std::endl;
589 else if(loopCount > 2)
602 <<
")" << std::endl;)
629 int leaveCycleCount = 0;
630 int leaveFacPivotCount = 0;
637 stallRefShift =
shift();
638 stallRefValue =
value();
644 Real minpricertol = 0.01 * maxpricertol;
673 if(leaveNum < 0 && instableLeaveNum >= 0 &&
lastUpdate() == 0)
680 (*
spxout) <<
" --- trying instable leave iteration" << std::endl;
714 Real newpricertol = minpricertol;
740 if(newpricertol < minpricertol)
741 newpricertol = minpricertol;
773 leaveFacPivotCount++;
787 <<
") reached" << std::endl;)
835 " --- stalling detected - trying to recover by switching to ENTERING algorithm." << std::endl;)
854 stallRefShift =
shift();
855 stallRefValue =
value();
865 <<
", value: " <<
value()
866 <<
", shift: " <<
shift()
869 <<
", opttol: " <<
opttol()
871 <<
"ISOLVE57 stop: " << stop
873 <<
", solver status: " <<
m_status <<
" (" <<
int(
m_status) <<
")" << std::endl;
878 if(
shift() < minShift)
895 <<
", shift: " <<
shift()
897 <<
", cycle count: " << cycleCount << std::endl;
915 (*
spxout) <<
" --- maxInfeas: " << maxinfeas
916 <<
", shift: " <<
shift()
917 <<
", leavetol: " <<
leavetol() << std::endl;
929 else if(loopCount > 2)
942 <<
")" << std::endl;)
973 tightenedtype =
type();
975 if(tightenedtype ==
ENTER)
980 " --- basis singular: reloading basis and solving with tighter ratio test tolerance " <<
m_entertol 988 " --- basis singular: reloading basis and solving with tighter ratio test tolerance " <<
m_leavetol 1010 if(tightenedtype ==
ENTER)
1025 stallNumRecovers = 0;
1034 if(tightenedtype ==
ENTER)
1052 if(tightenedtype ==
ENTER)
1078 (*spxout) <<
")" << std::endl;
1081 #ifdef ENABLE_ADDITIONAL_CHECKS
1092 for(
int row = 0; row <
nRows(); ++row)
1097 for(c = 0; c < rowvec.
size(); ++c)
1098 val += rowvec.
value(c) * sol[rowvec.
index(c)];
1106 <<
" is violated by solution" << std::endl
1107 <<
" lhs:" <<
lhs(row)
1108 <<
" <= val:" << val
1109 <<
" <= rhs:" <<
rhs(row) << std::endl;)
1114 for(c = 0; c <
nRows(); ++c)
1119 assert(c <
nRows());
1122 <<
" fVec:" <<
fVec()[c]
1123 <<
" fRhs:" <<
fRhs()[c]
1124 <<
" fTest:" <<
fTest()[c] << std::endl;)
1129 for(
int col = 0; col <
nCols(); ++col)
1137 <<
" is violated by solution" << std::endl
1138 <<
" lower:" <<
lower(col)
1139 <<
" <= val:" << sol[col]
1140 <<
" <= upper:" <<
upper(col) << std::endl;)
1144 for(c = 0; c <
nRows() ; ++c)
1149 assert(c <
nRows());
1151 <<
" fVec:" <<
fVec()[c]
1152 <<
" fRhs:" <<
fRhs()[c]
1153 <<
" fTest:" <<
fTest()[c] << std::endl;)
1180 int nSuccessfulPivots;
1186 bool success =
false;
1209 for(
int i = 0; i <
nRows(); ++i)
1216 slackcandidates.
addIdx(i);
1223 for(
int i = 0; i <
nCols(); ++i)
1230 continuousvars.
addIdx(i);
1237 nSuccessfulPivots = 0;
1240 for(
int i = slackcandidates.
size() - 1; i >= 0 && !stop; --i)
1242 polishId =
coId(slackcandidates.
index(i));
1243 MSG_DEBUG(std::cout <<
"try pivoting: " << polishId <<
" stat: " << rowstatus[slackcandidates.
index(
1245 success =
enter(polishId,
true);
1248 assert(
EQrel(
value(), origval, alloweddeviation));
1249 assert(
LErel(
shift(), origshift, alloweddeviation));
1255 ++nSuccessfulPivots;
1256 slackcandidates.
remove(i);
1269 for(
int i = continuousvars.
size() - 1; i >= 0 && !stop; --i)
1271 polishId =
id(continuousvars.
index(i));
1272 MSG_DEBUG(std::cout <<
"try pivoting: " << polishId <<
" stat: " << colstatus[continuousvars.
index(
1274 success =
enter(polishId,
true);
1277 assert(
EQrel(
value(), origval, alloweddeviation));
1278 assert(
LErel(
shift(), origshift, alloweddeviation));
1284 ++nSuccessfulPivots;
1285 continuousvars.
remove(i);
1298 if(nSuccessfulPivots == 0)
1310 for(
int i = 0; i <
nCols() && !stop; ++i)
1322 nSuccessfulPivots = 0;
1324 for(
int i = candidates.
size() - 1; i >= 0 && !stop; --i)
1326 polishId =
id(candidates.
index(i));
1327 MSG_DEBUG(std::cout <<
"try pivoting: " << polishId <<
" stat: " << colstatus[candidates.
index(i)];)
1328 success =
enter(polishId,
true);
1331 assert(
EQrel(
value(), origval, alloweddeviation));
1332 assert(
LErel(
shift(), origshift, alloweddeviation));
1338 ++nSuccessfulPivots;
1352 if(nSuccessfulPivots == 0)
1371 bool useIntegrality =
false;
1374 useIntegrality =
true;
1382 for(
int i = 0; i <
dim(); ++i)
1400 basiccandidates.
addIdx(i);
1406 nSuccessfulPivots = 0;
1408 for(
int i = basiccandidates.
size() - 1; i >= 0 && !stop; --i)
1412 success =
leave(basiccandidates.
index(i),
true);
1415 assert(
EQrel(
value(), origval, alloweddeviation));
1416 assert(
LErel(
shift(), origshift, alloweddeviation));
1422 ++nSuccessfulPivots;
1423 basiccandidates.
remove(i);
1436 if(nSuccessfulPivots == 0)
1448 for(
int i = 0; i <
dim(); ++i)
1465 basiccandidates.
addIdx(i);
1471 nSuccessfulPivots = 0;
1473 for(
int i = basiccandidates.
size() - 1; i >= 0 && !stop; --i)
1476 success =
leave(basiccandidates.
index(i),
true);
1479 assert(
EQrel(
value(), origval, alloweddeviation));
1480 assert(
LErel(
shift(), origshift, alloweddeviation));
1486 ++nSuccessfulPivots;
1487 basiccandidates.
remove(i);
1500 if(nSuccessfulPivots == 0)
1509 (*
spxout) <<
" --- finished solution polishing (" <<
polishCount <<
" pivots)" << std::endl;)
1529 << tmp.
length() << std::endl;)
1550 << tmp.
length() << std::endl;)
1560 for(
int i = 0; i <
dim(); ++i)
1569 <<
", leavetol()=" <<
leavetol() << std::endl;)
1573 for(
int i = 0; i <
coDim(); ++i)
1580 <<
", theTest[i]=" <<
theTest[i]
1581 <<
", leavetol()=" <<
leavetol() << std::endl;)
1596 <<
"type | time | iters | facts | shift | violation | obj value ";
1599 (*
spxout) <<
" | condition";
1601 (*spxout) << std::endl;
1606 ? (*
spxout) <<
" L |" : (*spxout) <<
" E |";
1607 (*spxout) << std::fixed << std::setw(7) << std::setprecision(1) <<
time() <<
" |";
1608 (*spxout) << std::scientific << std::setprecision(2);
1609 (*spxout) << std::setw(8) <<
iteration() <<
" | " 1613 << std::setprecision(8) <<
value();
1630 (*spxout) << std::endl;
1639 #ifdef ENABLE_ADDITIONAL_CHECKS 1653 #ifdef ENABLE_ADDITIONAL_CHECKS 1665 #ifdef ENABLE_ADDITIONAL_CHECKS 1671 << cr.
length() << std::endl;)
1674 << fr.
length() << std::endl;)
1710 <<
") reached" << std::endl;)
1742 <<
") reached" << std::endl;)
1744 (*
spxout) <<
" --- objective value limit reached" << std::endl
1745 <<
" (value: " <<
value()
1746 <<
", limit: " <<
objLimit <<
")" << std::endl
1747 <<
" (spxSense: " <<
int(
spxSense())
1748 <<
", rep: " <<
int(
rep())
1749 <<
", type: " <<
int(
type()) <<
")" << std::endl;
1793 Real iterationFrac = 0.6;
1806 Real degeneracyLevel = 0;
1807 Real degeneracyLB = 0.1;
1808 Real degeneracyUB = 0.9;
1811 if((degeneracyLevel < degeneracyUB && degeneracyLevel > degeneracyLB)
1818 if(degeneracyLevel < degeneracyLB
1860 for(
int i = 0; i <
nCols(); ++i)
1889 for(
int j = 0; j <
dim(); ++j)
1918 for(i =
nCols() - 1; i >= 0; --i)
1920 if(
baseId(i).isSPxRowId())
1928 for(
int i = 0; i <
nRows(); ++i)
1941 p_vector[i] = (*theCoPvec)[i];
1969 for(i =
dim() - 1; i >= 0; --i)
1971 if(
baseId(i).isSPxColId())
1977 for(i =
dim() - 1; i >= 0; --i)
1979 if(
baseId(i).isSPxColId())
1988 for(
int i = 0; i <
nCols(); ++i)
2001 p_vector[i] =
maxObj()[i] - (*thePvec)[i];
2064 for(i =
nRows() - 1; i >= 0; --i)
2069 p_vector[i] =
lhs(i);
2074 p_vector[i] =
rhs(i);
2093 for(i =
dim() - 1; i >= 0; --i)
2095 if(
baseId(i).isSPxRowId())
2117 for(
int j = 0; j <
dim(); ++j)
2137 for(
int i =
nCols() - 1; i >= 0; --i)
2139 if(
baseId(i).isSPxRowId())
2169 for(
int i =
dim() - 1; i >= 0; --i)
2171 if(
baseId(i).isSPxColId())
2203 for(
int i =
dim() - 1; i >= 0; --i)
2205 if(
baseId(i).isSPxRowId())
2279 *p_value = this->
value();
virtual void unShift(void)
remove shift as much as possible.
const VectorBase< R > & rhs() const
Returns right hand side vector.
void computeFtest()
compute basis feasibility test vector.
virtual void entered4(SPxId, int)
performs entering pivot.
int iterDegenCheck
number of calls to change() since last degeneracy check
Real boundrange
absolute range of all bounds in the problem
Rational spxAbs(const Rational &r)
Absolute.
virtual void setType(SPxSolver::Type)
sets Simplex type.
SPxId coId(int i) const
id of i 'th covector.
int iteration() const
returns number of basis changes since last load().
bool enter(SPxId &id, bool polish=false)
Exception class for things that should NEVER happen.This class is derived from the SoPlex exception b...
Vector & multWithBase(Vector &x) const
Vector-basis product.
SoPlex start basis generation base class.
virtual Real shift() const
total current shift amount.
int iterations() const
get number of iterations of current solution.
Basis is not known to be dual nor primal feasible.
void coSolve(Vector &x, const Vector &rhs)
Cosolves linear system with basis matrix.
virtual SPxId selectEnter()=0
selects Id to enter basis.
primal variable is fixed to both bounds
virtual Real getDelta()
get allowed bound violation
int boundflips
number of performed bound flips
primal or dual variable is undefined
const VectorBase< R > & upper() const
Returns upper bound vector.
const Vector & fTest() const
Violations of fVec.
virtual Status getPrimal(Vector &vector) const
get solution vector for primal variables.
DIdxSet updateViols
store indices that were changed in the previous iteration and must be checked in hyper pricing ...
SPxOut * spxout
message handler
bool sparsePricingLeave
These values enable or disable sparse pricing.
THREADLOCAL const Real infinity
bool leave(int i, bool polish=false)
Pricing pricing() const
return current Pricing.
Real objrange
absolute range of all objective coefficients in the problem
virtual void qualRedCostViolation(Real &maxviol, Real &sumviol) const
get violation of optimality criterion.
Abstract pricer base class.
int size() const
Number of used indices.
Real leavetol() const
feasibility tolerance maintained by ratio test during LEAVE algorithm.
SSVector * solveVector3
when 3 systems are to be solved at a time; typically reserved for bound flipping ratio test (basic so...
void computeTest()
compute test vector in ENTERing Simplex.
int updateCount
number of calls to change() since last factorize()
minimize number of basic slack variables, i.e. more variables in between bounds
Basis is optimal, i.e. dual and primal feasible.
Real feastol() const
allowed primal feasibility tolerance.
Status & rowStatus(int i)
int lastIndex() const
returns index in basis where last update was done.
bool sparsePricingEnterCo
true if sparsePricing is turned on in the entering Simplex
virtual void qualBoundViolation(Real &maxviol, Real &sumviol) const
get violations of bounds.
bool LT(Real a, Real b, Real eps=Param::epsilon())
returns true iff a < b + eps
void setType(Type tp)
set LEAVE or ENTER algorithm.
Abstract ratio test base class.
solve() aborted due to iteration limit.
DataArray< int > isInfeasible
0: index not violated, 1: index violated, 2: index violated and among candidate list ...
No Problem has been loaded.
Real length() const
Floating point approximation of euclidian norm (without any approximation guarantee).
int number(const SPxRowId &id) const
Returns the row number of the row with identifier id.
void clear()
removes all indices.
virtual bool noViols(Real tol) const
check for violations above tol and immediately return false w/o checking the remaining values ...
int lastUpdate() const
returns number of basis changes since last refactorization.
int dim() const
dimension of basis matrix.
Vector & multBaseWith(Vector &x) const
Basis-vector product.
Real getFastCondition(int type=0)
LP has been proven to be primal infeasible.
R & value(int n)
Reference to value of n 'th nonzero.
bool isTimeLimitReached(const bool forceCheck=false)
returns whether current time limit is reached; call to time() may be skipped unless forceCheck is tru...
Ids for LP columns.Class SPxColId provides DataKeys for the column indices of an SPxLP.
Real time() const
time spent in last call to method solve().
int getDecompIterationLimit() const
returns the iteration limit for the decomposition simplex initialisation
static void setScientific(std::ostream &stream, int precision=8)
Sets the precision of the stream to 16 and the floatfield to scientifix.
void setDegenCompOffset(int iterOffset)
sets the offset for the number of iterations before the degeneracy is computed
void setPrimal(Vector &p_vector)
virtual Real value()
current objective value.
virtual void computeLeaveCoPrhs()
compute theCoPrhs for leaving Simplex.
int lastIterCount
number of calls to change() before halting the simplex
maximize number of basic slack variables, i.e. more variables on bounds
dual variable is left free, but unset
Real getDegeneracyLevel(Vector degenvec)
get level of dual degeneracy
Wrapper for different output streams and verbosity levels.
int nRows() const
Returns number of rows in LP.
virtual void start()=0
start timer, resume accounting user, system and real time.
virtual Real stop()=0
stop timer, return accounted user time.
std::ostream & getCurrentStream() const
Returns the stream for the current verbosity.
const Vector & fRhs() const
right-hand side vector for fVec
virtual int getFactorCount() const =0
get number of factorizations
primal variable is set to its upper bound
Generic Ids for LP rows or columns.Both SPxColIds and SPxRowIds may be treated uniformly as SPxIds: ...
UpdateVector & coPvec() const
copricing vector.
void remove(int n, int m)
removes indices at position numbers n through m.
virtual Status getDualfarkas(Vector &vector) const
get dual farkas proof of infeasibility.
int m_numCycle
actual number of degenerate steps so far.
int maxIters
maximum allowed iterations.
Real m_entertol
feasibility tolerance maintained during entering algorithm
SPxStatus status() const
returns current SPxStatus.
SSVector * coSolveVector3
when 3 systems are to be solved at a time; typically reserved for bound flipping ratio test (basic so...
bool isColBasic(int i) const
is the i 'th column vector basic ?
void setSlacks(Vector &p_vector)
void setStatus(SPxStatus stat)
sets basis SPxStatus to stat.
Status status() const
Status of solution process.
bool GT(Real a, Real b, Real eps=Param::epsilon())
returns true iff a > b + eps
virtual void left4(int, SPxId)
performs leaving pivot.
SPxSense spxSense() const
Returns the optimization sense.
int & index(int n)
Reference to index of n 'th nonzero.
Real m_pricingViol
maximal feasibility violation of current solution
Real entertol() const
feasibility tolerance maintained by ratio test during ENTER algorithm.
void performSolutionPolishing()
int size() const
returns the number of used indices.
LP has been solved to optimality.
#define MSG_INFO2(spxout, x)
Prints out message x if the verbosity level is at least SPxOut::INFO2.
virtual bool precisionReached(Real &newpricertol) const
is the solution precise enough, or should we increase delta() ?
SPxId id(int i) const
id of i 'th vector.
UpdateVector & fVec() const
feasibility vector.
bool isSPxColId() const
is id a column id?
dual variable is set to its upper bound
solve() aborted due to commence decomposition simplex
solve() aborted due to time limit.
void addIdx(int i)
adds index i to the index set
bool isBasic(SPxBasis::Desc::Status stat) const
does stat describe a basic index ?
primal variable is left free, but unset
Real siderange
absolute range of all side in the problem
void setDual(Vector &p_vector)
solve() aborted to exit decomposition simplex
const VectorBase< R > & lhs() const
Returns left hand side vector.
bool getComputeDegeneracy() const
returns whether the degeneracy is computed in each iteration
Real getEstimatedCondition()
int primalCount
number of primal iterations
Dynamic index set.Class DIdxSet provides dynamic IdxSet in the sense, that no restrictions are posed ...
int getDegenCompOffset() const
gets the offset for the number of iterations before the degeneracy is computed
bool sparsePricingEnter
true if sparsePricing is turned on in the entering Simplex for slack variables
int leaveCycles
the number of degenerate steps during the leaving algorithm
virtual void generate(SPxSolver &base)=0
generates start basis for loaded basis.
const VectorBase< R > & maxRowObj() const
Timer * theTime
time spent in last call to method solve()
virtual void setDelta(Real newDelta)
set allowed bound violation
Status & colStatus(int i)
Real m_leavetol
feasibility tolerance maintained during leaving algorithm
#define MSG_INFO3(spxout, x)
Prints out message x if the verbosity level is at least SPxOut::INFO3.
Real m_pricingViolCo
maximal feasibility violation of current solution in coDim
Real epsilon() const
values are considered to be 0.
Debugging, floating point type and parameter definitions.
virtual void loadBasis(const SPxBasis::Desc &)
set a start basis.
virtual void setEpsilon(Real eps)
sets violation bound.
Status getResult(Real *value=0, Vector *primal=0, Vector *slacks=0, Vector *dual=0, Vector *reduCost=0)
get all results of last solve.
int totalboundflips
total number of bound flips
int polishCount
number of solution polishing iterations
SolutionPolish polishObj
objective of solution polishing
UpdateVector & pVec() const
pricing vector.
SSVector * solveVector2
when 2 systems are to be solved at a time; typically for speepest edge weights
bool isInitialized() const
has the internal data been initialized?
Status m_status
status of algorithm.
Exception base class.This class implements a base class for our SoPlex exceptions We provide a what()...
Everything should be within this namespace.
virtual void setType(SPxSolver::Type)
sets pricing type.
virtual bool terminate()
Termination criterion.
bool EQrel(Real a, Real b, Real eps=Param::epsilon())
returns true iff |relDiff(a,b)| <= eps
Real theCumulativeTime
cumulative time spent in all calls to method solve()
Real dualDegenSum
the sum of the dual degeneracy percentage
SPxId lastLeft() const
returns SPxId of last vector that left the basis.
virtual void printDisplayLine(const bool force=false, const bool forceHead=false)
print display line of flying table
solve() aborted due to detection of cycling.
int prevIteration() const
returns the number of iterations prior to the last break in execution
virtual SPxSolver * solver() const
returns loaded LP solver.
#define MSG_WARNING(spxout, x)
Prints out message x if the verbosity level is at least SPxOut::WARNING.
primal variable is set to its lower bound
const VectorBase< R > & maxObj() const
Returns objective vector for maximization problem.
virtual void clearUpdateVecs(void)
int leaveCount
number of LEAVE iterations
nothing known on loaded problem.
don't perform modifications on optimal basis
const SVectorBase< R > & rowVector(int i) const
Gets row vector of row i.
void computeFrhs()
compute feasibility vector from scratch.
virtual Real epsilon() const
returns violation bound theeps.
void clear()
Set vector to 0.
bool isSPxRowId() const
is id a row id?
SPxRatioTester * theratiotester
bool isValid() const
returns TRUE iff the id is a valid column or row identifier.
dual variable is set to its lower bound
int enterCycles
the number of degenerate steps during the entering algorithm
DSVector primalRay
stores primal ray in case of unboundedness
int size() const
return nr. of elements.
Type type() const
return current Type.
DataArray< int > isInfeasibleCo
0: index not violated, 1: index violated, 2: index violated and among candidate list ...
virtual SPxSolver * solver() const
returns loaded SPxSolver object.
int coDim() const
codimension.
virtual Status getRedCost(Vector &vector) const
get vector of reduced costs.
bool hyperPricingEnter
true if hyper sparse pricing is turned on in the entering Simplex
#define MSG_INFO1(spxout, x)
Prints out message x if the verbosity level is at least SPxOut::INFO1.
DSVector dualFarkas
stores dual farkas proof in case of infeasibility
int nCols() const
Returns number of columns in LP.
int enterCount
number of ENTER iterations
const SLinSolver * slinSolver() const
return loaded SLinSolver.
int printCondition
printing the current condition number in the log (0 - off, 1 - estimate,exact, 2 - exact)";ratio esti...
bool LErel(Real a, Real b, Real eps=Param::epsilon())
returns true iff relDiff(a,b) <= eps
bool isCoBasic(int i) const
is the i 'th covector basic ?
DataArray< int > integerVariables
supplementary variable information, 0: continous variable, 1: integer variable
dual variable has two bounds
Real maxTime
maximum allowed time.
virtual int selectLeave()=0
returns selected index to leave basis.
bool recomputedVectors
flag to perform clean up step to reduce numerical errors only once
Exception class for status exceptions during the computationsThis class is derived from the SoPlex ex...
virtual void init()
intialize data structures.
SPxId lastEntered() const
returns SPxId of last vector included to the basis.
Ids for LP rows.Class SPxRowId provides DataKeys for the row indices of an SPxLP. ...
virtual void computeEnterCoPrhs()
compute theCoPrhs for entering Simplex.
void forceRecompNonbasicValue()
virtual void qualConstraintViolation(Real &maxviol, Real &sumviol) const
get violation of constraints.
void solve(Vector &x, const Vector &rhs)
Textbook ratio test for SoPlex.
Real opttol() const
allowed optimality, i.e., dual feasibility tolerance.
virtual void reset()=0
initialize timer, set timing accounts to zero.
bool isRowBasic(int i) const
is the i 'th row vector basic ?
int index(int n) const
access n 'th index.
Real objLimit
< the number of calls to the method isTimeLimitReached()
void setDecompIterationLimit(int iterationLimit)
sets the iteration limit for the decomposition simplex initialisation
void computePvec()
compute entire pVec().
virtual void load(SPxSolver *lp, bool initSlackBasis=true)
loads the LP lp to the basis.
bool getStartingDecompBasis
flag to indicate whether the simplex is solved to get the starting improved dual simplex basis ...
const SPxBasis & basis() const
Return current basis.
int iterCount
number of calls to change() since last manipulation
Status
Status of a variable.
SSVector * coSolveVector2
when 2 systems are to be solved at a time; typically for speepest edge weights
const VectorBase< R > & obj() const
Returns the vector of objective coefficients.
virtual Status solve()
solve loaded LP.
LP has been proven to be primal unbounded.
virtual Real maxInfeas() const
maximal infeasibility of basis
DIdxSet infeasibilitiesCo
bool hyperPricingLeave
true if hyper sparse pricing is turned on in the leaving Simplex
const VectorBase< R > & lower() const
Returns (internal and possibly scaled) lower bound vector.
const Desc & desc() const
Representation rep() const
return the current basis representation.
solve() aborted due to objective limit.
columnwise representation.
void setRedCost(Vector &p_vector)
virtual Status getDual(Vector &vector) const
get current solution vector for dual variables.
Basis is singular, numerical troubles?
virtual Status getPrimalray(Vector &vector) const
get primal ray in case of unboundedness.
virtual void factorize()
Factorize basis matrix.
Basis is primal feasible.
int lastDegenCheck() const
returns the number of iterations since the last degeneracy check
LP has a usable Basis (maybe LP is changed).
bool matrixIsSetup
true iff the pointers in matrix are set up correctly.
virtual Status getSlacks(Vector &vector) const
get vector of slack variables.
void setBasisStatus(SPxBasis::SPxStatus stat)
set the lp solver's basis status.
LP has been proven to be primal unbounded.
LP has been proven to be primal infeasible.
No Problem has been loaded to the basis.
void computeCoTest()
compute coTest vector.
void calculateProblemRanges()
determine ranges of problem values for bounds, sides and objective to assess numerical difficulties ...
Real primalDegenSum
the sum of the primal degeneracy percentage