| 846 | } |
| 847 | |
| 848 | void HighsSearch::installNode(HighsNodeQueue::OpenNode&& node) { |
| 849 | localdom.setDomainChangeStack(node.domchgstack, node.branchings); |
| 850 | bool globalSymmetriesValid = true; |
| 851 | if (mipsolver.mipdata_->globalOrbits) { |
| 852 | // if global orbits have been computed we check whether they are still valid |
| 853 | // in this node |
| 854 | const auto& domchgstack = localdom.getDomainChangeStack(); |
| 855 | for (HighsInt i : localdom.getBranchingPositions()) { |
| 856 | HighsInt col = domchgstack[i].column; |
| 857 | if (getSymmetries().columnPosition[col] == -1) continue; |
| 858 | |
| 859 | if (!getDomain().isBinary(col) || |
| 860 | (domchgstack[i].boundtype == HighsBoundType::kLower && |
| 861 | domchgstack[i].boundval == 1.0)) { |
| 862 | globalSymmetriesValid = false; |
| 863 | break; |
| 864 | } |
| 865 | } |
| 866 | } |
| 867 | nodestack.emplace_back( |
| 868 | node.lower_bound, node.estimate, nullptr, |
| 869 | globalSymmetriesValid ? mipsolver.mipdata_->globalOrbits : nullptr); |
| 870 | subrootsol.clear(); |
| 871 | depthoffset = node.depth - 1; |
| 872 | } |
| 873 | |
| 874 | HighsSearch::NodeResult HighsSearch::evaluateNode() { |
| 875 | assert(!nodestack.empty()); |
no test coverage detected