@Test public void buildBendableScoreDefinition() { ScoreDirectorFactoryConfig config = new ScoreDirectorFactoryConfig(); config.setScoreDefinitionType(ScoreDefinitionType.BENDABLE); config.setBendableHardLevelsSize(2); config.setBendableSoftLevelsSize(3); BendableScoreDefinition scoreDefinition = (BendableScoreDefinition) config.buildDeprecatedScoreDefinition(); assertEquals(2, scoreDefinition.getHardLevelsSize()); assertEquals(3, scoreDefinition.getSoftLevelsSize()); }
if (scoreDefinitionClass == null && scoreDefinitionType == null && bendableHardLevelsSize == null && bendableSoftLevelsSize == null) { scoreDefinitionClass = inheritedConfig.getScoreDefinitionClass(); scoreDefinitionType = inheritedConfig.getScoreDefinitionType(); bendableHardLevelsSize = inheritedConfig.getBendableHardLevelsSize(); bendableSoftLevelsSize = inheritedConfig.getBendableSoftLevelsSize(); easyScoreCalculatorClass, inheritedConfig.getEasyScoreCalculatorClass()); easyScoreCalculatorCustomProperties = ConfigUtils.inheritMergeableMapProperty( easyScoreCalculatorCustomProperties, inheritedConfig.getEasyScoreCalculatorCustomProperties()); incrementalScoreCalculatorClass = ConfigUtils.inheritOverwritableProperty( incrementalScoreCalculatorClass, inheritedConfig.getIncrementalScoreCalculatorClass()); incrementalScoreCalculatorCustomProperties = ConfigUtils.inheritMergeableMapProperty( incrementalScoreCalculatorCustomProperties, inheritedConfig.getIncrementalScoreCalculatorCustomProperties()); ksessionName = ConfigUtils.inheritOverwritableProperty( ksessionName, inheritedConfig.getKsessionName()); kieBase = ConfigUtils.inheritOverwritableProperty( kieBase, inheritedConfig.getKieBase()); scoreDrlList = ConfigUtils.inheritMergeableListProperty( scoreDrlList, inheritedConfig.getScoreDrlList()); scoreDrlFileList = ConfigUtils.inheritMergeableListProperty( scoreDrlFileList, inheritedConfig.getScoreDrlFileList()); kieBaseConfigurationProperties = ConfigUtils.inheritMergeableMapProperty( kieBaseConfigurationProperties, inheritedConfig.getKieBaseConfigurationProperties()); initializingScoreTrend = ConfigUtils.inheritOverwritableProperty( initializingScoreTrend, inheritedConfig.getInitializingScoreTrend()); assertionScoreDirectorFactory, inheritedConfig.getAssertionScoreDirectorFactory()); generateDroolsTestOnError = ConfigUtils.inheritOverwritableProperty(
@Test public void incrementalScoreCalculatorWithCustomProperties() { ScoreDirectorFactoryConfig config = new ScoreDirectorFactoryConfig(); config.setIncrementalScoreCalculatorClass(TestCustomPropertiesIncrementalScoreCalculator.class); HashMap<String, String> customProperties = new HashMap<>(); customProperties.put("stringProperty", "string 1"); customProperties.put("intProperty", "7"); config.setIncrementalScoreCalculatorCustomProperties(customProperties); IncrementalScoreDirector<TestdataSolution> scoreDirector = (IncrementalScoreDirector<TestdataSolution>) config .buildScoreDirectorFactory(new SolverConfigContext(), EnvironmentMode.REPRODUCIBLE, TestdataSolution.buildSolutionDescriptor()) .buildScoreDirector(); TestCustomPropertiesIncrementalScoreCalculator scoreCalculator = (TestCustomPropertiesIncrementalScoreCalculator) scoreDirector.getIncrementalScoreCalculator(); assertEquals("string 1", scoreCalculator.getStringProperty()); assertEquals(7, scoreCalculator.getIntProperty()); }
@Test public void testGenerateDroolsTestOption() { ScoreDirectorFactoryConfig config = new ScoreDirectorFactoryConfig(); assertNull(config.isGenerateDroolsTestOnError()); config.setGenerateDroolsTestOnError(true); assertTrue(config.isGenerateDroolsTestOnError()); config.setGenerateDroolsTestOnError(Boolean.FALSE); assertFalse(config.isGenerateDroolsTestOnError()); config.setGenerateDroolsTestOnError(null); assertNull(config.isGenerateDroolsTestOnError()); }
@Test public void buildSimpleScoreDefinition() { ScoreDirectorFactoryConfig config = new ScoreDirectorFactoryConfig(); config.setScoreDefinitionType(ScoreDefinitionType.SIMPLE); ScoreDefinition scoreDefinition = config.buildDeprecatedScoreDefinition(); assertInstanceOf(SimpleScoreDefinition.class, scoreDefinition); }
@Test public void buildSolverEmptyWithKieContainer() throws IOException, ReflectiveOperationException { ReleaseId releaseId = deployTestdataKjar( "buildSolverWithReleaseId", "org/optaplanner/core/api/solver/kieContainerNamedKsessionKmodule.xml", null); KieContainer kieContainer = kieServices.newKieContainer(releaseId); SolverFactory<?> solverFactory = SolverFactory.createEmptyFromKieContainer(kieContainer); SolverConfig solverConfig = solverFactory.getSolverConfig(); solverConfig.setSolutionClass( kieContainer.getClassLoader().loadClass("testdata.kjar.ClassloadedTestdataSolution")); solverConfig.setEntityClassList(Collections.singletonList( kieContainer.getClassLoader().loadClass("testdata.kjar.ClassloadedTestdataEntity"))); ScoreDirectorFactoryConfig scoreDirectorFactoryConfig = new ScoreDirectorFactoryConfig(); scoreDirectorFactoryConfig.setKsessionName("testdataKsession"); solverConfig.setScoreDirectorFactoryConfig(scoreDirectorFactoryConfig); Solver<?> solver = solverFactory.buildSolver(); assertNotNull(solver); assertNewKieSessionSucceeds(solver); }
@Test public void easyScoreCalculatorWithCustomProperties() { ScoreDirectorFactoryConfig config = new ScoreDirectorFactoryConfig(); config.setEasyScoreCalculatorClass(TestCustomPropertiesEasyScoreCalculator.class); HashMap<String, String> customProperties = new HashMap<>(); customProperties.put("stringProperty", "string 1"); customProperties.put("intProperty", "7"); config.setEasyScoreCalculatorCustomProperties(customProperties); EasyScoreDirector<TestdataSolution> scoreDirector = (EasyScoreDirector<TestdataSolution>) config .buildScoreDirectorFactory(new SolverConfigContext(), EnvironmentMode.REPRODUCIBLE, TestdataSolution.buildSolutionDescriptor()) .buildScoreDirector(); TestCustomPropertiesEasyScoreCalculator scoreCalculator = (TestCustomPropertiesEasyScoreCalculator) scoreDirector.getEasyScoreCalculator(); assertEquals("string 1", scoreCalculator.getStringProperty()); assertEquals(7, scoreCalculator.getIntProperty()); }
protected Solution_ buildAndSolve(SolverFactory<Solution_> solverFactory, EnvironmentMode environmentMode, Solution_ problem, long maximumMinutesSpent) { SolverConfig solverConfig = solverFactory.getSolverConfig(); solverConfig.getTerminationConfig().setMinutesSpentLimit(maximumMinutesSpent); solverConfig.setEnvironmentMode(environmentMode); Class<? extends EasyScoreCalculator> easyScoreCalculatorClass = overwritingEasyScoreCalculatorClass(); if (easyScoreCalculatorClass != null && environmentMode.isAsserted()) { ScoreDirectorFactoryConfig assertionScoreDirectorFactoryConfig = new ScoreDirectorFactoryConfig(); assertionScoreDirectorFactoryConfig.setEasyScoreCalculatorClass(easyScoreCalculatorClass); solverConfig.getScoreDirectorFactoryConfig().setAssertionScoreDirectorFactory( assertionScoreDirectorFactoryConfig); } Solver<Solution_> solver = solverFactory.buildSolver(); Solution_ bestSolution = solver.solve(problem); return bestSolution; }
/** * 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(); }
new ScoreDirectorFactoryConfig(); scoreConfig.setScoreDefinitionType(ScoreDefinitionType.HARD_SOFT_LONG); scoreConfig.setIncrementalScoreCalculatorClass(ScoreCalculator.class); config.setScoreDirectorFactoryConfig(scoreConfig);
public <Solution_> InnerScoreDirectorFactory<Solution_> buildScoreDirectorFactory( SolverConfigContext configContext, EnvironmentMode environmentMode, SolutionDescriptor<Solution_> solutionDescriptor) { AbstractScoreDirectorFactory<Solution_> easyScoreDirectorFactory = buildEasyScoreDirectorFactory(solutionDescriptor); AbstractScoreDirectorFactory<Solution_> incrementalScoreDirectorFactory = buildIncrementalScoreDirectorFactory(solutionDescriptor); AbstractScoreDirectorFactory<Solution_> droolsScoreDirectorFactory = buildDroolsScoreDirectorFactory(configContext, solutionDescriptor); AbstractScoreDirectorFactory<Solution_> scoreDirectorFactory; if (easyScoreDirectorFactory != null) { if (assertionScoreDirectorFactory.getAssertionScoreDirectorFactory() != null) { throw new IllegalArgumentException("A assertionScoreDirectorFactory (" + assertionScoreDirectorFactory + ") cannot have a non-null assertionScoreDirectorFactory (" + assertionScoreDirectorFactory.getAssertionScoreDirectorFactory() + ")."); if (assertionScoreDirectorFactory.getScoreDefinitionClass() != null || assertionScoreDirectorFactory.getScoreDefinitionType() != null) { throw new IllegalArgumentException("A assertionScoreDirectorFactory (" + assertionScoreDirectorFactory + ") must reuse the scoreDefinition of its parent." + assertionScoreDirectorFactory.buildScoreDirectorFactory(configContext, EnvironmentMode.NON_REPRODUCIBLE, solutionDescriptor));
public static <Solution_> SolverFactory<Solution_> buildSolverFactory( Class<Solution_> solutionClass, Class<?>... entityClasses) { SolverFactory<Solution_> solverFactory = SolverFactory.createEmpty(); SolverConfig solverConfig = solverFactory.getSolverConfig(); solverConfig.setSolutionClass(solutionClass); solverConfig.setEntityClassList(Arrays.asList(entityClasses)); ScoreDirectorFactoryConfig scoreDirectorFactoryConfig = new ScoreDirectorFactoryConfig(); scoreDirectorFactoryConfig.setEasyScoreCalculatorClass(DummySimpleScoreEasyScoreCalculator.class); solverConfig.setScoreDirectorFactoryConfig(scoreDirectorFactoryConfig); List<PhaseConfig> phaseConfigList = new ArrayList<>(2); phaseConfigList.add(new ConstructionHeuristicPhaseConfig()); LocalSearchPhaseConfig localSearchPhaseConfig = new LocalSearchPhaseConfig(); localSearchPhaseConfig.setTerminationConfig(new TerminationConfig().withStepCountLimit(TERMINATION_STEP_COUNT_LIMIT)); phaseConfigList.add(localSearchPhaseConfig); solverConfig.setPhaseConfigList(phaseConfigList); return solverFactory; }
SolutionDescriptor<Solution_> solutionDescriptor = buildSolutionDescriptor(configContext); ScoreDirectorFactoryConfig scoreDirectorFactoryConfig_ = scoreDirectorFactoryConfig == null ? new ScoreDirectorFactoryConfig() : scoreDirectorFactoryConfig; InnerScoreDirectorFactory<Solution_> scoreDirectorFactory = scoreDirectorFactoryConfig_.buildScoreDirectorFactory( configContext, environmentMode_, solutionDescriptor); boolean constraintMatchEnabledPreference = environmentMode_.isAsserted();
if (solverFactory.getSolverConfig().getScoreDirectorFactoryConfig().getKsessionName() == null) { solverFactory.getSolverConfig().getScoreDirectorFactoryConfig().setKsessionName(kieProject.getDefaultKieSession().getName());
public static <Solution_> SolverFactory<Solution_> buildSolverFactoryWithDroolsScoreDirector( Class<Solution_> solutionClass, Class<?>... entityClasses) { SolverFactory<Solution_> solverFactory = buildSolverFactory(solutionClass, entityClasses); SolverConfig solverConfig = solverFactory.getSolverConfig(); ScoreDirectorFactoryConfig scoreDirectorFactoryConfig = solverConfig.getScoreDirectorFactoryConfig(); scoreDirectorFactoryConfig.setEasyScoreCalculatorClass(null); scoreDirectorFactoryConfig.setScoreDrlList(Collections.singletonList( "org/optaplanner/core/impl/score/dummySimpleScoreDroolsScoreRules.drl")); return solverFactory; }
private ScoreDirectorFactoryConfigModel create(final ScoreDirectorFactoryConfig scoreDirectorFactoryConfig) { if (scoreDirectorFactoryConfig == null) { return new ScoreDirectorFactoryConfigModel(); } else { ScoreDirectorFactoryConfigModel model = new ScoreDirectorFactoryConfigModel(); model.setKSessionName(scoreDirectorFactoryConfig.getKsessionName()); return model; } }
public <Solution_> SolutionDescriptor<Solution_> buildSolutionDescriptor(SolverConfigContext configContext) { ScoreDefinition deprecatedScoreDefinition = scoreDirectorFactoryConfig == null ? null : scoreDirectorFactoryConfig.buildDeprecatedScoreDefinition(); if (scanAnnotatedClassesConfig != null) { if (solutionClass != null || entityClassList != null) { throw new IllegalArgumentException("The solver configuration with scanAnnotatedClasses (" + scanAnnotatedClassesConfig + ") cannot also have a solutionClass (" + solutionClass + ") or an entityClass (" + entityClassList + ").\n" + " Please decide between automatic scanning or manual referencing."); } return scanAnnotatedClassesConfig.buildSolutionDescriptor(configContext, deprecatedScoreDefinition); } else { if (solutionClass == null) { throw new IllegalArgumentException("The solver configuration must have a solutionClass (" + solutionClass + "), if it has no scanAnnotatedClasses (" + scanAnnotatedClassesConfig + ")."); } if (ConfigUtils.isEmptyCollection(entityClassList)) { throw new IllegalArgumentException( "The solver configuration must have at least 1 entityClass (" + entityClassList + "), if it has no scanAnnotatedClasses (" + scanAnnotatedClassesConfig + ")."); } return SolutionDescriptor.buildSolutionDescriptor((Class<Solution_>) solutionClass, entityClassList, deprecatedScoreDefinition); } }
private ScoreDirectorFactoryConfig create(final ScoreDirectorFactoryConfigModel scoreDirectorFactoryConfig) { if (scoreDirectorFactoryConfig == null) { return new ScoreDirectorFactoryConfig(); } else { ScoreDirectorFactoryConfig config = new ScoreDirectorFactoryConfig(); config.setKsessionName(scoreDirectorFactoryConfig.getKSessionName()); return config; } }
protected Solution_ buildAndSolve(SolverFactory<Solution_> solverFactory, EnvironmentMode environmentMode, Solution_ problem, long maximumMinutesSpent) { SolverConfig solverConfig = solverFactory.getSolverConfig(); solverConfig.getTerminationConfig().setMinutesSpentLimit(maximumMinutesSpent); solverConfig.setEnvironmentMode(environmentMode); Class<? extends EasyScoreCalculator> easyScoreCalculatorClass = overwritingEasyScoreCalculatorClass(); if (easyScoreCalculatorClass != null && environmentMode.isAsserted()) { ScoreDirectorFactoryConfig assertionScoreDirectorFactoryConfig = new ScoreDirectorFactoryConfig(); assertionScoreDirectorFactoryConfig.setEasyScoreCalculatorClass(easyScoreCalculatorClass); solverConfig.getScoreDirectorFactoryConfig().setAssertionScoreDirectorFactory( assertionScoreDirectorFactoryConfig); } Solver<Solution_> solver = solverFactory.buildSolver(); Solution_ bestSolution = solver.solve(problem); return bestSolution; }
/** * 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(); }