ConstructionHeuristicPhaseConfig constructionHeuristicPhaseConfig = new ConstructionHeuristicPhaseConfig(); if (constructionHeuristicType != null) { constructionHeuristicPhaseConfig.setConstructionHeuristicType(constructionHeuristicType);
/** * Unused alternative. Abnormal way to create a {@link Solver}. * <p> * Not recommended! It is recommended to use {@link #createSolverByXml()} instead. * @return never null */ protected Solver<NQueens> createSolverByApi() { SolverFactory<NQueens> solverFactory = SolverFactory.createEmpty(); SolverConfig solverConfig = solverFactory.getSolverConfig(); solverConfig.setSolutionClass(NQueens.class); solverConfig.setEntityClassList(Collections.<Class<?>>singletonList(Queen.class)); ScoreDirectorFactoryConfig scoreDirectorFactoryConfig = new ScoreDirectorFactoryConfig(); scoreDirectorFactoryConfig.setScoreDrlList( Arrays.asList("org/optaplanner/examples/nqueens/solver/nQueensScoreRules.drl")); solverConfig.setScoreDirectorFactoryConfig(scoreDirectorFactoryConfig); solverConfig.setTerminationConfig(new TerminationConfig().withBestScoreLimit("0")); List<PhaseConfig> phaseConfigList = new ArrayList<>(); ConstructionHeuristicPhaseConfig constructionHeuristicPhaseConfig = new ConstructionHeuristicPhaseConfig(); constructionHeuristicPhaseConfig.setConstructionHeuristicType( ConstructionHeuristicType.FIRST_FIT_DECREASING); phaseConfigList.add(constructionHeuristicPhaseConfig); LocalSearchPhaseConfig localSearchPhaseConfig = new LocalSearchPhaseConfig(); ChangeMoveSelectorConfig changeMoveSelectorConfig = new ChangeMoveSelectorConfig(); changeMoveSelectorConfig.setSelectionOrder(SelectionOrder.ORIGINAL); localSearchPhaseConfig.setMoveSelectorConfig(changeMoveSelectorConfig); localSearchPhaseConfig.setAcceptorConfig(new AcceptorConfig().withEntityTabuSize(5)); phaseConfigList.add(localSearchPhaseConfig); solverConfig.setPhaseConfigList(phaseConfigList); return solverFactory.buildSolver(); }
@Override protected SolverFactory<Solution_> buildSolverFactory() { SolverFactory<Solution_> solverFactory = SolverFactory.createFromXmlResource(commonApp.getSolverConfig()); SolverConfig solverConfig = solverFactory.getSolverConfig(); solverConfig.setTerminationConfig(new TerminationConfig()); ConstructionHeuristicPhaseConfig constructionHeuristicPhaseConfig = new ConstructionHeuristicPhaseConfig(); constructionHeuristicPhaseConfig.setConstructionHeuristicType(constructionHeuristicType); solverConfig.setPhaseConfigList(Arrays.asList(constructionHeuristicPhaseConfig)); return solverFactory; }
@Test public void trackConstructionHeuristics() { SolverFactory<NQueens> solverFactory = SolverFactory.createFromXmlResource(NQueensApp.SOLVER_CONFIG); SolverConfig solverConfig = solverFactory.getSolverConfig(); ConstructionHeuristicPhaseConfig chConfig = new ConstructionHeuristicPhaseConfig(); chConfig.setValueSorterManner(valueSorterManner); chConfig.setEntitySorterManner(entitySorterManner); chConfig.setConstructionHeuristicType(constructionHeuristicType); solverConfig.setPhaseConfigList(Collections.<PhaseConfig>singletonList(chConfig)); NQueensGenerator generator = new NQueensGenerator(); NQueens problem = generator.createNQueens(8); NQueensStepTracker listener = new NQueensStepTracker(); DefaultSolver<NQueens> solver = (DefaultSolver<NQueens>) solverFactory.buildSolver(); solver.addPhaseLifecycleListener(listener); NQueens bestSolution = solver.solve(problem); assertNotNull(bestSolution); assertTrackingList(expectedCoordinates, listener.getTrackingList()); }
private List<PhaseConfig> create(final List<PhaseConfigModel> phaseConfigList) { if (phaseConfigList == null) { return new ArrayList<>(); } else { List<PhaseConfig> result = new ArrayList<>(phaseConfigList.size()); for (PhaseConfigModel phaseConfigModel : phaseConfigList) { if (phaseConfigModel instanceof ConstructionHeuristicPhaseConfigModel) { ConstructionHeuristicPhaseConfigModel constructionHeuristicPhaseConfigModel = (ConstructionHeuristicPhaseConfigModel) phaseConfigModel; ConstructionHeuristicPhaseConfig phaseConfig = new ConstructionHeuristicPhaseConfig(); phaseConfig.setConstructionHeuristicType(constructionHeuristicPhaseConfigModel.getConstructionHeuristicType()); phaseConfig.setEntitySorterManner(constructionHeuristicPhaseConfigModel.getEntitySorterManner()); result.add(phaseConfig); } else if (phaseConfigModel instanceof LocalSearchPhaseConfigModel) { LocalSearchPhaseConfigModel localSearchPhaseConfigModel = (LocalSearchPhaseConfigModel) phaseConfigModel; LocalSearchPhaseConfig phaseConfig = new LocalSearchPhaseConfig(); phaseConfig.setLocalSearchType(localSearchPhaseConfigModel.getLocalSearchType()); result.add(phaseConfig); } } return result; } } }
/** * Unused alternative. Abnormal way to create a {@link Solver}. * <p> * Not recommended! It is recommended to use {@link #createSolverByXml()} instead. * @return never null */ protected Solver<NQueens> createSolverByApi() { SolverFactory<NQueens> solverFactory = SolverFactory.createEmpty(); SolverConfig solverConfig = solverFactory.getSolverConfig(); solverConfig.setSolutionClass(NQueens.class); solverConfig.setEntityClassList(Collections.<Class<?>>singletonList(Queen.class)); ScoreDirectorFactoryConfig scoreDirectorFactoryConfig = new ScoreDirectorFactoryConfig(); scoreDirectorFactoryConfig.setScoreDrlList( Arrays.asList("org/optaplanner/examples/nqueens/solver/nQueensScoreRules.drl")); solverConfig.setScoreDirectorFactoryConfig(scoreDirectorFactoryConfig); solverConfig.setTerminationConfig(new TerminationConfig().withBestScoreLimit("0")); List<PhaseConfig> phaseConfigList = new ArrayList<>(); ConstructionHeuristicPhaseConfig constructionHeuristicPhaseConfig = new ConstructionHeuristicPhaseConfig(); constructionHeuristicPhaseConfig.setConstructionHeuristicType( ConstructionHeuristicType.FIRST_FIT_DECREASING); phaseConfigList.add(constructionHeuristicPhaseConfig); LocalSearchPhaseConfig localSearchPhaseConfig = new LocalSearchPhaseConfig(); ChangeMoveSelectorConfig changeMoveSelectorConfig = new ChangeMoveSelectorConfig(); changeMoveSelectorConfig.setSelectionOrder(SelectionOrder.ORIGINAL); localSearchPhaseConfig.setMoveSelectorConfig(changeMoveSelectorConfig); localSearchPhaseConfig.setAcceptorConfig(new AcceptorConfig().withEntityTabuSize(5)); phaseConfigList.add(localSearchPhaseConfig); solverConfig.setPhaseConfigList(phaseConfigList); return solverFactory.buildSolver(); }
@Override protected SolverFactory<Solution_> buildSolverFactory() { SolverFactory<Solution_> solverFactory = SolverFactory.createFromXmlResource(commonApp.getSolverConfig()); SolverConfig solverConfig = solverFactory.getSolverConfig(); solverConfig.setTerminationConfig(new TerminationConfig()); ConstructionHeuristicPhaseConfig constructionHeuristicPhaseConfig = new ConstructionHeuristicPhaseConfig(); constructionHeuristicPhaseConfig.setConstructionHeuristicType(constructionHeuristicType); solverConfig.setPhaseConfigList(Arrays.asList(constructionHeuristicPhaseConfig)); return solverFactory; }
private SolverConfig getSolverConfig() { SolverConfig solverConfig = new SolverConfig(); TerminationConfig terminationConfig = new TerminationConfig(); terminationConfig.setMillisecondsSpentLimit(1l); TerminationConfig nestedTerminationConfig = new TerminationConfig(); nestedTerminationConfig.setBestScoreFeasible(true); terminationConfig.setTerminationConfigList(Arrays.asList(nestedTerminationConfig)); solverConfig.setTerminationConfig(terminationConfig); ScoreDirectorFactoryConfig scoreDirectorFactoryConfig = new ScoreDirectorFactoryConfig(); scoreDirectorFactoryConfig.setKsessionName("testKsession"); solverConfig.setScoreDirectorFactoryConfig(scoreDirectorFactoryConfig); ConstructionHeuristicPhaseConfig constructionHeuristicPhaseConfig = new ConstructionHeuristicPhaseConfig(); constructionHeuristicPhaseConfig.setConstructionHeuristicType(ConstructionHeuristicType.FIRST_FIT); LocalSearchPhaseConfig localSearchPhaseConfig = new LocalSearchPhaseConfig(); localSearchPhaseConfig.setLocalSearchType(LocalSearchType.TABU_SEARCH); solverConfig.setPhaseConfigList(Arrays.asList(constructionHeuristicPhaseConfig, localSearchPhaseConfig)); return solverConfig; } }
@Test public void trackConstructionHeuristics() { SolverFactory<NQueens> solverFactory = SolverFactory.createFromXmlResource(NQueensApp.SOLVER_CONFIG); SolverConfig solverConfig = solverFactory.getSolverConfig(); ConstructionHeuristicPhaseConfig chConfig = new ConstructionHeuristicPhaseConfig(); chConfig.setValueSorterManner(valueSorterManner); chConfig.setEntitySorterManner(entitySorterManner); chConfig.setConstructionHeuristicType(constructionHeuristicType); solverConfig.setPhaseConfigList(Collections.<PhaseConfig>singletonList(chConfig)); NQueensGenerator generator = new NQueensGenerator(); NQueens problem = generator.createNQueens(8); NQueensStepTracker listener = new NQueensStepTracker(); DefaultSolver<NQueens> solver = (DefaultSolver<NQueens>) solverFactory.buildSolver(); solver.addPhaseLifecycleListener(listener); NQueens bestSolution = solver.solve(problem); assertNotNull(bestSolution); assertTrackingList(expectedCoordinates, listener.getTrackingList()); }