@Override
    public void solve(DefaultSolverScope<Solution_> solverScope) {
        SortedSet<ExhaustiveSearchNode> expandableNodeQueue = new TreeSet<>(nodeComparator);
        ExhaustiveSearchPhaseScope<Solution_> phaseScope = new ExhaustiveSearchPhaseScope<>(solverScope);
        phaseScope.setExpandableNodeQueue(expandableNodeQueue);
        phaseStarted(phaseScope);

        while (!expandableNodeQueue.isEmpty() && !termination.isPhaseTerminated(phaseScope)) {
            ExhaustiveSearchStepScope<Solution_> stepScope = new ExhaustiveSearchStepScope<>(phaseScope);
            ExhaustiveSearchNode node = expandableNodeQueue.last();
            expandableNodeQueue.remove(node);
            stepScope.setExpandingNode(node);
            stepStarted(stepScope);
            restoreWorkingSolution(stepScope);
            decider.expandNode(stepScope);
            stepEnded(stepScope);
            phaseScope.setLastCompletedStepScope(stepScope);
        }
        phaseEnded(phaseScope);
    }
@Override
    public void solve(DefaultSolverScope<Solution_> solverScope) {
        SortedSet<ExhaustiveSearchNode> expandableNodeQueue = new TreeSet<>(nodeComparator);
        ExhaustiveSearchPhaseScope<Solution_> phaseScope = new ExhaustiveSearchPhaseScope<>(solverScope);
        phaseScope.setExpandableNodeQueue(expandableNodeQueue);
        phaseStarted(phaseScope);

        while (!expandableNodeQueue.isEmpty() && !termination.isPhaseTerminated(phaseScope)) {
            ExhaustiveSearchStepScope<Solution_> stepScope = new ExhaustiveSearchStepScope<>(phaseScope);
            ExhaustiveSearchNode node = expandableNodeQueue.last();
            expandableNodeQueue.remove(node);
            stepScope.setExpandingNode(node);
            stepStarted(stepScope);
            restoreWorkingSolution(stepScope);
            decider.expandNode(stepScope);
            stepEnded(stepScope);
            phaseScope.setLastCompletedStepScope(stepScope);
        }
        phaseEnded(phaseScope);
    }
@ Override public void solve ( DefaultSolverScope < Solution_ > solverScope ) { SortedSet < ExhaustiveSearchNode > expandableNodeQueue = new TreeSet <> ( nodeComparator ) ; ExhaustiveSearchPhaseScope < Solution_ > phaseScope = new ExhaustiveSearchPhaseScope <> ( solverScope ) ; phaseScope . setExpandableNodeQueue ( expandableNodeQueue ) ; phaseStarted ( phaseScope ) ; while ( ! expandableNodeQueue . isEmpty ( ) && ! termination . isPhaseTerminated ( phaseScope ) ) { ExhaustiveSearchStepScope < Solution_ > stepScope = new ExhaustiveSearchStepScope <> ( phaseScope ) ; ExhaustiveSearchNode node = expandableNodeQueue . last ( ) ; expandableNodeQueue . remove ( node ) ; stepScope . setExpandingNode ( node ) ; stepStarted ( stepScope ) ; restoreWorkingSolution ( stepScope ) ; decider . expandNode ( stepScope ) ; stepEnded ( stepScope ) ; phaseScope . setLastCompletedStepScope ( stepScope ) ; } phaseEnded ( phaseScope ) ; }
************************************************************************
************************************************************************