diff --git a/optaplanner-core/src/main/java/org/optaplanner/core/config/localsearch/decider/acceptor/AcceptorConfig.java b/optaplanner-core/src/main/java/org/optaplanner/core/config/localsearch/decider/acceptor/AcceptorConfig.java index f0bfcc31251..be8f5ad3963 100644 --- a/optaplanner-core/src/main/java/org/optaplanner/core/config/localsearch/decider/acceptor/AcceptorConfig.java +++ b/optaplanner-core/src/main/java/org/optaplanner/core/config/localsearch/decider/acceptor/AcceptorConfig.java @@ -505,8 +505,8 @@ public Acceptor buildAcceptor(HeuristicConfigPolicy configPolicy) { + ") currently requires a simulatedAnnealingStartingTemperature (" + simulatedAnnealingStartingTemperature + ")."); } - acceptor.setStartingTemperature(configPolicy.getScoreDefinition() - .parseScore(simulatedAnnealingStartingTemperature)); + acceptor.setStartingTemperature( + configPolicy.getScoreDefinition().parseScore(simulatedAnnealingStartingTemperature)); acceptorList.add(acceptor); } if ((acceptorTypeList != null && acceptorTypeList.contains(AcceptorType.LATE_ACCEPTANCE)) @@ -520,25 +520,23 @@ public Acceptor buildAcceptor(HeuristicConfigPolicy configPolicy) { || greatDelugeWaterLevelIncrementScore != null || greatDelugeWaterLevelIncrementRatio != null) { GreatDelugeAcceptor acceptor = new GreatDelugeAcceptor(); - - if (greatDelugeWaterLevelIncrementScore != null && greatDelugeWaterLevelIncrementRatio != null) { - throw new IllegalArgumentException("The greatDelugeWaterLevelIncrementScore (" - + greatDelugeWaterLevelIncrementScore + ") and greatDelugeWaterLevelIncrementRatio (" - + greatDelugeWaterLevelIncrementRatio + ") cannot be both non null."); - } - if (greatDelugeInitialWaterLevel != null) { - acceptor.setInitialWaterLevel(configPolicy.getScoreDefinition() - .parseScore(greatDelugeInitialWaterLevel)); + acceptor.setInitialWaterLevel( + configPolicy.getScoreDefinition().parseScore(greatDelugeInitialWaterLevel)); } - if (greatDelugeWaterLevelIncrementScore != null) { - acceptor.setWaterLevelIncrementScore(configPolicy.getScoreDefinition() - .parseScore(greatDelugeWaterLevelIncrementScore)); - } - - if (greatDelugeWaterLevelIncrementRatio != null) { + if (greatDelugeWaterLevelIncrementRatio != null) { + throw new IllegalArgumentException("The acceptor cannot have both " + + "greatDelugeWaterLevelIncrementScore (" + greatDelugeWaterLevelIncrementScore + + ") and greatDelugeWaterLevelIncrementRatio (" + greatDelugeWaterLevelIncrementRatio + ")."); + } + acceptor.setWaterLevelIncrementScore( + configPolicy.getScoreDefinition().parseScore(greatDelugeWaterLevelIncrementScore)); + } else if (greatDelugeWaterLevelIncrementRatio != null) { acceptor.setWaterLevelIncrementRatio(greatDelugeWaterLevelIncrementRatio); + } else { + // Based on Tomas Muller's work. TODO Confirm with benchmarker across our examples/datasets + acceptor.setWaterLevelIncrementRatio(0.00_000_005); } acceptorList.add(acceptor); } diff --git a/optaplanner-core/src/main/java/org/optaplanner/core/impl/localsearch/decider/acceptor/greatdeluge/GreatDelugeAcceptor.java b/optaplanner-core/src/main/java/org/optaplanner/core/impl/localsearch/decider/acceptor/greatdeluge/GreatDelugeAcceptor.java index b8ad5c02c37..70ccd78a1ae 100644 --- a/optaplanner-core/src/main/java/org/optaplanner/core/impl/localsearch/decider/acceptor/greatdeluge/GreatDelugeAcceptor.java +++ b/optaplanner-core/src/main/java/org/optaplanner/core/impl/localsearch/decider/acceptor/greatdeluge/GreatDelugeAcceptor.java @@ -9,13 +9,10 @@ public class GreatDelugeAcceptor extends AbstractAcceptor { - // Good value to come out from. Source: https://github.com/UniTime/cpsolver from Tomas Muller - private static final double DEFAULT_WATER_LEVEL_INCREMENT_RATIO = 0.00_000_005; + private Score initialWaterLevel; - private Score initialWaterLevel = null; - - private Score waterLevelIncrementScore = null; - private Double waterLevelIncrementRatio = DEFAULT_WATER_LEVEL_INCREMENT_RATIO; + private Score waterLevelIncrementScore; + private Double waterLevelIncrementRatio; private Score currentWaterLevel = null; @@ -50,7 +47,7 @@ public void phaseStarted(LocalSearchPhaseScope phaseScope) { for (double initialLevelLevel : ScoreUtils.extractLevelDoubles(initialWaterLevel)) { if (initialLevelLevel < 0.0) { throw new IllegalArgumentException("The initial level (" + initialWaterLevel - + ") cannot have negative level (" + initialLevelLevel + ")."); + + ") cannot have negative level (" + initialLevelLevel + ")."); } } currentWaterLevel = initialWaterLevel; @@ -62,7 +59,7 @@ public void phaseStarted(LocalSearchPhaseScope phaseScope) { @Override public void phaseEnded(LocalSearchPhaseScope phaseScope) { super.phaseEnded(phaseScope); - initialWaterLevel = null; + currentWaterLevel = null; } @Override diff --git a/optaplanner-examples/src/main/resources/org/optaplanner/examples/cloudbalancing/optional/benchmark/cloudBalancingBenchmarkConfig.xml b/optaplanner-examples/src/main/resources/org/optaplanner/examples/cloudbalancing/optional/benchmark/cloudBalancingBenchmarkConfig.xml index c869237ec4b..a0dd3cfcf4a 100644 --- a/optaplanner-examples/src/main/resources/org/optaplanner/examples/cloudbalancing/optional/benchmark/cloudBalancingBenchmarkConfig.xml +++ b/optaplanner-examples/src/main/resources/org/optaplanner/examples/cloudbalancing/optional/benchmark/cloudBalancingBenchmarkConfig.xml @@ -55,6 +55,94 @@ + + EVERY_LOCAL_SEARCH_TYPE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -63,88 +151,4 @@ - - - First Fit - - - FIRST_FIT - - - - - First Fit Decreasing - - - FIRST_FIT_DECREASING - - - - - - Tabu Search - - - FIRST_FIT_DECREASING - - - - - - - - - - 7 - - - 1000 - - - - - - Simulated Annealing - - - FIRST_FIT_DECREASING - - - - - - - - - - 0hard/400soft - - - 4 - - - - - - Late Acceptance - - - FIRST_FIT_DECREASING - - - - - - - - - - 400 - - - 4 - - - - diff --git a/optaplanner-examples/src/main/resources/org/optaplanner/examples/vehiclerouting/benchmark/vehicleRoutingBenchmarkConfig.xml b/optaplanner-examples/src/main/resources/org/optaplanner/examples/vehiclerouting/benchmark/vehicleRoutingBenchmarkConfig.xml index 8baee292884..63a436e8e2d 100644 --- a/optaplanner-examples/src/main/resources/org/optaplanner/examples/vehiclerouting/benchmark/vehicleRoutingBenchmarkConfig.xml +++ b/optaplanner-examples/src/main/resources/org/optaplanner/examples/vehiclerouting/benchmark/vehicleRoutingBenchmarkConfig.xml @@ -12,97 +12,97 @@ data/vehiclerouting/import/belgium/basic/air/belgium-n500-k20.vrp data/vehiclerouting/import/belgium/basic/air/belgium-n1000-k20.vrp data/vehiclerouting/import/belgium/basic/air/belgium-n2750-k55.vrp - data/vehiclerouting/import/belgium/basic/road-km/belgium-road-km-n50-k10.vrp - data/vehiclerouting/import/belgium/basic/road-km/belgium-road-km-n100-k10.vrp - data/vehiclerouting/import/belgium/basic/road-km/belgium-road-km-n500-k20.vrp + + + - data/vehiclerouting/import/belgium/basic/road-time/belgium-road-time-n50-k10.vrp - data/vehiclerouting/import/belgium/basic/road-time/belgium-road-time-n100-k10.vrp - data/vehiclerouting/import/belgium/basic/road-time/belgium-road-time-n500-k20.vrp + + + - data/vehiclerouting/import/usa/basic/air/usa-n100-k10.vrp - data/vehiclerouting/import/usa/basic/air/usa-n500-k20.vrp - data/vehiclerouting/import/usa/basic/air/usa-n1000-k20.vrp - data/vehiclerouting/import/usa/basic/air/usa-n5000-k100.vrp - data/vehiclerouting/import/usa/basic/air/usa-n10000-k100.vrp - data/vehiclerouting/import/usa/basic/air/usa-n50000-k500.vrp - data/vehiclerouting/import/usa/basic/air/usa-n100000-k500.vrp + + + + + + + - data/vehiclerouting/import/vrpweb/basic/air/A-n32-k5.vrp - data/vehiclerouting/import/vrpweb/basic/air/A-n33-k5.vrp - data/vehiclerouting/import/vrpweb/basic/air/A-n33-k6.vrp - data/vehiclerouting/import/vrpweb/basic/air/A-n34-k5.vrp - data/vehiclerouting/import/vrpweb/basic/air/A-n36-k5.vrp - data/vehiclerouting/import/vrpweb/basic/air/A-n37-k5.vrp - data/vehiclerouting/import/vrpweb/basic/air/A-n37-k6.vrp - data/vehiclerouting/import/vrpweb/basic/air/A-n38-k5.vrp - data/vehiclerouting/import/vrpweb/basic/air/A-n39-k5.vrp - data/vehiclerouting/import/vrpweb/basic/air/A-n39-k6.vrp - data/vehiclerouting/import/vrpweb/basic/air/A-n44-k7.vrp - data/vehiclerouting/import/vrpweb/basic/air/A-n45-k6.vrp - data/vehiclerouting/import/vrpweb/basic/air/A-n45-k7.vrp - data/vehiclerouting/import/vrpweb/basic/air/A-n46-k7.vrp - data/vehiclerouting/import/vrpweb/basic/air/A-n48-k7.vrp - data/vehiclerouting/import/vrpweb/basic/air/A-n53-k7.vrp - data/vehiclerouting/import/vrpweb/basic/air/A-n54-k7.vrp - data/vehiclerouting/import/vrpweb/basic/air/A-n55-k9.vrp - data/vehiclerouting/import/vrpweb/basic/air/A-n60-k9.vrp - data/vehiclerouting/import/vrpweb/basic/air/A-n61-k9.vrp - data/vehiclerouting/import/vrpweb/basic/air/A-n62-k8.vrp - data/vehiclerouting/import/vrpweb/basic/air/A-n63-k10.vrp - data/vehiclerouting/import/vrpweb/basic/air/A-n63-k9.vrp - data/vehiclerouting/import/vrpweb/basic/air/A-n64-k9.vrp - data/vehiclerouting/import/vrpweb/basic/air/A-n65-k9.vrp - data/vehiclerouting/import/vrpweb/basic/air/A-n69-k9.vrp - data/vehiclerouting/import/vrpweb/basic/air/A-n80-k10.vrp - data/vehiclerouting/import/vrpweb/basic/air/F-n135-k7.vrp - data/vehiclerouting/import/vrpweb/basic/air/F-n45-k4.vrp - data/vehiclerouting/import/vrpweb/basic/air/F-n72-k4.vrp - data/vehiclerouting/import/vrpweb/timewindowed/air/Solomon_025_C101.vrp - data/vehiclerouting/import/vrpweb/timewindowed/air/Solomon_025_C201.vrp - data/vehiclerouting/import/vrpweb/timewindowed/air/Solomon_025_R101.vrp - data/vehiclerouting/import/vrpweb/timewindowed/air/Solomon_025_R201.vrp - data/vehiclerouting/import/vrpweb/timewindowed/air/Solomon_025_RC101.vrp - data/vehiclerouting/import/vrpweb/timewindowed/air/Solomon_025_RC201.vrp - data/vehiclerouting/import/vrpweb/timewindowed/air/Solomon_100_C101.vrp - data/vehiclerouting/import/vrpweb/timewindowed/air/Solomon_100_C201.vrp - data/vehiclerouting/import/vrpweb/timewindowed/air/Solomon_100_R101.vrp - data/vehiclerouting/import/vrpweb/timewindowed/air/Solomon_100_R201.vrp - data/vehiclerouting/import/vrpweb/timewindowed/air/Solomon_100_RC101.vrp - data/vehiclerouting/import/vrpweb/timewindowed/air/Solomon_100_RC201.vrp - data/vehiclerouting/import/vrpweb/timewindowed/air/Homberger_0200_C1_2_1.vrp - data/vehiclerouting/import/vrpweb/timewindowed/air/Homberger_0200_C2_2_1.vrp - data/vehiclerouting/import/vrpweb/timewindowed/air/Homberger_0200_R1_2_1.vrp - data/vehiclerouting/import/vrpweb/timewindowed/air/Homberger_0200_R2_2_1.vrp - data/vehiclerouting/import/vrpweb/timewindowed/air/Homberger_0200_RC1_2_1.vrp - data/vehiclerouting/import/vrpweb/timewindowed/air/Homberger_0200_RC2_2_1.vrp - data/vehiclerouting/import/vrpweb/timewindowed/air/Homberger_0400_C1_4_1.vrp - data/vehiclerouting/import/vrpweb/timewindowed/air/Homberger_0400_C2_4_1.vrp - data/vehiclerouting/import/vrpweb/timewindowed/air/Homberger_0400_R1_4_1.vrp - data/vehiclerouting/import/vrpweb/timewindowed/air/Homberger_0400_R2_4_1.vrp - data/vehiclerouting/import/vrpweb/timewindowed/air/Homberger_0400_RC1_4_1.vrp - data/vehiclerouting/import/vrpweb/timewindowed/air/Homberger_0400_RC2_4_1.vrp - data/vehiclerouting/import/vrpweb/timewindowed/air/Homberger_0600_C1_6_1.vrp - data/vehiclerouting/import/vrpweb/timewindowed/air/Homberger_0600_C2_6_1.vrp - data/vehiclerouting/import/vrpweb/timewindowed/air/Homberger_0600_R1_6_1.vrp - data/vehiclerouting/import/vrpweb/timewindowed/air/Homberger_0600_R2_6_1.vrp - data/vehiclerouting/import/vrpweb/timewindowed/air/Homberger_0600_RC2_6_1.vrp - data/vehiclerouting/import/vrpweb/timewindowed/air/Homberger_0600_RC1_6_1.vrp - data/vehiclerouting/import/vrpweb/timewindowed/air/Homberger_0800_C1_8_1.vrp - data/vehiclerouting/import/vrpweb/timewindowed/air/Homberger_0800_C2_8_1.vrp - data/vehiclerouting/import/vrpweb/timewindowed/air/Homberger_0800_R1_8_1.vrp - data/vehiclerouting/import/vrpweb/timewindowed/air/Homberger_0800_R2_8_1.vrp - data/vehiclerouting/import/vrpweb/timewindowed/air/Homberger_0800_RC1_8_1.vrp - data/vehiclerouting/import/vrpweb/timewindowed/air/Homberger_0800_RC2_8_1.vrp - data/vehiclerouting/import/vrpweb/timewindowed/air/Homberger_1000_C110_1.vrp - data/vehiclerouting/import/vrpweb/timewindowed/air/Homberger_1000_C210_1.vrp - data/vehiclerouting/import/vrpweb/timewindowed/air/Homberger_1000_R110_1.vrp - data/vehiclerouting/import/vrpweb/timewindowed/air/Homberger_1000_R210_1.vrp - data/vehiclerouting/import/vrpweb/timewindowed/air/Homberger_1000_RC110_1.vrp - data/vehiclerouting/import/vrpweb/timewindowed/air/Homberger_1000_RC210_1.vrp + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -134,6 +134,10 @@ + + + + First Fit