int SPxDantzigPR::selectLeave() { assert(thesolver != 0); #ifdef PARTIAL_PRICING return selectLeavePart(); #endif if( thesolver->sparsePricingLeave ) return selectLeaveSparse(); // const Real* up = thesolver->ubBound(); // const Real* low = thesolver->lbBound(); Real best = -theeps; int n = -1; for(int i = thesolver->dim() - 1; i >= 0; --i) { Real x = thesolver->fTest()[i]; if (x < -theeps) { // x *= EQ_PREF * (1 + (up[i] == low[i])); if (x < best) { n = i; best = x; } } } return n; }
int SPxDevexPR::selectLeave() { int retid; if (thesolver->hyperPricingLeave && thesolver->sparsePricingLeave) { if ( bestPrices.size() < 2 || thesolver->basis().lastUpdate() == 0 ) { // call init method to build up price-vector and return index of largest price retid = buildBestPriceVectorLeave(theeps); } else retid = selectLeaveHyper(theeps); } else if (thesolver->sparsePricingLeave) retid = selectLeaveSparse(theeps); else retid = selectLeaveX(theeps); if ( retid < 0 && !refined ) { refined = true; MSG_INFO3( (*thesolver->spxout), (*thesolver->spxout) << "WDEVEX02 trying refinement step..\n"; )