code: @Override
      public void solvingStarted(DefaultSolverScope<Solution_> solverScope) {
          // Starting bestSolution is already set by Solver.solve(Solution)
          InnerScoreDirector<Solution_> scoreDirector = solverScope.getScoreDirector();
          Score score = scoreDirector.calculateScore();
          solverScope.setBestScore(score);
          solverScope.setBestSolutionTimeMillis(System.currentTimeMillis());
          // The original bestSolution might be the final bestSolution and should have an accurate Score
          solverScope.getSolutionDescriptor().setScore(solverScope.getBestSolution(), score);
          if (score.isSolutionInitialized()) {
              solverScope.setStartingInitializedScore(score);
          } else {
              solverScope.setStartingInitializedScore(null);
          }
          if (assertInitialScoreFromScratch) {
              scoreDirector.assertWorkingScoreFromScratch(score, "Initial score calculated");
          }
          if (assertShadowVariablesAreNotStale) {
              scoreDirector.assertShadowVariablesAreNotStale(score, "Initial score calculated");
          }
      }
docs: ************************************************************************