From aae0ec2328a3fd639924eb44675796e2eb67711b Mon Sep 17 00:00:00 2001 From: Kandel Irina Date: Thu, 23 Nov 2017 11:42:14 +0200 Subject: [PATCH 1/3] VehicleRoutingAlgorithms receive cost func in create --- .../algorithm/VehicleRoutingAlgorithms.java | 49 ++++++++++++------- .../io/algorithm/TestAlgorithmReader.java | 10 ++++ 2 files changed, 41 insertions(+), 18 deletions(-) diff --git a/jsprit-io/src/main/java/com/graphhopper/jsprit/io/algorithm/VehicleRoutingAlgorithms.java b/jsprit-io/src/main/java/com/graphhopper/jsprit/io/algorithm/VehicleRoutingAlgorithms.java index 07ebaa97..23a73527 100644 --- a/jsprit-io/src/main/java/com/graphhopper/jsprit/io/algorithm/VehicleRoutingAlgorithms.java +++ b/jsprit-io/src/main/java/com/graphhopper/jsprit/io/algorithm/VehicleRoutingAlgorithms.java @@ -364,11 +364,11 @@ public class VehicleRoutingAlgorithms { * @return {@link com.graphhopper.jsprit.core.algorithm.VehicleRoutingAlgorithm} */ public static VehicleRoutingAlgorithm createAlgorithm(final VehicleRoutingProblem vrp, final AlgorithmConfig algorithmConfig) { - return createAlgo(vrp, algorithmConfig.getXMLConfiguration(), 0, null); + return createAlgo(vrp, algorithmConfig.getXMLConfiguration(), 0, null, null); } public static VehicleRoutingAlgorithm createAlgorithm(final VehicleRoutingProblem vrp, int nThreads, final AlgorithmConfig algorithmConfig) { - return createAlgo(vrp, algorithmConfig.getXMLConfiguration(), nThreads, null); + return createAlgo(vrp, algorithmConfig.getXMLConfiguration(), nThreads, null, null); } /** @@ -382,14 +382,14 @@ public class VehicleRoutingAlgorithms { AlgorithmConfig algorithmConfig = new AlgorithmConfig(); AlgorithmConfigXmlReader xmlReader = new AlgorithmConfigXmlReader(algorithmConfig); xmlReader.read(configURL); - return createAlgo(vrp, algorithmConfig.getXMLConfiguration(), 0, null); + return createAlgo(vrp, algorithmConfig.getXMLConfiguration(), 0, null, null); } public static VehicleRoutingAlgorithm readAndCreateAlgorithm(final VehicleRoutingProblem vrp, int nThreads, final URL configURL) { AlgorithmConfig algorithmConfig = new AlgorithmConfig(); AlgorithmConfigXmlReader xmlReader = new AlgorithmConfigXmlReader(algorithmConfig); xmlReader.read(configURL); - return createAlgo(vrp, algorithmConfig.getXMLConfiguration(), nThreads, null); + return createAlgo(vrp, algorithmConfig.getXMLConfiguration(), nThreads, null, null); } /** @@ -403,28 +403,35 @@ public class VehicleRoutingAlgorithms { AlgorithmConfig algorithmConfig = new AlgorithmConfig(); AlgorithmConfigXmlReader xmlReader = new AlgorithmConfigXmlReader(algorithmConfig); xmlReader.read(configFileName); - return createAlgo(vrp, algorithmConfig.getXMLConfiguration(), 0, null); + return createAlgo(vrp, algorithmConfig.getXMLConfiguration(), 0, null, null); } public static VehicleRoutingAlgorithm readAndCreateAlgorithm(final VehicleRoutingProblem vrp, final String configFileName, StateManager stateManager) { AlgorithmConfig algorithmConfig = new AlgorithmConfig(); AlgorithmConfigXmlReader xmlReader = new AlgorithmConfigXmlReader(algorithmConfig); xmlReader.read(configFileName); - return createAlgo(vrp, algorithmConfig.getXMLConfiguration(), 0, stateManager); + return createAlgo(vrp, algorithmConfig.getXMLConfiguration(), 0, stateManager, null); } public static VehicleRoutingAlgorithm readAndCreateAlgorithm(final VehicleRoutingProblem vrp, int nThreads, final String configFileName, StateManager stateManager) { AlgorithmConfig algorithmConfig = new AlgorithmConfig(); AlgorithmConfigXmlReader xmlReader = new AlgorithmConfigXmlReader(algorithmConfig); xmlReader.read(configFileName); - return createAlgo(vrp, algorithmConfig.getXMLConfiguration(), nThreads, stateManager); + return createAlgo(vrp, algorithmConfig.getXMLConfiguration(), nThreads, stateManager, null); } public static VehicleRoutingAlgorithm readAndCreateAlgorithm(VehicleRoutingProblem vrp, int nThreads, String configFileName) { AlgorithmConfig algorithmConfig = new AlgorithmConfig(); AlgorithmConfigXmlReader xmlReader = new AlgorithmConfigXmlReader(algorithmConfig); xmlReader.read(configFileName); - return createAlgo(vrp, algorithmConfig.getXMLConfiguration(), nThreads, null); + return createAlgo(vrp, algorithmConfig.getXMLConfiguration(), nThreads, null, null); + } + + public static VehicleRoutingAlgorithm readAndCreateAlgorithm(VehicleRoutingProblem vrp, int nThreads, String configFileName, SolutionCostCalculator solutionCostCalculator) { + AlgorithmConfig algorithmConfig = new AlgorithmConfig(); + AlgorithmConfigXmlReader xmlReader = new AlgorithmConfigXmlReader(algorithmConfig); + xmlReader.read(configFileName); + return createAlgo(vrp, algorithmConfig.getXMLConfiguration(), nThreads, null, solutionCostCalculator); } private static class OpenRouteStateVerifier implements StateUpdater, ReverseActivityVisitor { @@ -459,7 +466,7 @@ public class VehicleRoutingAlgorithms { } - private static VehicleRoutingAlgorithm createAlgo(final VehicleRoutingProblem vrp, XMLConfiguration config, int nuOfThreads, StateManager stateMan) { + private static VehicleRoutingAlgorithm createAlgo(final VehicleRoutingProblem vrp, XMLConfiguration config, int nuOfThreads, StateManager stateMan, SolutionCostCalculator solutionCostCalculator) { //create state-manager final StateManager stateManager; if (stateMan != null) { @@ -485,7 +492,7 @@ public class VehicleRoutingAlgorithms { constraintManager.addSkillsConstraint(); constraintManager.addConstraint(new SwitchNotFeasible(stateManager)); - return readAndCreateAlgorithm(vrp, config, nuOfThreads, null, stateManager, constraintManager, true, true); + return readAndCreateAlgorithm(vrp, config, nuOfThreads, solutionCostCalculator, stateManager, constraintManager, true, true); } public static VehicleRoutingAlgorithm readAndCreateAlgorithm(final VehicleRoutingProblem vrp, AlgorithmConfig config, @@ -584,11 +591,17 @@ public class VehicleRoutingAlgorithms { stateManager.addStateUpdater(new UpdateActivityTimes(vrp.getTransportCosts(), activityPolicy, vrp.getActivityCosts())); stateManager.addStateUpdater(new UpdateVariableCosts(vrp.getActivityCosts(), vrp.getTransportCosts(), stateManager, activityPolicy)); - final SolutionCostCalculator costCalculator; - if (solutionCostCalculator == null) costCalculator = getDefaultCostCalculator(stateManager); - else costCalculator = solutionCostCalculator; PrettyAlgorithmBuilder prettyAlgorithmBuilder = PrettyAlgorithmBuilder.newInstance(vrp, vehicleFleetManager, stateManager, constraintManager); + final SolutionCostCalculator costCalculator; + if (solutionCostCalculator == null) { + costCalculator = getDefaultCostCalculator(stateManager); + } + else { + costCalculator = solutionCostCalculator; + prettyAlgorithmBuilder.withObjectiveFunction(solutionCostCalculator); + } + if(addCoreConstraints) prettyAlgorithmBuilder.addCoreStateAndConstraintStuff(); //construct initial solution creator @@ -873,7 +886,7 @@ public class VehicleRoutingAlgorithms { String initialNumberJobsToRemoveString = moduleConfig.getString("ruin.initRemoveJobs"); if (initialNumberJobsToRemoveString == null) throw new IllegalStateException("module.ruin.initRemoveJobs is missing."); int initialNumberJobsToRemove = Integer.valueOf(initialNumberJobsToRemoveString); - ruin = getClusterRuin(vrp, routeStates, definedClasses, ruinKey, initialNumberJobsToRemove); + ruin = getClusterRuin(vrp, routeStates, definedClasses, ruinKey, initialNumberJobsToRemove); } else throw new IllegalStateException("ruin[@name] " + ruin_name + " is not known. Use either randomRuin or radialRuin."); String insertionName = moduleConfig.getString("insertion[@name]"); @@ -916,12 +929,12 @@ public class VehicleRoutingAlgorithms { } private static RuinStrategy getClusterRuin(final VehicleRoutingProblem vrp, final StateManager routeStates, TypedMap definedClasses, ModKey modKey, int initialNumberJobsToRemove) { - JobNeighborhoods jobNeighborhoods = new JobNeighborhoodsFactory().createNeighborhoods(vrp, new AvgServiceAndShipmentDistance(vrp.getTransportCosts())); - RuinStrategyKey stratKey = new RuinStrategyKey(modKey); + JobNeighborhoods jobNeighborhoods = new JobNeighborhoodsFactory().createNeighborhoods(vrp, new AvgServiceAndShipmentDistance(vrp.getTransportCosts())); + RuinStrategyKey stratKey = new RuinStrategyKey(modKey); RuinStrategy ruin = definedClasses.get(stratKey); if (ruin == null) { - ruin = new ClusterRuinStrategyFactory(initialNumberJobsToRemove, jobNeighborhoods).createStrategy(vrp); - definedClasses.put(stratKey, ruin); + ruin = new ClusterRuinStrategyFactory(initialNumberJobsToRemove, jobNeighborhoods).createStrategy(vrp); + definedClasses.put(stratKey, ruin); } return ruin; } diff --git a/jsprit-io/src/test/java/com/graphhopper/jsprit/io/algorithm/TestAlgorithmReader.java b/jsprit-io/src/test/java/com/graphhopper/jsprit/io/algorithm/TestAlgorithmReader.java index 3c69ab6e..48209465 100644 --- a/jsprit-io/src/test/java/com/graphhopper/jsprit/io/algorithm/TestAlgorithmReader.java +++ b/jsprit-io/src/test/java/com/graphhopper/jsprit/io/algorithm/TestAlgorithmReader.java @@ -30,6 +30,7 @@ import com.graphhopper.jsprit.core.algorithm.selector.SelectBest; import com.graphhopper.jsprit.core.algorithm.selector.SolutionSelector; import com.graphhopper.jsprit.core.problem.VehicleRoutingProblem; import com.graphhopper.jsprit.core.problem.job.Job; +import com.graphhopper.jsprit.core.problem.solution.SolutionCostCalculator; import com.graphhopper.jsprit.core.problem.solution.VehicleRoutingProblemSolution; import com.graphhopper.jsprit.core.problem.solution.route.VehicleRoute; import com.graphhopper.jsprit.io.algorithm.VehicleRoutingAlgorithms.ModKey; @@ -42,6 +43,7 @@ import junit.framework.Assert; import org.apache.commons.configuration.ConfigurationException; import org.junit.Before; import org.junit.Test; +import org.mockito.Mockito; import java.util.ArrayList; import java.util.Collection; @@ -283,4 +285,12 @@ public class TestAlgorithmReader { } + @Test + public void testWithVehicleRoutingAlgorithm() { + SolutionCostCalculator solutionCostCalculator = Mockito.mock(SolutionCostCalculator.class); + VehicleRoutingAlgorithm vra = VehicleRoutingAlgorithms.readAndCreateAlgorithm(vrp, 10, getClass().getResource("algorithmConfig_withoutIterations.xml").getFile(), solutionCostCalculator); + vra.getObjectiveFunction().equals(solutionCostCalculator); + } + + } From a83bed51c56d743a2e39d1ad20cb15757a3db732 Mon Sep 17 00:00:00 2001 From: Kandel Irina Date: Thu, 23 Nov 2017 11:59:17 +0200 Subject: [PATCH 2/3] fixes --- .../io/algorithm/VehicleRoutingAlgorithms.java | 4 ++-- .../jsprit/io/algorithm/TestAlgorithmReader.java | 15 ++++++++++++++- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/jsprit-io/src/main/java/com/graphhopper/jsprit/io/algorithm/VehicleRoutingAlgorithms.java b/jsprit-io/src/main/java/com/graphhopper/jsprit/io/algorithm/VehicleRoutingAlgorithms.java index 23a73527..e1bee0cd 100644 --- a/jsprit-io/src/main/java/com/graphhopper/jsprit/io/algorithm/VehicleRoutingAlgorithms.java +++ b/jsprit-io/src/main/java/com/graphhopper/jsprit/io/algorithm/VehicleRoutingAlgorithms.java @@ -427,11 +427,11 @@ public class VehicleRoutingAlgorithms { return createAlgo(vrp, algorithmConfig.getXMLConfiguration(), nThreads, null, null); } - public static VehicleRoutingAlgorithm readAndCreateAlgorithm(VehicleRoutingProblem vrp, int nThreads, String configFileName, SolutionCostCalculator solutionCostCalculator) { + public static VehicleRoutingAlgorithm readAndCreateAlgorithm(VehicleRoutingProblem vrp, int nThreads, String configFileName, StateManager stateMan, SolutionCostCalculator solutionCostCalculator) { AlgorithmConfig algorithmConfig = new AlgorithmConfig(); AlgorithmConfigXmlReader xmlReader = new AlgorithmConfigXmlReader(algorithmConfig); xmlReader.read(configFileName); - return createAlgo(vrp, algorithmConfig.getXMLConfiguration(), nThreads, null, solutionCostCalculator); + return createAlgo(vrp, algorithmConfig.getXMLConfiguration(), nThreads, stateMan, solutionCostCalculator); } private static class OpenRouteStateVerifier implements StateUpdater, ReverseActivityVisitor { diff --git a/jsprit-io/src/test/java/com/graphhopper/jsprit/io/algorithm/TestAlgorithmReader.java b/jsprit-io/src/test/java/com/graphhopper/jsprit/io/algorithm/TestAlgorithmReader.java index 48209465..17613627 100644 --- a/jsprit-io/src/test/java/com/graphhopper/jsprit/io/algorithm/TestAlgorithmReader.java +++ b/jsprit-io/src/test/java/com/graphhopper/jsprit/io/algorithm/TestAlgorithmReader.java @@ -28,6 +28,7 @@ import com.graphhopper.jsprit.core.algorithm.ruin.RuinStrategy; import com.graphhopper.jsprit.core.algorithm.ruin.listener.RuinListener; import com.graphhopper.jsprit.core.algorithm.selector.SelectBest; import com.graphhopper.jsprit.core.algorithm.selector.SolutionSelector; +import com.graphhopper.jsprit.core.algorithm.state.StateManager; import com.graphhopper.jsprit.core.problem.VehicleRoutingProblem; import com.graphhopper.jsprit.core.problem.job.Job; import com.graphhopper.jsprit.core.problem.solution.SolutionCostCalculator; @@ -50,6 +51,9 @@ import java.util.Collection; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.doNothing; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; public class TestAlgorithmReader { @@ -288,8 +292,17 @@ public class TestAlgorithmReader { @Test public void testWithVehicleRoutingAlgorithm() { SolutionCostCalculator solutionCostCalculator = Mockito.mock(SolutionCostCalculator.class); - VehicleRoutingAlgorithm vra = VehicleRoutingAlgorithms.readAndCreateAlgorithm(vrp, 10, getClass().getResource("algorithmConfig_withoutIterations.xml").getFile(), solutionCostCalculator); + StateManager stateMan = Mockito.mock(StateManager.class); + doNothing().when(stateMan).updateLoadStates(); + doNothing().when(stateMan).updateTimeWindowStates(); + doNothing().when(stateMan).updateSkillStates(); + + VehicleRoutingAlgorithm vra = VehicleRoutingAlgorithms.readAndCreateAlgorithm(vrp, 10, getClass().getResource("algorithmConfig_withoutIterations.xml").getFile(), stateMan, solutionCostCalculator); vra.getObjectiveFunction().equals(solutionCostCalculator); + + verify(stateMan, times(2)).updateLoadStates(); + verify(stateMan, times(2)).updateTimeWindowStates(); + verify(stateMan, times(2)).updateSkillStates(); } From beff8794718b1cd915128c9e437d128f01c03304 Mon Sep 17 00:00:00 2001 From: kobyb Date: Sun, 26 Nov 2017 10:03:52 +0200 Subject: [PATCH 3/3] CR --- .../jsprit/io/algorithm/VehicleRoutingAlgorithms.java | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/jsprit-io/src/main/java/com/graphhopper/jsprit/io/algorithm/VehicleRoutingAlgorithms.java b/jsprit-io/src/main/java/com/graphhopper/jsprit/io/algorithm/VehicleRoutingAlgorithms.java index e1bee0cd..400167a6 100644 --- a/jsprit-io/src/main/java/com/graphhopper/jsprit/io/algorithm/VehicleRoutingAlgorithms.java +++ b/jsprit-io/src/main/java/com/graphhopper/jsprit/io/algorithm/VehicleRoutingAlgorithms.java @@ -413,11 +413,11 @@ public class VehicleRoutingAlgorithms { return createAlgo(vrp, algorithmConfig.getXMLConfiguration(), 0, stateManager, null); } - public static VehicleRoutingAlgorithm readAndCreateAlgorithm(final VehicleRoutingProblem vrp, int nThreads, final String configFileName, StateManager stateManager) { + public static VehicleRoutingAlgorithm readAndCreateAlgorithm(final VehicleRoutingProblem vrp, int nThreads, final String configFileName, StateManager stateManager, SolutionCostCalculator solutionCostCalculator) { AlgorithmConfig algorithmConfig = new AlgorithmConfig(); AlgorithmConfigXmlReader xmlReader = new AlgorithmConfigXmlReader(algorithmConfig); xmlReader.read(configFileName); - return createAlgo(vrp, algorithmConfig.getXMLConfiguration(), nThreads, stateManager, null); + return createAlgo(vrp, algorithmConfig.getXMLConfiguration(), nThreads, stateManager, solutionCostCalculator); } public static VehicleRoutingAlgorithm readAndCreateAlgorithm(VehicleRoutingProblem vrp, int nThreads, String configFileName) { @@ -427,13 +427,6 @@ public class VehicleRoutingAlgorithms { return createAlgo(vrp, algorithmConfig.getXMLConfiguration(), nThreads, null, null); } - public static VehicleRoutingAlgorithm readAndCreateAlgorithm(VehicleRoutingProblem vrp, int nThreads, String configFileName, StateManager stateMan, SolutionCostCalculator solutionCostCalculator) { - AlgorithmConfig algorithmConfig = new AlgorithmConfig(); - AlgorithmConfigXmlReader xmlReader = new AlgorithmConfigXmlReader(algorithmConfig); - xmlReader.read(configFileName); - return createAlgo(vrp, algorithmConfig.getXMLConfiguration(), nThreads, stateMan, solutionCostCalculator); - } - private static class OpenRouteStateVerifier implements StateUpdater, ReverseActivityVisitor { private End end;