private void warmUpPopulate(Map<Future<SubSingleBenchmarkRunner>, SubSingleBenchmarkRunner> futureMap, ConcurrentMap<SolverBenchmarkResult, Integer> singleBenchmarkResultIndexMap, SolverBenchmarkResult[] solverBenchmarkResultArray, long timeLeftPerSolverConfig) { for (SolverBenchmarkResult solverBenchmarkResult : solverBenchmarkResultArray) { TerminationConfig originalTerminationConfig = solverBenchmarkResult.getSolverConfig().getTerminationConfig(); TerminationConfig tmpTerminationConfig = new TerminationConfig(); if (originalTerminationConfig != null) { tmpTerminationConfig.inherit(originalTerminationConfig); } tmpTerminationConfig.shortenTimeMillisSpentLimit(timeLeftPerSolverConfig); solverBenchmarkResult.getSolverConfig().setTerminationConfig(tmpTerminationConfig); Integer singleBenchmarkResultIndex = singleBenchmarkResultIndexMap.get(solverBenchmarkResult); singleBenchmarkResultIndex = (singleBenchmarkResultIndex == null) ? 0 : singleBenchmarkResultIndex % solverBenchmarkResult.getSingleBenchmarkResultList().size(); SingleBenchmarkResult singleBenchmarkResult = solverBenchmarkResult.getSingleBenchmarkResultList().get(singleBenchmarkResultIndex); // Just take the first subSingle, we don't need to warm up each one SubSingleBenchmarkRunner subSingleBenchmarkRunner = new SubSingleBenchmarkRunner( singleBenchmarkResult.getSubSingleBenchmarkResultList().get(0), true, solverConfigContext); Future<SubSingleBenchmarkRunner> future = warmUpExecutorCompletionService.submit(subSingleBenchmarkRunner); futureMap.put(future, subSingleBenchmarkRunner); singleBenchmarkResultIndexMap.put(solverBenchmarkResult, singleBenchmarkResultIndex + 1); } }
private static void restoreBenchmarkConfig(PlannerBenchmarkResult plannerBenchmarkResult, Map<ProblemBenchmarkResult, List<ProblemStatistic>> originalProblemStatisticMap, Map<SolverBenchmarkResult, WarmUpConfigBackup> warmUpConfigBackupMap) { for (SolverBenchmarkResult solverBenchmarkResult : plannerBenchmarkResult.getSolverBenchmarkResultList()) { WarmUpConfigBackup warmUpConfigBackup = warmUpConfigBackupMap.get(solverBenchmarkResult); TerminationConfig originalTerminationConfig = warmUpConfigBackup.getTerminationConfig(); solverBenchmarkResult.getSolverConfig().setTerminationConfig(originalTerminationConfig); for (SingleBenchmarkResult singleBenchmarkResult : solverBenchmarkResult.getSingleBenchmarkResultList()) { ProblemBenchmarkResult problemBenchmarkResult = singleBenchmarkResult.getProblemBenchmarkResult(); if (problemBenchmarkResult.getProblemStatisticList() == null || problemBenchmarkResult.getProblemStatisticList().size() <= 0) { problemBenchmarkResult.setProblemStatisticList(originalProblemStatisticMap.get(problemBenchmarkResult)); } for (SubSingleBenchmarkResult subSingleBenchmarkResult : singleBenchmarkResult.getSubSingleBenchmarkResultList()) { List<PureSubSingleStatistic> pureSubSingleStatisticList = warmUpConfigBackup.getPureSubSingleStatisticMap().get(subSingleBenchmarkResult); subSingleBenchmarkResult.setPureSubSingleStatisticList(pureSubSingleStatisticList); subSingleBenchmarkResult.initSubSingleStatisticMap(); } singleBenchmarkResult.initSubSingleStatisticMaps(); } } }
/** * 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()); ExhaustiveSearchPhaseConfig exhaustiveSearchPhaseConfig = new ExhaustiveSearchPhaseConfig(); exhaustiveSearchPhaseConfig.setExhaustiveSearchType(exhaustiveSearchType); solverConfig.setPhaseConfigList(Arrays.asList(exhaustiveSearchPhaseConfig)); return solverFactory; }
@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; }
protected SolverFactory<Solution_> buildSolverFactory() { SolverFactory<Solution_> solverFactory = SolverFactory.createFromXmlResource(solverConfig); // buildAndSolve() fills in minutesSpentLimit solverFactory.getSolverConfig().setTerminationConfig(new TerminationConfig()); if (MOVE_THREAD_COUNT_OVERRIDE != null) { solverFactory.getSolverConfig().setMoveThreadCount(MOVE_THREAD_COUNT_OVERRIDE); } return solverFactory; }
protected SolverFactory<Solution_> buildSolverFactory() { SolverFactory<Solution_> solverFactory = SolverFactory.createFromXmlResource(createSolverConfigResource()); SolverConfig solverConfig = solverFactory.getSolverConfig(); solverConfig.setDaemon(true); solverConfig.setTerminationConfig(new TerminationConfig().withMillisecondsSpentLimit(SPENT_LIMIT)); return solverFactory; }
protected PlannerBenchmarkFactory buildPlannerBenchmarkFactory() { SolverFactory<Object> solverFactory = SolverFactory.createFromXmlResource(createSolverConfigResource()); File benchmarkDirectory = new File("target/test/data"); PlannerBenchmarkFactory benchmarkFactory = PlannerBenchmarkFactory.createFromSolverFactory(solverFactory, benchmarkDirectory); PlannerBenchmarkConfig plannerBenchmarkConfig = benchmarkFactory.getPlannerBenchmarkConfig(); plannerBenchmarkConfig.setWarmUpSecondsSpentLimit(WARM_UP_SECONDS_SPENT); plannerBenchmarkConfig.setSolverBenchmarkConfigList(Collections.emptyList()); plannerBenchmarkConfig.setSolverBenchmarkBluePrintConfigList(Collections.singletonList( new SolverBenchmarkBluePrintConfig().withSolverBenchmarkBluePrintType( SolverBenchmarkBluePrintType.CONSTRUCTION_HEURISTIC_WITH_AND_WITHOUT_LOCAL_SEARCH))); long maximumSecondsSpentPerSolverBenchmark = MAXIMUM_SECONDS_SPENT / 2; SolverBenchmarkConfig inheritedSolverBenchmarkConfig = plannerBenchmarkConfig.getInheritedSolverBenchmarkConfig(); inheritedSolverBenchmarkConfig.getSolverConfig().setTerminationConfig( new TerminationConfig().withSecondsSpentLimit(maximumSecondsSpentPerSolverBenchmark)); return benchmarkFactory; }
protected Solver<CloudBalance> buildSolver() { SolverFactory<CloudBalance> solverFactory = SolverFactory.createFromXmlResource( CloudBalancingApp.SOLVER_CONFIG); solverFactory.getSolverConfig().setDaemon(true); solverFactory.getSolverConfig().setTerminationConfig(new TerminationConfig().withBestScoreFeasible(true)); return solverFactory.buildSolver(); }
protected SolverFactory<Solution_> buildSolverFactory(String bestScoreLimitString, EnvironmentMode environmentMode) { SolverFactory<Solution_> solverFactory = SolverFactory.createFromXmlResource(solverConfig); solverFactory.getSolverConfig().setEnvironmentMode(environmentMode); solverFactory.getSolverConfig().setTerminationConfig( new TerminationConfig().withBestScoreLimit(bestScoreLimitString)); solverFactory.getSolverConfig().setMoveThreadCount(moveThreadCount); return solverFactory; }
@Test public void benchmark() { SolverFactory<TennisSolution> solverFactory = SolverFactory.createFromXmlResource(TennisApp.SOLVER_CONFIG); PlannerBenchmarkFactory benchmarkFactory = PlannerBenchmarkFactory.createFromSolverFactory( solverFactory, new File("target/test/data/tennis")); benchmarkFactory.getPlannerBenchmarkConfig().getInheritedSolverBenchmarkConfig().getSolverConfig() .setTerminationConfig(new TerminationConfig().withScoreCalculationCountLimit(1000L)); TennisSolution problem = new TennisGenerator().createTennisSolution(); PlannerBenchmark plannerBenchmark = benchmarkFactory.buildPlannerBenchmark(problem); plannerBenchmark.benchmark(); }
@Test public void cloneSolverFactory() { SolverFactory<TestdataSolution> solverFactoryTemplate = SolverFactory.createFromXmlResource( "org/optaplanner/core/api/solver/testdataSolverConfig.xml"); solverFactoryTemplate.getSolverConfig().setTerminationConfig(new TerminationConfig()); SolverFactory<TestdataSolution> solverFactory1 = solverFactoryTemplate.cloneSolverFactory(); SolverFactory<TestdataSolution> solverFactory2 = solverFactoryTemplate.cloneSolverFactory(); assertNotSame(solverFactory1, solverFactory2); solverFactory1.getSolverConfig().getTerminationConfig().setMinutesSpentLimit(1L); solverFactory2.getSolverConfig().getTerminationConfig().setMinutesSpentLimit(2L); assertEquals((Long) 1L, solverFactory1.getSolverConfig().getTerminationConfig().getMinutesSpentLimit()); assertEquals((Long) 2L, solverFactory2.getSolverConfig().getTerminationConfig().getMinutesSpentLimit()); Solver<TestdataSolution> solver1 = solverFactory1.buildSolver(); Solver<TestdataSolution> solver2 = solverFactory2.buildSolver(); assertNotSame(solver1, solver2); }
@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; }
protected SolverFactory<Solution_> buildSolverFactory() { SolverFactory<Solution_> solverFactory = SolverFactory.createFromXmlResource(solverConfig); // buildAndSolve() fills in minutesSpentLimit solverFactory.getSolverConfig().setTerminationConfig(new TerminationConfig()); if (MOVE_THREAD_COUNT_OVERRIDE != null) { solverFactory.getSolverConfig().setMoveThreadCount(MOVE_THREAD_COUNT_OVERRIDE); } return solverFactory; }
@Override protected SolverFactory<Solution_> buildSolverFactory() { SolverFactory<Solution_> solverFactory = SolverFactory.createFromXmlResource(commonApp.getSolverConfig()); SolverConfig solverConfig = solverFactory.getSolverConfig(); solverConfig.setTerminationConfig(new TerminationConfig()); ExhaustiveSearchPhaseConfig exhaustiveSearchPhaseConfig = new ExhaustiveSearchPhaseConfig(); exhaustiveSearchPhaseConfig.setExhaustiveSearchType(exhaustiveSearchType); solverConfig.setPhaseConfigList(Arrays.asList(exhaustiveSearchPhaseConfig)); return solverFactory; }
public SolverConfig get() { SolverConfig solverConfig = new SolverConfig(); solverConfig.setScanAnnotatedClassesConfig(new ScanAnnotatedClassesConfig()); solverConfig.setTerminationConfig(create(config.getTermination())); solverConfig.setScoreDirectorFactoryConfig(create(config.getScoreDirectorFactoryConfig())); solverConfig.setPhaseConfigList(create(config.getPhaseConfigList())); return solverConfig; }
protected SolverFactory<Solution_> buildSolverFactory() { SolverFactory<Solution_> solverFactory = SolverFactory.createFromXmlResource(createSolverConfigResource()); SolverConfig solverConfig = solverFactory.getSolverConfig(); solverConfig.setDaemon(true); solverConfig.setTerminationConfig(new TerminationConfig().withMillisecondsSpentLimit(SPENT_LIMIT)); return solverFactory; }
protected Solver<CloudBalance> buildSolver() { SolverFactory<CloudBalance> solverFactory = SolverFactory.createFromXmlResource( CloudBalancingApp.SOLVER_CONFIG); solverFactory.getSolverConfig().setDaemon(true); solverFactory.getSolverConfig().setTerminationConfig(new TerminationConfig().withBestScoreFeasible(true)); return solverFactory.buildSolver(); }
protected SolverFactory<Solution_> buildSolverFactory(String bestScoreLimitString, EnvironmentMode environmentMode) { SolverFactory<Solution_> solverFactory = SolverFactory.createFromXmlResource(solverConfig); solverFactory.getSolverConfig().setEnvironmentMode(environmentMode); solverFactory.getSolverConfig().setTerminationConfig( new TerminationConfig().withBestScoreLimit(bestScoreLimitString)); solverFactory.getSolverConfig().setMoveThreadCount(moveThreadCount); return solverFactory; }
@Test public void benchmark() { SolverFactory<TennisSolution> solverFactory = SolverFactory.createFromXmlResource(TennisApp.SOLVER_CONFIG); PlannerBenchmarkFactory benchmarkFactory = PlannerBenchmarkFactory.createFromSolverFactory( solverFactory, new File("target/test/data/tennis")); benchmarkFactory.getPlannerBenchmarkConfig().getInheritedSolverBenchmarkConfig().getSolverConfig() .setTerminationConfig(new TerminationConfig().withScoreCalculationCountLimit(1000L)); TennisSolution problem = new TennisGenerator().createTennisSolution(); PlannerBenchmark plannerBenchmark = benchmarkFactory.buildPlannerBenchmark(problem); plannerBenchmark.benchmark(); }