From 51c14afd737bff2dd3bacd9e208467aa65ac3d9d Mon Sep 17 00:00:00 2001 From: oblonski <4sschroeder@gmail.com> Date: Wed, 10 Dec 2014 21:03:30 +0100 Subject: [PATCH] enable search with different insertion strategies --- .../jsprit/core/algorithm/PrettyAlgorithmBuilder.java | 6 +++++- .../java/jsprit/core/algorithm/SearchStrategyManager.java | 2 +- .../core/algorithm/io/VehicleRoutingAlgorithms.java | 3 +++ jsprit-examples/input/algorithmConfig.xml | 6 +++--- .../input/algorithmConfig_greedyWithRegret.xml | 8 ++++---- 5 files changed, 16 insertions(+), 9 deletions(-) diff --git a/jsprit-core/src/main/java/jsprit/core/algorithm/PrettyAlgorithmBuilder.java b/jsprit-core/src/main/java/jsprit/core/algorithm/PrettyAlgorithmBuilder.java index 7d33fb35..618e6fe4 100644 --- a/jsprit-core/src/main/java/jsprit/core/algorithm/PrettyAlgorithmBuilder.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/PrettyAlgorithmBuilder.java @@ -135,10 +135,14 @@ public class PrettyAlgorithmBuilder { } private void searchSchrimpfAndRegister(VehicleRoutingAlgorithm vra) { + boolean schrimpfAdded = false; for(SearchStrategy strategy : vra.getSearchStrategyManager().getStrategies()){ SolutionAcceptor acceptor = strategy.getSolutionAcceptor(); if(acceptor instanceof SchrimpfAcceptance){ - vra.addListener((SchrimpfAcceptance)acceptor); + if(!schrimpfAdded) { + vra.addListener((SchrimpfAcceptance) acceptor); + schrimpfAdded = true; + } } } } diff --git a/jsprit-core/src/main/java/jsprit/core/algorithm/SearchStrategyManager.java b/jsprit-core/src/main/java/jsprit/core/algorithm/SearchStrategyManager.java index 4ddfd6ba..da1eb06b 100644 --- a/jsprit-core/src/main/java/jsprit/core/algorithm/SearchStrategyManager.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/SearchStrategyManager.java @@ -70,7 +70,7 @@ public class SearchStrategyManager { throw new IllegalStateException("strategy is null. make sure adding a valid strategy."); } if(id2index.keySet().contains(strategy.getId())){ - throw new IllegalStateException("strategyId " + strategy.getId() + " already in use"); + throw new IllegalStateException("strategyId " + strategy.getId() + " already in use. replace strateId in your config file or code with a unique strategy id"); } if(weight < 0.0){ throw new IllegalStateException("weight is lower than zero."); diff --git a/jsprit-core/src/main/java/jsprit/core/algorithm/io/VehicleRoutingAlgorithms.java b/jsprit-core/src/main/java/jsprit/core/algorithm/io/VehicleRoutingAlgorithms.java index 4bedad44..4a84a42a 100644 --- a/jsprit-core/src/main/java/jsprit/core/algorithm/io/VehicleRoutingAlgorithms.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/io/VehicleRoutingAlgorithms.java @@ -612,6 +612,9 @@ public class VehicleRoutingAlgorithms { if(termination != null) metaAlgorithm.addTerminationCriterion(termination); } } + for(PrioritizedVRAListener l : algorithmListeners){ + metaAlgorithm.getAlgorithmListeners().add(l); + } return metaAlgorithm; } diff --git a/jsprit-examples/input/algorithmConfig.xml b/jsprit-examples/input/algorithmConfig.xml index 3d82d3a7..764bd6b6 100755 --- a/jsprit-examples/input/algorithmConfig.xml +++ b/jsprit-examples/input/algorithmConfig.xml @@ -31,7 +31,7 @@ 1 - + 0.2 @@ -49,7 +49,7 @@ 0.2 - + @@ -65,7 +65,7 @@ 0.2 - + diff --git a/jsprit-examples/input/algorithmConfig_greedyWithRegret.xml b/jsprit-examples/input/algorithmConfig_greedyWithRegret.xml index 05b7ac50..17bc0aaf 100755 --- a/jsprit-examples/input/algorithmConfig_greedyWithRegret.xml +++ b/jsprit-examples/input/algorithmConfig_greedyWithRegret.xml @@ -32,7 +32,7 @@ 1 - + @@ -40,13 +40,13 @@ 0.5 - + 0.5 - + @@ -54,7 +54,7 @@ 0.3 - + 0.5