spxsolve.cpp
Go to the documentation of this file.
51 bool reached = maxViolRedCost < opttol() && maxViolBounds < feastol() && maxViolConst < feastol(); 84 /* store the last (primal or dual) feasible objective value to recover/abort in case of stalling */ 171 /* if we run into a singular basis, we will retry from regulardesc with tighter tolerance in the ratio test */ 206 /* in the entering algorithm, entertol() should be maintained by the ratio test and leavetol() should be 222 MSG_DEBUG( std::cout << "decreased delta for ratiotest to: " << theratiotester->getDelta() << std::endl; ) 352 // if the factorization is not fresh, we better refactorize and call the pricer again; however, this can 361 MSG_ERROR( std::cerr << "Something wrong with factorization, Basis status: " << SPxBasis::status() << std::endl; ) 397 /* if a successful pivot was performed or a nonbasic variable was flipped to its other bound, we reset the 414 /* only if the basis has really changed, we increase the iterations counter; this is not the case when only 426 if( spxAbs(value() - stallRefValue) <= epsilon() && spxAbs(shift() - stallRefShift) <= epsilon() ) 430 /* try to recover by unshifting/switching algorithm up to MAXSTALLRECOVERS times (just a number picked) */ 431 MSG_INFO3( (*spxout), (*spxout) << " --- stalling detected - trying to recover by switching to LEAVING algorithm." << std::endl; ) 439 MSG_INFO2( (*spxout), (*spxout) << " --- abort solving due to stalling in entering algorithm." << std::endl; ); 473 /**@todo technically it would be ok to finish already when (priced && maxinfeas + shift() <= entertol()) is 474 * satisfied; maybe at least in the case when SoPlex keeps jumping back between ENTER and LEAVE always 521 /* in the leaving algorithm, leavetol() should be maintained by the ratio test and entertol() should be reached 537 MSG_DEBUG( std::cout << "decreased delta for ratiotest to: " << theratiotester->getDelta() << std::endl; ) 628 // if the factorization is not fresh, we better refactorize and call the pricer again; however, this can 637 MSG_ERROR( std::cerr << "Something wrong with factorization, Basis status: " << SPxBasis::status() << std::endl; ) 673 /* if a successful pivot was performed or a nonbasic variable was flipped to its other bound, we reset the 683 MSG_INFO2( (*spxout), (*spxout) << " --- abort solving due to cycling in leaving algorithm" << std::endl; ); 689 /* only if the basis has really changed, we increase the iterations counter; this is not the case when only 701 if( spxAbs(value() - stallRefValue) <= epsilon() && spxAbs(shift() - stallRefShift) <= epsilon() ) 706 MSG_INFO3( (*spxout), (*spxout) << " --- stalling detected - trying to recover by switching to ENTERING algorithm." << std::endl; ) 714 MSG_INFO2( (*spxout), (*spxout) << " --- abort solving due to stalling in leaving algorithm" << std::endl; ); 769 /**@todo technically it would be ok to finish already when (priced && maxinfeas + shift() <= entertol()) is 770 * satisfied; maybe at least in the case when SoPlex keeps jumping back between ENTER and LEAVE always 815 // if we stopped due to a singular basis, we reload the original basis and try again with tighter 825 MSG_INFO2( (*spxout), (*spxout) << " --- basis singular: reloading basis and solving with tighter ratio test tolerance " << m_entertol << std::endl; ) 831 MSG_INFO2( (*spxout), (*spxout) << " --- basis singular: reloading basis and solving with tighter ratio test tolerance " << m_leavetol << std::endl; ) 849 MSG_INFO2( (*spxout), (*spxout) << " --- reloaded basis singular, resetting original tolerances" << std::endl; )
Exception class for things that should NEVER happen.This class is derived from the SoPlex exception b... Definition: exceptions.h:109 virtual Status getPrimal(Vector &vector) const get solution vector for primal variables. Definition: spxsolve.cpp:1219 SoPlex start basis generation base class. Basis is not known to be dual nor primal feasible. Definition: spxbasis.h:94 void coSolve(Vector &x, const Vector &rhs) Cosolves linear system with basis matrix. Definition: spxbasis.h:678 const VectorBase< Real > & maxObj() const Returns objective vector for maximization problem. Definition: spxlpbase.h:384 DIdxSet updateViols store indices that were changed in the previous iteration and must be checked in hyper pricing ... Definition: spxsolver.h:363 virtual void qualRedCostViolation(Real &maxviol, Real &sumviol) const get violation of optimality criterion. Definition: spxquality.cpp:118 bool isValid() const returns TRUE iff the id is a valid column or row identifier. Definition: spxid.h:150 Abstract pricer base class. SSVector * solveVector3 when 3 systems are to be solved at a time; typically reserved for bound flipping ratio test (basic so... Definition: spxsolver.h:250 virtual Status getRedCost(Vector &vector) const get vector of reduced costs. Definition: spxsolve.cpp:1299 bool sparsePricingEnterCo true if sparsePricing is turned on in the entering Simplex Definition: spxsolver.h:376 int number(const SPxRowId &id) const Returns the row number of the row with identifier id. Definition: spxlpbase.h:450 bool LT(Real a, Real b, Real eps=Param::epsilon()) returns true iff a < b + eps Definition: spxdefines.h:383 Abstract ratio test base class. DataArray< int > isInfeasible 0: index not violated, 1: index violated, 2: index violated and among candidate list ... Definition: spxsolver.h:370 LP has been proven to be primal infeasible. Definition: spxsolver.h:208 bool isTimeLimitReached(const bool forceCheck=false) returns whether current time limit is reached; call to time() may be skipped unless forceCheck is tru... Definition: spxsolver.cpp:1503 Ids for LP columns.Class SPxColId provides DataKeys for the column indices of an SPxLP. Definition: spxid.h:36 Real opttol() const allowed optimality, i.e., dual feasibility tolerance. Definition: spxsolver.h:697 Wrapper for different output streams and verbosity levels. virtual void start()=0 start timer, resume accounting user, system and real time. primal variable is set to its upper bound Definition: spxbasis.h:188 Generic Ids for LP rows or columns.Both SPxColIds and SPxRowIds may be treated uniformly as SPxIds: ... Definition: spxid.h:85 virtual void printDisplayLine(const bool force=false) print display line of flying table Definition: spxsolve.cpp:1077 Real m_entertol feasibility tolerance maintained during entering algorithm Definition: spxsolver.h:240 #define MSG_INFO2(spxout, x) Prints out message x if the verbosity level is at least SPxOut::INFO2. Definition: spxdefines.h:115 SSVector * coSolveVector3 when 3 systems are to be solved at a time; typically reserved for bound flipping ratio test (basic so... Definition: spxsolver.h:254 virtual Status getDual(Vector &vector) const get current solution vector for dual variables. Definition: spxsolve.cpp:1268 bool GT(Real a, Real b, Real eps=Param::epsilon()) returns true iff a > b + eps Definition: spxdefines.h:395 virtual Status getPrimalray(Vector &vector) const get primal ray in case of unboundedness. Definition: spxsolve.cpp:1342 Wrapper for GMP types. dual variable is set to its upper bound Definition: spxbasis.h:192 main LP solver class #define MSG_ERROR(x) Prints out message x if the verbosity level is at least SPxOut::ERROR. Definition: spxdefines.h:109 virtual void qualBoundViolation(Real &maxviol, Real &sumviol) const get violations of bounds. Definition: spxquality.cpp:60 #define MSG_INFO1(spxout, x) Prints out message x if the verbosity level is at least SPxOut::INFO1. Definition: spxdefines.h:113 bool sparsePricingEnter true if sparsePricing is turned on in the entering Simplex for slack variables Definition: spxsolver.h:375 virtual void generate(SPxSolver &base)=0 generates start basis for loaded basis. Real entertol() const feasibility tolerance maintained by ratio test during ENTER algorithm. Definition: spxsolver.h:675 Real m_leavetol feasibility tolerance maintained during leaving algorithm Definition: spxsolver.h:241 Real m_pricingViolCo maximal feasibility violation of current solution in coDim Definition: spxsolver.h:237 Real length() const Floating point approximation of euclidian norm (without any approximation guarantee). Definition: vectorbase.h:356 Debugging, floating point type and parameter definitions. Status getResult(Real *value=0, Vector *primal=0, Vector *slacks=0, Vector *dual=0, Vector *reduCost=0) get all results of last solve. Definition: spxsolve.cpp:1582 SSVector * solveVector2 when 2 systems are to be solved at a time; typically for speepest edge weights Definition: spxsolver.h:248 virtual bool precisionReached(Real &newpricertol) const is the solution precise enough, or should we increase delta() ? Definition: spxsolve.cpp:37 Exception base class.This class implements a base class for our SoPlex exceptions We provide a what()... Definition: exceptions.h:32 Everything should be within this namespace. Real theCumulativeTime cumulative time spent in all calls to method solve() Definition: spxsolver.h:224 int lastUpdate() const returns number of basis changes since last refactorization. Definition: spxbasis.h:533 solve() aborted due to detection of cycling. Definition: spxsolver.h:197 Definition: spxpricer.h:100 #define MSG_WARNING(spxout, x) Prints out message x if the verbosity level is at least SPxOut::WARNING. Definition: spxdefines.h:111 primal variable is set to its lower bound Definition: spxbasis.h:187 virtual Status getSlacks(Vector &vector) const get vector of slack variables. Definition: spxsolve.cpp:1378 dual variable is set to its lower bound Definition: spxbasis.h:193 virtual bool noViols(Real tol) const check for violations above tol and immediately return false w/o checking the remaining values ... Definition: spxsolver.cpp:675 DataArray< int > isInfeasibleCo 0: index not violated, 1: index violated, 2: index violated and among candidate list ... Definition: spxsolver.h:371 bool hyperPricingEnter true if hyper sparse pricing is turned on in the entering Simplex Definition: spxsolver.h:378 bool isBasic(SPxBasis::Desc::Status stat) const does stat describe a basic index ? Definition: spxsolver.h:1124 const SVectorBase< Real > & rowVector(int i) const Gets row vector of row i. Definition: spxlpbase.h:212 Exception class for status exceptions during the computationsThis class is derived from the SoPlex ex... Definition: exceptions.h:89 virtual Status getDualfarkas(Vector &vector) const get dual farkas proof of infeasibility. Definition: spxsolve.cpp:1360 const Real & objOffset() const Returns the objective function value offset. Definition: spxlpbase.h:444 Ids for LP rows.Class SPxRowId provides DataKeys for the row indices of an SPxLP. ... Definition: spxid.h:55 virtual void computeEnterCoPrhs() compute theCoPrhs for entering Simplex. Definition: spxvecs.cpp:405 void forceRecompNonbasicValue() Definition: spxsolver.h:545 Definition: spxpricer.h:101 Textbook ratio test for SoPlex. #define MSG_INFO3(spxout, x) Prints out message x if the verbosity level is at least SPxOut::INFO3. Definition: spxdefines.h:117 SSVector * coSolveVector2 when 2 systems are to be solved at a time; typically for speepest edge weights Definition: spxsolver.h:252 virtual void qualConstraintViolation(Real &maxviol, Real &sumviol) const get violation of constraints. Definition: spxquality.cpp:25 bool hyperPricingLeave true if hyper sparse pricing is turned on in the leaving Simplex Definition: spxsolver.h:377 Real leavetol() const feasibility tolerance maintained by ratio test during LEAVE algorithm. Definition: spxsolver.h:682 SPxId lastEntered() const returns SPxId of last vector included to the basis. Definition: spxbasis.h:515 const VectorBase< Real > & maxRowObj() const Definition: spxlpbase.h:286 void setBasisStatus(SPxBasis::SPxStatus stat) set the lp solver's basis status. Definition: spxsolver.h:1905 |