@Before public void createUninitializedSolutions() { checkRunTurtleTests(); final VehicleRoutingImporter importer = new VehicleRoutingImporter(); for (int i = 0; i < REPETITION_COUNT; i++) { File dataSetFile = new File(CommonApp.determineDataDir(vehicleRoutingApp.getDataDirName()), DATA_SET); VehicleRoutingSolution solution = importer.readSolution(dataSetFile); vehicleRoutingSolutions[i] = solution; } solverFactory = SolverFactory.createFromXmlResource(vehicleRoutingApp.getSolverConfig()); SolverConfig solverConfig = solverFactory.getSolverConfig(); solverConfig.getPhaseConfigList().forEach(phaseConfig -> { if (LocalSearchPhaseConfig.class.isAssignableFrom(phaseConfig.getClass())) { phaseConfig.setTerminationConfig(new TerminationConfig().withStepCountLimit(STEP_LIMIT)); } }); solverConfig.setMoveThreadCount(MOVE_THREAD_COUNT); solverConfig.setEnvironmentMode(EnvironmentMode.REPRODUCIBLE); }
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 scoreNotEqual() { SolverFactory<TestdataScoreNotEqualSolution> factory = PlannerTestUtils.buildSolverFactory( TestdataScoreNotEqualSolution.class, TestdataEntity.class); SolverConfig solverConfig = factory.getSolverConfig(); solverConfig.setEnvironmentMode(EnvironmentMode.NON_INTRUSIVE_FULL_ASSERT); TestdataScoreNotEqualSolution solution = new TestdataScoreNotEqualSolution(); expectedException.expect(IllegalStateException.class); expectedException.expectMessage("Cloning corruption: the original's score "); factory.buildSolver().solve(solution); }
@Test public void entitiesNotCloned() { SolverFactory<TestdataEntitiesNotClonedSolution> factory = PlannerTestUtils.buildSolverFactory( TestdataEntitiesNotClonedSolution.class, TestdataEntity.class); SolverConfig solverConfig = factory.getSolverConfig(); solverConfig.setEnvironmentMode(EnvironmentMode.NON_INTRUSIVE_FULL_ASSERT); TestdataEntitiesNotClonedSolution solution = new TestdataEntitiesNotClonedSolution(); expectedException.expect(IllegalStateException.class); expectedException.expectMessage("Cloning corruption: the same entity "); factory.buildSolver().solve(solution); }
@Test public void clonedUsingCustomCloner() { SolverFactory<TestdataCorrectlyClonedSolution> factory = PlannerTestUtils.buildSolverFactory( TestdataCorrectlyClonedSolution.class, TestdataEntity.class); SolverConfig solverConfig = factory.getSolverConfig(); solverConfig.setEnvironmentMode(EnvironmentMode.NON_INTRUSIVE_FULL_ASSERT); TestdataCorrectlyClonedSolution solution = new TestdataCorrectlyClonedSolution(); TestdataCorrectlyClonedSolution solved = factory.buildSolver().solve(solution); assertTrue("Custom solution cloner was not used", solved.isClonedByCustomCloner()); }
@Test public void scoreNotCloned() { // RHBRMS-1430 Possible NPE when custom cloner doesn't clone score SolverFactory<TestdataScoreNotClonedSolution> factory = PlannerTestUtils.buildSolverFactory( TestdataScoreNotClonedSolution.class, TestdataEntity.class); SolverConfig solverConfig = factory.getSolverConfig(); solverConfig.setEnvironmentMode(EnvironmentMode.NON_INTRUSIVE_FULL_ASSERT); TestdataScoreNotClonedSolution solution = new TestdataScoreNotClonedSolution(); expectedException.expect(IllegalStateException.class); expectedException.expectMessage("Cloning corruption: the original's score "); factory.buildSolver().solve(solution); }
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; }
@Before public void createUninitializedSolutions() { checkRunTurtleTests(); final VehicleRoutingImporter importer = new VehicleRoutingImporter(); for (int i = 0; i < REPETITION_COUNT; i++) { File dataSetFile = new File(CommonApp.determineDataDir(vehicleRoutingApp.getDataDirName()), DATA_SET); VehicleRoutingSolution solution = importer.readSolution(dataSetFile); vehicleRoutingSolutions[i] = solution; } solverFactory = SolverFactory.createFromXmlResource(vehicleRoutingApp.getSolverConfig()); SolverConfig solverConfig = solverFactory.getSolverConfig(); solverConfig.getPhaseConfigList().forEach(phaseConfig -> { if (LocalSearchPhaseConfig.class.isAssignableFrom(phaseConfig.getClass())) { phaseConfig.setTerminationConfig(new TerminationConfig().withStepCountLimit(STEP_LIMIT)); } }); solverConfig.setMoveThreadCount(MOVE_THREAD_COUNT); solverConfig.setEnvironmentMode(EnvironmentMode.REPRODUCIBLE); }
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; }
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; }
config.setEnvironmentMode( builder.isValidated() ? EnvironmentMode.FULL_ASSERT : EnvironmentMode.REPRODUCIBLE);