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

Method rootSeparationRound

highs/mip/HighsMipSolverData.cpp:1842–1868  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1840}
1841
1842bool HighsMipSolverData::rootSeparationRound(
1843 HighsMipWorker& worker, HighsSeparation& sepa, HighsInt& ncuts,
1844 HighsLpRelaxation::Status& status) {
1845 int64_t tmpLpIters = -getLp().getNumLpIterations();
1846 ncuts = sepa.separationRound(getDomain(), status);
1847 tmpLpIters += getLp().getNumLpIterations();
1848 avgrootlpiters = getLp().getAvgSolveIters();
1849 total_lp_iterations += tmpLpIters;
1850 sepa_lp_iterations += tmpLpIters;
1851
1852 status = evaluateRootLp(worker);
1853 if (status == HighsLpRelaxation::Status::kInfeasible) return true;
1854
1855 const std::vector<double>& solvals =
1856 getLp().getLpSolver().getSolution().col_value;
1857
1858 if (mipsolver.submip || incumbent.empty()) {
1859 heuristics.randomizedRounding(worker, solvals);
1860 if (mipsolver.options_mip_->mip_heuristic_run_shifting)
1861 heuristics.shifting(worker, solvals);
1862 heuristics.flushStatistics(mipsolver, worker);
1863 status = evaluateRootLp(worker);
1864 if (status == HighsLpRelaxation::Status::kInfeasible) return true;
1865 }
1866
1867 return false;
1868}
1869
1870HighsLpRelaxation::Status HighsMipSolverData::evaluateRootLp(
1871 HighsMipWorker& worker) {

Callers

nothing calls this directly

Calls 8

getNumLpIterationsMethod · 0.80
separationRoundMethod · 0.80
getAvgSolveItersMethod · 0.80
randomizedRoundingMethod · 0.80
shiftingMethod · 0.80
getSolutionMethod · 0.45
emptyMethod · 0.45
flushStatisticsMethod · 0.45

Tested by

no test coverage detected