protected Solution buildAndSolve( SolverFactory solverFactory, EnvironmentMode environmentMode, Solution planningProblem, long maximumMinutesSpend) { solverFactory .getSolverConfig() .getTerminationConfig() .setMaximumMinutesSpend(maximumMinutesSpend); SolverConfig solverConfig = solverFactory.getSolverConfig(); solverConfig.setEnvironmentMode(environmentMode); ScoreDirectorFactoryConfig assertionScoreDirectorFactory = createOverwritingAssertionScoreDirectorFactory(); if (assertionScoreDirectorFactory != null && environmentMode.isAsserted()) { solverConfig .getScoreDirectorFactoryConfig() .setAssertionScoreDirectorFactory(assertionScoreDirectorFactory); } Solver solver = solverFactory.buildSolver(); solver.setPlanningProblem(planningProblem); solver.solve(); Solution bestSolution = solver.getBestSolution(); if (bestSolution == null) { // Solver didn't make it past initialization // TODO remove me once getBestSolution() never // returns null bestSolution = planningProblem; } return bestSolution; }