| 2232 | } |
| 2233 | |
| 2234 | void 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(); |
no test coverage detected