void VideoControl::initVideoResolution(ComboBoxExt<MediaElement::Resolution> &videoResolution) { const std::list<MediaElement::Resolution> resolutions = elementsDB.getResolutions().getResolutions(); for(auto resolIter = resolutions.begin(); resolIter != resolutions.end(); ++resolIter) { if(resolIter->isBasic()) { videoResolution.append(resolIter->readableForm(), *resolIter); } } videoResolution.setActiveRowNumber(0); videoResolution.append(MORE_SETTINGS); }
void SPxSolver::computeTest() { METHOD( "SPxSolver::computeTest()" ); const SPxBasis::Desc& ds = desc(); Real pricingTol = leavetol(); infeasibilitiesCo.clear(); int ninfeasibilities = 0; for(int i = 0; i < coDim(); ++i) { SPxBasis::Desc::Status stat = ds.status(i); if(isBasic(stat)) theTest[i] = 0.0; else { theTest[i] = test(i, stat); if( remainingRoundsEnterCo == 0 ) { if( theTest[i] < -pricingTol ) { assert(infeasibilitiesCo.size() < infeasibilitiesCo.max()); infeasibilitiesCo.addIdx(i); isInfeasibleCo[i] = true; ++ninfeasibilities; } else isInfeasibleCo[i] = false; if( ninfeasibilities > sparsityThresholdEnterCo ) { MSG_INFO2( spxout << "IENTER04 too many infeasibilities for sparse pricing" << std::endl; ) remainingRoundsEnterCo = DENSEROUNDS; sparsePricingEnterCo = false; ninfeasibilities = 0; } } }
/* This methods assumes correctly setup vectors |pVec| and |coPvec| and bound vectors for leaving simplex. Then it checks all values of |pVec| and |coPvec| to obey these bounds and enlarges them if neccessary. */ void SPxSolver::shiftPvec() { METHOD( "SPxSolver::shiftPvec()" ); /* the allowed tolerance is (rep() == ROW) ? feastol() : opttol() because thePvec is the primal vector in ROW and the * dual vector in COLUMN representation; this is equivalent to leavetol() */ Random mult(10.0 * leavetol(), 100.0 * leavetol()); Real allow = leavetol() - epsilon(); int i, tmp; assert(type() == LEAVE); assert(allow > 0.0); for (i = dim() - 1; i >= 0; --i) { tmp = !isBasic(coId(i)); if ((*theCoUbound)[i] + allow <= (*theCoPvec)[i] && tmp) { if ((*theCoUbound)[i] != (*theCoLbound)[i]) shiftUCbound(i, (*theCoPvec)[i] + Real(mult)); else { shiftUCbound(i, (*theCoPvec)[i]); (*theCoLbound)[i] = (*theCoUbound)[i]; } } else if ((*theCoLbound)[i] - allow >= (*theCoPvec)[i] && tmp) { if ((*theCoUbound)[i] != (*theCoLbound)[i]) shiftLCbound(i, (*theCoPvec)[i] - Real(mult)); else { shiftLCbound(i, (*theCoPvec)[i]); (*theCoUbound)[i] = (*theCoLbound)[i]; } } } for (i = coDim() - 1; i >= 0; --i) { tmp = !isBasic(id(i)); if ((*theUbound)[i] + allow <= (*thePvec)[i] && tmp) { if ((*theUbound)[i] != (*theLbound)[i]) shiftUPbound(i, (*thePvec)[i] + Real(mult)); else { shiftUPbound(i, (*thePvec)[i]); (*theLbound)[i] = (*theUbound)[i]; } } else if ((*theLbound)[i] - allow >= (*thePvec)[i] && tmp) { if ((*theUbound)[i] != (*theLbound)[i]) shiftLPbound(i, (*thePvec)[i] - Real(mult)); else { shiftLPbound(i, (*thePvec)[i]); (*theUbound)[i] = (*theLbound)[i]; } } } #ifndef NDEBUG testBounds(); MSG_DEBUG( spxout << "DSHIFT02 shiftPvec: OK" << std::endl; ) #endif }
/* compute statistics on leaving variable Compute a set of statistical values on the variable selected for leaving the basis. */ void SPxSolver::getLeaveVals( int leaveIdx, SPxBasis::Desc::Status& leaveStat, SPxId& leaveId, Real& leaveMax, Real& leavebound, int& leaveNum) { METHOD( "SPxSolver::getLeaveVals()" ); SPxBasis::Desc& ds = desc(); leaveId = baseId(leaveIdx); if (leaveId.isSPxRowId()) { leaveNum = number(SPxRowId(leaveId)); leaveStat = ds.rowStatus(leaveNum); assert(isBasic(leaveStat)); switch (leaveStat) { case SPxBasis::Desc::P_ON_UPPER : assert( rep() == ROW ); ds.rowStatus(leaveNum) = dualRowStatus(leaveNum); leavebound = 0; leaveMax = -infinity; break; case SPxBasis::Desc::P_ON_LOWER : assert( rep() == ROW ); ds.rowStatus(leaveNum) = dualRowStatus(leaveNum); leavebound = 0; leaveMax = infinity; break; case SPxBasis::Desc::P_FREE : assert( rep() == ROW ); throw SPxInternalCodeException("XLEAVE01 This should never happen."); case SPxBasis::Desc::D_FREE : assert( rep() == COLUMN ); ds.rowStatus(leaveNum) = SPxBasis::Desc::P_FIXED; assert(lhs(leaveNum) == rhs(leaveNum)); leavebound = -rhs(leaveNum); if ((*theFvec)[leaveIdx] < theLBbound[leaveIdx]) leaveMax = infinity; else leaveMax = -infinity; break; case SPxBasis::Desc::D_ON_LOWER : assert( rep() == COLUMN ); ds.rowStatus(leaveNum) = SPxBasis::Desc::P_ON_UPPER; leavebound = -rhs(leaveNum); // slack !! leaveMax = infinity; break; case SPxBasis::Desc::D_ON_UPPER : assert( rep() == COLUMN ); ds.rowStatus(leaveNum) = SPxBasis::Desc::P_ON_LOWER; leavebound = -lhs(leaveNum); // slack !! leaveMax = -infinity; break; case SPxBasis::Desc::D_ON_BOTH : assert( rep() == COLUMN ); if ((*theFvec)[leaveIdx] > theLBbound[leaveIdx]) { ds.rowStatus(leaveNum) = SPxBasis::Desc::P_ON_LOWER; theLRbound[leaveNum] = -infinity; leavebound = -lhs(leaveNum); // slack !! leaveMax = -infinity; } else { ds.rowStatus(leaveNum) = SPxBasis::Desc::P_ON_UPPER; theURbound[leaveNum] = infinity; leavebound = -rhs(leaveNum); // slack !! leaveMax = infinity; } break; default: throw SPxInternalCodeException("XLEAVE02 This should never happen."); } MSG_DEBUG( spxout << "DLEAVE51 SPxSolver::getLeaveVals() : row " << leaveNum << ": " << leaveStat << " -> " << ds.rowStatus(leaveNum) << std::endl; ) }