All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
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 */
203 /* in the entering algorithm, entertol() should be maintained by the ratio test and leavetol() should be
219 MSG_DEBUG( std::cout << "decreased delta for ratiotest to: " << theratiotester->getDelta() << std::endl; )
351 // if the factorization is not fresh, we better refactorize and call the pricer again; however, this can
360 MSG_ERROR( std::cerr << "Something wrong with factorization, Basis status: " << SPxBasis::status() << std::endl; )
396 /* if a successful pivot was performed or a nonbasic variable was flipped to its other bound, we reset the
413 /* only if the basis has really changed, we increase the iterations counter; this is not the case when only
425 if( spxAbs(value() - stallRefValue) <= epsilon() && spxAbs(shift() - stallRefShift) <= epsilon() )
429 /* try to recover by unshifting/switching algorithm up to MAXSTALLRECOVERS times (just a number picked) */
430 MSG_INFO3( (*spxout), (*spxout) << " --- stalling detected - trying to recover by switching to LEAVING algorithm." << std::endl; )
438 MSG_INFO2( (*spxout), (*spxout) << " --- abort solving due to stalling in entering algorithm." << std::endl; );
472 /**@todo technically it would be ok to finish already when (priced && maxinfeas + shift() <= entertol()) is
473 * satisfied; maybe at least in the case when SoPlex keeps jumping back between ENTER and LEAVE always
520 /* in the leaving algorithm, leavetol() should be maintained by the ratio test and entertol() should be reached
536 MSG_DEBUG( std::cout << "decreased delta for ratiotest to: " << theratiotester->getDelta() << std::endl; )
627 // if the factorization is not fresh, we better refactorize and call the pricer again; however, this can
636 MSG_ERROR( std::cerr << "Something wrong with factorization, Basis status: " << SPxBasis::status() << std::endl; )
672 /* if a successful pivot was performed or a nonbasic variable was flipped to its other bound, we reset the
682 MSG_INFO2( (*spxout), (*spxout) << " --- abort solving due to cycling in leaving algorithm" << std::endl; );
688 /* only if the basis has really changed, we increase the iterations counter; this is not the case when only
700 if( spxAbs(value() - stallRefValue) <= epsilon() && spxAbs(shift() - stallRefShift) <= epsilon() )
705 MSG_INFO3( (*spxout), (*spxout) << " --- stalling detected - trying to recover by switching to ENTERING algorithm." << std::endl; )
713 MSG_INFO2( (*spxout), (*spxout) << " --- abort solving due to stalling in leaving algorithm" << std::endl; );
768 /**@todo technically it would be ok to finish already when (priced && maxinfeas + shift() <= entertol()) is
769 * satisfied; maybe at least in the case when SoPlex keeps jumping back between ENTER and LEAVE always
814 // if we stopped due to a singular basis, we reload the original basis and try again with tighter
824 MSG_INFO2( (*spxout), (*spxout) << " --- basis singular: reloading basis and solving with tighter ratio test tolerance " << m_entertol << std::endl; )
830 MSG_INFO2( (*spxout), (*spxout) << " --- basis singular: reloading basis and solving with tighter ratio test tolerance " << m_leavetol << std::endl; )
|