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

Method backtrackToGlobal

highs/mip/HighsDomain.cpp:2234–2292  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2232}
2233
2234void HighsDomain::backtrackToGlobal() {
2235 HighsInt k = HighsInt(domchgstack_.size()) - 1;
2236 bool old_infeasible = infeasible_;
2237 Reason old_reason = infeasible_reason;
2238
2239 if (infeasible_ && infeasible_pos == HighsInt(domchgstack_.size())) {
2240 assert(old_infeasible);
2241 assert(k == HighsInt(domchgstack_.size()) - 1);
2242 infeasible_ = false;
2243 infeasible_reason = Reason::unspecified();
2244 }
2245
2246 while (k >= 0) {
2247 double prevbound = prevboundval_[k].first;
2248 HighsInt prevpos = prevboundval_[k].second;
2249 assert(prevpos < k);
2250
2251 mipsolver->mipdata_->debugSolution.boundChangeRemoved(*this,
2252 domchgstack_[k]);
2253
2254 if (domchgstack_[k].boundtype == HighsBoundType::kLower) {
2255 assert(colLowerPos_[domchgstack_[k].column] == k);
2256 colLowerPos_[domchgstack_[k].column] = prevpos;
2257 } else {
2258 assert(colUpperPos_[domchgstack_[k].column] == k);
2259 colUpperPos_[domchgstack_[k].column] = prevpos;
2260 }
2261
2262 if (prevbound != domchgstack_[k].boundval) {
2263 // change back to global bound
2264 doChangeBound(
2265 {prevbound, domchgstack_[k].column, domchgstack_[k].boundtype});
2266 }
2267
2268 if (infeasible_ && infeasible_pos == k) {
2269 assert(old_infeasible);
2270 assert(k == HighsInt(domchgstack_.size()) - 1);
2271 infeasible_ = false;
2272 infeasible_reason = Reason::unspecified();
2273 }
2274
2275 --k;
2276 }
2277
2278 if (old_infeasible) {
2279 markPropagateCut(old_reason);
2280 infeasible_reason = Reason::unspecified();
2281 infeasible_ = false;
2282 }
2283
2284 HighsInt numreason = domchgreason_.size();
2285 for (HighsInt i = k + 1; i < numreason; ++i)
2286 markPropagateCut(domchgreason_[i]);
2287
2288 domchgstack_.clear();
2289 prevboundval_.clear();
2290 domchgreason_.clear();
2291 branchPos_.clear();

Callers 1

HighsSearch.cppFile · 0.80

Calls 3

sizeMethod · 0.45
boundChangeRemovedMethod · 0.45
clearMethod · 0.45

Tested by

no test coverage detected