From 1664f2d338b70bdba90ff6414a718912001f0409 Mon Sep 17 00:00:00 2001 From: muzuro Date: Tue, 1 Sep 2015 18:44:39 +0300 Subject: [PATCH 1/3] don`t build initial solution if algorithm has one --- .../java/jsprit/core/algorithm/PrettyAlgorithmBuilder.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) 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 41b33089..c394bf40 100644 --- a/jsprit-core/src/main/java/jsprit/core/algorithm/PrettyAlgorithmBuilder.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/PrettyAlgorithmBuilder.java @@ -136,7 +136,9 @@ public class PrettyAlgorithmBuilder { vra.addListener(new AlgorithmStartsListener() { @Override public void informAlgorithmStarts(VehicleRoutingProblem problem, VehicleRoutingAlgorithm algorithm, Collection solutions) { - solutions.add(new InsertionInitialSolutionFactory(iniInsertionStrategy, iniObjFunction).createSolution(vrp)); + if (solutions.isEmpty()) { + solutions.add(new InsertionInitialSolutionFactory(iniInsertionStrategy, iniObjFunction).createSolution(vrp)); + } } }); } From ea6fac5db32a2d72f9c4e869034dabf1ceebb0ad Mon Sep 17 00:00:00 2001 From: muzuro Date: Wed, 2 Sep 2015 20:59:52 +0300 Subject: [PATCH 2/3] ability to exclude unnecessary constraints --- .../ServiceLoadActivityLevelConstraint.java | 2 +- .../ServiceLoadRouteLevelConstraint.java | 2 +- .../core/algorithm/InitialRoutesTest.java | 54 +++++++++++++++++-- 3 files changed, 51 insertions(+), 7 deletions(-) diff --git a/jsprit-core/src/main/java/jsprit/core/problem/constraint/ServiceLoadActivityLevelConstraint.java b/jsprit-core/src/main/java/jsprit/core/problem/constraint/ServiceLoadActivityLevelConstraint.java index 03b7a029..c84dad6b 100644 --- a/jsprit-core/src/main/java/jsprit/core/problem/constraint/ServiceLoadActivityLevelConstraint.java +++ b/jsprit-core/src/main/java/jsprit/core/problem/constraint/ServiceLoadActivityLevelConstraint.java @@ -32,7 +32,7 @@ import jsprit.core.problem.solution.route.state.RouteAndActivityStateGetter; * @author schroeder * */ -class ServiceLoadActivityLevelConstraint implements HardActivityConstraint { +public class ServiceLoadActivityLevelConstraint implements HardActivityConstraint { private RouteAndActivityStateGetter stateManager; diff --git a/jsprit-core/src/main/java/jsprit/core/problem/constraint/ServiceLoadRouteLevelConstraint.java b/jsprit-core/src/main/java/jsprit/core/problem/constraint/ServiceLoadRouteLevelConstraint.java index 87c30fb2..4a660d1a 100644 --- a/jsprit-core/src/main/java/jsprit/core/problem/constraint/ServiceLoadRouteLevelConstraint.java +++ b/jsprit-core/src/main/java/jsprit/core/problem/constraint/ServiceLoadRouteLevelConstraint.java @@ -33,7 +33,7 @@ import jsprit.core.problem.solution.route.state.RouteAndActivityStateGetter; * @author stefan * */ -class ServiceLoadRouteLevelConstraint implements HardRouteConstraint { +public class ServiceLoadRouteLevelConstraint implements HardRouteConstraint { private RouteAndActivityStateGetter stateManager; diff --git a/jsprit-core/src/test/java/jsprit/core/algorithm/InitialRoutesTest.java b/jsprit-core/src/test/java/jsprit/core/algorithm/InitialRoutesTest.java index 4da27af3..53c8cb56 100644 --- a/jsprit-core/src/test/java/jsprit/core/algorithm/InitialRoutesTest.java +++ b/jsprit-core/src/test/java/jsprit/core/algorithm/InitialRoutesTest.java @@ -18,12 +18,27 @@ package jsprit.core.algorithm; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import java.util.Collection; +import java.util.List; + import jsprit.core.algorithm.box.GreedySchrimpfFactory; import jsprit.core.algorithm.box.Jsprit; +import jsprit.core.algorithm.box.Jsprit.Builder; import jsprit.core.algorithm.box.SchrimpfFactory; +import jsprit.core.algorithm.state.StateManager; +import jsprit.core.algorithm.state.UpdateEndLocationIfRouteIsOpen; +import jsprit.core.algorithm.state.UpdateVariableCosts; import jsprit.core.problem.AbstractActivity; import jsprit.core.problem.Location; import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.constraint.ConstraintManager; +import jsprit.core.problem.constraint.ConstraintManager.Priority; +import jsprit.core.problem.constraint.ServiceLoadActivityLevelConstraint; +import jsprit.core.problem.constraint.ServiceLoadRouteLevelConstraint; import jsprit.core.problem.io.VrpXMLReader; import jsprit.core.problem.job.Job; import jsprit.core.problem.job.Service; @@ -38,13 +53,9 @@ import jsprit.core.problem.vehicle.VehicleTypeImpl; import jsprit.core.reporting.SolutionPrinter; import jsprit.core.util.Coordinate; import jsprit.core.util.Solutions; + import org.junit.Test; -import java.util.Collection; -import java.util.List; - -import static org.junit.Assert.*; - public class InitialRoutesTest { @Test @@ -395,4 +406,37 @@ public class InitialRoutesTest { vra.searchSolutions(); assertTrue(true); } + + @Test + public void buildWithoutTimeConstraints() { + Service s1 = Service.Builder.newInstance("s1").setLocation(Location.newInstance(0,10)).addSizeDimension(0, 10).build(); + Service s2 = Service.Builder.newInstance("s2").setLocation(Location.newInstance(10,20)).addSizeDimension(0, 12).build(); + + VehicleTypeImpl vt = VehicleTypeImpl.Builder.newInstance("vt").addCapacityDimension(0, 15).build(); + VehicleImpl v = VehicleImpl.Builder.newInstance("v").setType(vt).setStartLocation(Location.newInstance(0,0)).build(); + + VehicleRoutingProblem vrp = VehicleRoutingProblem.Builder.newInstance().addJob(s1).addJob(s2).addVehicle(v).build(); + Builder algBuilder = Jsprit.Builder.newInstance(vrp).addCoreStateAndConstraintStuff(false); + + // only required constraints + StateManager stateManager = new StateManager(vrp); + ConstraintManager constraintManager = new ConstraintManager(vrp, stateManager); + constraintManager.addConstraint(new ServiceLoadRouteLevelConstraint(stateManager)); + constraintManager.addConstraint(new ServiceLoadActivityLevelConstraint(stateManager), Priority.LOW); + stateManager.updateLoadStates(); + stateManager.addStateUpdater(new UpdateEndLocationIfRouteIsOpen()); + stateManager.addStateUpdater(new UpdateVariableCosts(vrp.getActivityCosts(), vrp.getTransportCosts(), stateManager)); + + algBuilder.setStateAndConstraintManager(stateManager, constraintManager); + VehicleRoutingAlgorithm vra = algBuilder.buildAlgorithm(); + vra.setMaxIterations(20); + Collection searchSolutions = vra.searchSolutions(); + VehicleRoutingProblemSolution bestOf = Solutions.bestOf(searchSolutions); + + //ensure 2 routes + assertEquals(2, bestOf.getRoutes().size()); + + //ensure no time information in first service of first route + assertEquals(0, bestOf.getRoutes().iterator().next().getActivities().iterator().next().getArrTime(), 0.001); + } } From 53f92754660faed38be2b2b30a12f83c7d4f24fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20Schr=C3=B6der?= Date: Sat, 5 Sep 2015 07:46:48 +0200 Subject: [PATCH 3/3] rem logging related to #182 --- .../core/algorithm/recreate/RegretInsertionConcurrent.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/RegretInsertionConcurrent.java b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/RegretInsertionConcurrent.java index 83a87c17..0d303849 100644 --- a/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/RegretInsertionConcurrent.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/RegretInsertionConcurrent.java @@ -145,8 +145,6 @@ public class RegretInsertionConcurrent extends AbstractInsertionStrategy { Thread.currentThread().interrupt(); } catch (ExecutionException e) { - e.printStackTrace(); - logger.error("Exception", e); throw new RuntimeException(e); }