code: @Override
      public Solution_ solve(Solution_ problem) {
          solverScope.initializeYielding();
          try {
              solverScope.setBestSolution(problem);
              solvingStarted(solverScope);
              runPhases(solverScope);
              solvingEnded(solverScope);
              return solverScope.getBestSolution();
          } finally {
              solverScope.destroyYielding();
          }
      }
docs: ************************************************************************