MCPcopy Create free account
hub / github.com/ERGO-Code/HiGHS / updateFactor

Method updateFactor

highs/simplex/HEkk.cpp:3075–3103  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3073}
3074
3075void HEkk::updateFactor(HVector* column, HVector* row_ep, HighsInt* iRow,
3076 HighsInt* hint) {
3077 analysis_.simplexTimerStart(UpdateFactorClock);
3078 simplex_nla_.update(column, row_ep, iRow, hint);
3079 // Now have a representation of B^{-1}, but it is not fresh
3080 status_.has_invert = true;
3081 if (info_.update_count >= info_.update_limit)
3082 *hint = kRebuildReasonUpdateLimitReached;
3083
3084 // Determine whether to reinvert based on the synthetic clock
3085 bool reinvert_syntheticClock =
3086 this->total_synthetic_tick_ >= this->build_synthetic_tick_;
3087 const bool performed_min_updates =
3088 info_.update_count >= kSyntheticTickReinversionMinUpdateCount;
3089 if (reinvert_syntheticClock && performed_min_updates)
3090 *hint = kRebuildReasonSyntheticClockSaysInvert;
3091 analysis_.simplexTimerStop(UpdateFactorClock);
3092 // Use the next level down for the debug level, since the cost of
3093 // checking the INVERT every iteration is an order more expensive
3094 // than checking after factorization.
3095 HighsInt alt_debug_level = options_->highs_debug_level - 1;
3096 // Forced expensive debug for development work
3097 // if (debug_solve_report_) alt_debug_level = kHighsDebugLevelExpensive;
3098 HighsDebugStatus debug_status =
3099 debugNlaCheckInvert("HEkk::updateFactor", alt_debug_level);
3100 if (debug_status == HighsDebugStatus::kError) {
3101 *hint = kRebuildReasonPossiblySingularBasis;
3102 }
3103}
3104
3105void HEkk::updatePivots(const HighsInt variable_in, const HighsInt row_out,
3106 const HighsInt move_out) {

Callers 3

updatePivotsMethod · 0.80
updateMethod · 0.80
majorUpdateFactorMethod · 0.80

Calls 3

simplexTimerStartMethod · 0.80
simplexTimerStopMethod · 0.80
updateMethod · 0.45

Tested by

no test coverage detected