예제 #1
0
 @Override
 public CustomPhase buildPhase(
     int phaseIndex,
     HeuristicConfigPolicy solverConfigPolicy,
     BestSolutionRecaller bestSolutionRecaller,
     Termination solverTermination) {
   HeuristicConfigPolicy phaseConfigPolicy = solverConfigPolicy.createPhaseConfigPolicy();
   DefaultCustomPhase customPhase = new DefaultCustomPhase();
   configurePhase(
       customPhase, phaseIndex, phaseConfigPolicy, bestSolutionRecaller, solverTermination);
   if (ConfigUtils.isEmptyCollection(customPhaseCommandClassList)) {
     throw new IllegalArgumentException(
         "Configure at least 1 <customPhaseCommandClass> in the <customPhase> configuration.");
   }
   List<CustomPhaseCommand> customPhaseCommandList =
       new ArrayList<>(customPhaseCommandClassList.size());
   Map<String, String> customProperties_ =
       customProperties != null ? customProperties : Collections.<String, String>emptyMap();
   for (Class<? extends CustomPhaseCommand> customPhaseCommandClass :
       customPhaseCommandClassList) {
     CustomPhaseCommand customPhaseCommand =
         ConfigUtils.newInstance(this, "customPhaseCommandClass", customPhaseCommandClass);
     customPhaseCommand.applyCustomProperties(customProperties_);
     customPhaseCommandList.add(customPhaseCommand);
   }
   customPhase.setCustomPhaseCommandList(customPhaseCommandList);
   customPhase.setForceUpdateBestSolution(
       forceUpdateBestSolution == null ? false : forceUpdateBestSolution);
   EnvironmentMode environmentMode = phaseConfigPolicy.getEnvironmentMode();
   if (environmentMode.isNonIntrusiveFullAsserted()) {
     customPhase.setAssertStepScoreFromScratch(true);
   }
   return customPhase;
 }
 private LocalSearchDecider buildDecider(
     HeuristicConfigPolicy configPolicy, Termination termination) {
   LocalSearchDecider decider = new LocalSearchDecider();
   decider.setTermination(termination);
   MoveSelector moveSelector = buildMoveSelector(configPolicy);
   decider.setMoveSelector(moveSelector);
   AcceptorConfig acceptorConfig_ = acceptorConfig == null ? new AcceptorConfig() : acceptorConfig;
   decider.setAcceptor(acceptorConfig_.buildAcceptor(configPolicy));
   ForagerConfig foragerConfig_ = foragerConfig == null ? new ForagerConfig() : foragerConfig;
   Forager forager = foragerConfig_.buildForager(configPolicy);
   decider.setForager(forager);
   if (moveSelector.isNeverEnding() && !forager.supportsNeverEndingMoveSelector()) {
     throw new IllegalStateException(
         "The moveSelector ("
             + moveSelector
             + ") has neverEnding ("
             + moveSelector.isNeverEnding()
             + "), but the forager ("
             + forager
             + ") does not support it."
             + " Configure the <forager> with <acceptedCountLimit>.");
   }
   EnvironmentMode environmentMode = configPolicy.getEnvironmentMode();
   if (environmentMode.isNonIntrusiveFullAsserted()) {
     decider.setAssertMoveScoreFromScratch(true);
   }
   if (environmentMode.isIntrusiveFastAsserted()) {
     decider.setAssertExpectedUndoMoveScore(true);
   }
   return decider;
 }
 public LocalSearchSolverPhase buildSolverPhase(
     int phaseIndex, HeuristicConfigPolicy solverConfigPolicy, Termination solverTermination) {
   HeuristicConfigPolicy phaseConfigPolicy = solverConfigPolicy.createPhaseConfigPolicy();
   DefaultLocalSearchSolverPhase phase = new DefaultLocalSearchSolverPhase();
   configureSolverPhase(phase, phaseIndex, phaseConfigPolicy, solverTermination);
   phase.setDecider(buildDecider(phaseConfigPolicy, phase.getTermination()));
   EnvironmentMode environmentMode = phaseConfigPolicy.getEnvironmentMode();
   if (environmentMode.isNonIntrusiveFullAsserted()) {
     phase.setAssertStepScoreFromScratch(true);
   }
   if (environmentMode.isIntrusiveFastAsserted()) {
     phase.setAssertExpectedStepScore(true);
   }
   return phase;
 }
 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;
 }