public final void solve() { solving.set(true); basicPlumbingTermination.resetTerminateEarly(); solverScope.setRestartSolver(true); while (solverScope.isRestartSolver()) { solverScope.setRestartSolver(false); solvingStarted(solverScope); runSolverPhases(); solvingEnded(solverScope); checkProblemFactChanges(); } // Must be kept open for doProblemFactChange solverScope.getScoreDirector().dispose(); solving.set(false); }