@Override
    public final Solution_ solve(Solution_ problem) {
        if (problem == null) {
            throw new IllegalArgumentException("The problem (" + problem + ") must not be null.");
        }
        solverScope.setBestSolution(problem);
        outerSolvingStarted(solverScope);
        boolean restartSolver = true;
        while (restartSolver) {
            solvingStarted(solverScope);
            runPhases(solverScope);
            solvingEnded(solverScope);
            restartSolver = checkProblemFactChanges();
        }
        outerSolvingEnded(solverScope);
        return solverScope.getBestSolution();
    }
@Override
    public final Solution_ solve(Solution_ problem) {
        if (problem == null) {
            throw new IllegalArgumentException("The problem (" + problem + ") must not be null.");
        }
        solverScope.setBestSolution(problem);
        outerSolvingStarted(solverScope);
        boolean restartSolver = true;
        while (restartSolver) {
            solvingStarted(solverScope);
            runPhases(solverScope);
            solvingEnded(solverScope);
            restartSolver = checkProblemFactChanges();
        }
        outerSolvingEnded(solverScope);
        return solverScope.getBestSolution();
    }
@ Override public final Solution_ solve ( Solution_ problem ) { if ( problem == null ) { throw new IllegalArgumentException ( "The problem (" + problem + ") must not be null." ) ; } solverScope . setBestSolution ( problem ) ; outerSolvingStarted ( solverScope ) ; boolean restartSolver = true ; while ( restartSolver ) { solvingStarted ( solverScope ) ; runPhases ( solverScope ) ; solvingEnded ( solverScope ) ; restartSolver = checkProblemFactChanges ( ) ; } outerSolvingEnded ( solverScope ) ; return solverScope . getBestSolution ( ) ; }
************************************************************************
************************************************************************