From fe4b4ae4ca4c6c56762c3c1e34583c81fc5dff3c Mon Sep 17 00:00:00 2001 From: oblonski <4sschroeder@gmail.com> Date: Mon, 17 Feb 2014 22:34:23 +0100 Subject: [PATCH] modified Pickup and Delivery to deal with multiple cap-dims --- .../jsprit/core/problem/job/Delivery.java | 24 +++++++++++++- .../java/jsprit/core/problem/job/Pickup.java | 22 ++++++++++++- .../java/jsprit/core/problem/job/Service.java | 6 ++++ .../ShipmentInsertionCalculatorTest.java | 3 ++ .../jsprit/core/problem/job/DeliveryTest.java | 32 +++++++++++++++++++ .../jsprit/core/problem/job/PickupTest.java | 32 +++++++++++++++++++ 6 files changed, 117 insertions(+), 2 deletions(-) diff --git a/jsprit-core/src/main/java/jsprit/core/problem/job/Delivery.java b/jsprit-core/src/main/java/jsprit/core/problem/job/Delivery.java index f1a0c368..ba996ad0 100644 --- a/jsprit-core/src/main/java/jsprit/core/problem/job/Delivery.java +++ b/jsprit-core/src/main/java/jsprit/core/problem/job/Delivery.java @@ -16,6 +16,8 @@ ******************************************************************************/ package jsprit.core.problem.job; +import jsprit.core.problem.job.Pickup.Builder; + /** * Delivery extends Service and is intended to model a Service where smth is UNLOADED (i.e. delivered) from a transport unit. * @@ -33,9 +35,24 @@ public class Delivery extends Service{ * @param size * @return builder * @throws IllegalArgumentException if size < 0 or id is null + * @deprecated use .newInstance(String id) instead, and add a capacity dimension + * with dimensionIndex='your index' and and dimsionValue=size to the returned builder */ + @Deprecated public static Builder newInstance(String id, int size){ - return new Builder(id,size); + Builder builder = new Builder(id,size); + builder.addCapacityDimension(0, size); + return builder; + } + + /** + * Returns a new instance of builder that builds a delivery. + * + * @param id + * @return the builder + */ + public static Builder newInstance(String id){ + return new Builder(id); } /** @@ -48,6 +65,11 @@ public class Delivery extends Service{ Builder(String id, int size) { super(id, size); } + + Builder(String id) { + super(id); + } + /** * Builds Delivery. * diff --git a/jsprit-core/src/main/java/jsprit/core/problem/job/Pickup.java b/jsprit-core/src/main/java/jsprit/core/problem/job/Pickup.java index 47e5fc70..d407b789 100644 --- a/jsprit-core/src/main/java/jsprit/core/problem/job/Pickup.java +++ b/jsprit-core/src/main/java/jsprit/core/problem/job/Pickup.java @@ -16,6 +16,7 @@ ******************************************************************************/ package jsprit.core.problem.job; + /** * Pickup extends Service and is intended to model a Service where smth is LOADED (i.e. picked up) to a transport unit. * @@ -33,9 +34,24 @@ public class Pickup extends Service { * @param size * @return builder * @throws IllegalArgumentException if size < 0 or id is null + * @deprecated use .newInstance(String id) instead, and add a capacity dimension + * with dimensionIndex='your index' and and dimsionValue=size to the returned builder */ + @Deprecated public static Builder newInstance(String id, int size){ - return new Builder(id,size); + Builder builder = new Builder(id,size); + builder.addCapacityDimension(0, size); + return builder; + } + + /** + * Returns a new instance of builder that builds a pickup. + * + * @param id + * @return the builder + */ + public static Builder newInstance(String id){ + return new Builder(id); } /** @@ -49,6 +65,10 @@ public class Pickup extends Service { super(id, size); } + Builder(String id) { + super(id); + } + /** * Builds Pickup. * diff --git a/jsprit-core/src/main/java/jsprit/core/problem/job/Service.java b/jsprit-core/src/main/java/jsprit/core/problem/job/Service.java index a0b722f1..a802604a 100644 --- a/jsprit-core/src/main/java/jsprit/core/problem/job/Service.java +++ b/jsprit-core/src/main/java/jsprit/core/problem/job/Service.java @@ -60,6 +60,12 @@ public class Service implements Job { return builder; } + /** + * Returns a new instance of builder that builds a service. + * + * @param id + * @return the builder + */ public static Builder newInstance(String id){ return new Builder(id); } diff --git a/jsprit-core/src/test/java/jsprit/core/algorithm/recreate/ShipmentInsertionCalculatorTest.java b/jsprit-core/src/test/java/jsprit/core/algorithm/recreate/ShipmentInsertionCalculatorTest.java index 1f3fe66c..f0de23a6 100644 --- a/jsprit-core/src/test/java/jsprit/core/algorithm/recreate/ShipmentInsertionCalculatorTest.java +++ b/jsprit-core/src/test/java/jsprit/core/algorithm/recreate/ShipmentInsertionCalculatorTest.java @@ -20,6 +20,7 @@ import jsprit.core.problem.cost.VehicleRoutingTransportCosts; import jsprit.core.problem.driver.Driver; import jsprit.core.problem.driver.DriverImpl; import jsprit.core.problem.job.Pickup; +import jsprit.core.problem.job.Service; import jsprit.core.problem.job.Shipment; import jsprit.core.problem.misc.JobInsertionContext; import jsprit.core.problem.solution.route.VehicleRoute; @@ -240,8 +241,10 @@ public class ShipmentInsertionCalculatorTest { ServiceInsertionCalculator serviceInsertionCalc = new ServiceInsertionCalculator(routingCosts, activityInsertionCostsCalculator, constraintManager); ShipmentInsertionCalculator insertionCalculator = new ShipmentInsertionCalculator(routingCosts, activityInsertionCostsCalculator, constraintManager); switcher.put(Pickup.class, serviceInsertionCalc); + switcher.put(Service.class, serviceInsertionCalc); switcher.put(Shipment.class, insertionCalculator); +// Service service = Service.Builder.newInstance("pick", 1).setLocationId("5,5").build(); Pickup service = (Pickup)Pickup.Builder.newInstance("pick", 1).setLocationId("5,5").build(); InsertionData iData = switcher.getInsertionData(route, service, vehicle, 0, DriverImpl.noDriver(), Double.MAX_VALUE); // routeActVisitor.visit(route); diff --git a/jsprit-core/src/test/java/jsprit/core/problem/job/DeliveryTest.java b/jsprit-core/src/test/java/jsprit/core/problem/job/DeliveryTest.java index 1ca82c45..b1ebd637 100644 --- a/jsprit-core/src/test/java/jsprit/core/problem/job/DeliveryTest.java +++ b/jsprit-core/src/test/java/jsprit/core/problem/job/DeliveryTest.java @@ -1,5 +1,7 @@ package jsprit.core.problem.job; +import static org.junit.Assert.assertEquals; + import org.junit.Test; public class DeliveryTest { @@ -8,5 +10,35 @@ public class DeliveryTest { public void whenNeitherLocationIdNorCoordIsSet_itThrowsException(){ Delivery.Builder.newInstance("p", 0).build(); } + + @Test + public void whenAddingTwoCapDimension_nuOfDimsShouldBeTwo(){ + Delivery one = (Delivery)Delivery.Builder.newInstance("s").setLocationId("foofoo") + .addCapacityDimension(0,2) + .addCapacityDimension(1,4) + .build(); + assertEquals(2,one.getCapacity().getNuOfDimensions()); + assertEquals(2,one.getCapacity().get(0)); + assertEquals(4,one.getCapacity().get(1)); + + } + + @Test + public void whenPickupIsBuiltWithoutSpecifyingCapacity_itShouldHvCapWithOneDimAndDimValOfZero(){ + Delivery one = (Delivery)Delivery.Builder.newInstance("s").setLocationId("foofoo") + .build(); + assertEquals(1,one.getCapacity().getNuOfDimensions()); + assertEquals(0,one.getCapacity().get(0)); + } + + @Test + public void whenPickupIsBuiltWithConstructorWhereSizeIsSpecified_capacityShouldBeSetCorrectly(){ + Delivery one = (Delivery)Delivery.Builder.newInstance("s",1).setLocationId("foofoo") + .build(); + assertEquals(1,one.getCapacityDemand()); + assertEquals(1,one.getCapacity().getNuOfDimensions()); + assertEquals(1,one.getCapacity().get(0)); + } + } diff --git a/jsprit-core/src/test/java/jsprit/core/problem/job/PickupTest.java b/jsprit-core/src/test/java/jsprit/core/problem/job/PickupTest.java index 73b60ed5..1377cf7d 100644 --- a/jsprit-core/src/test/java/jsprit/core/problem/job/PickupTest.java +++ b/jsprit-core/src/test/java/jsprit/core/problem/job/PickupTest.java @@ -1,5 +1,7 @@ package jsprit.core.problem.job; +import static org.junit.Assert.assertEquals; + import org.junit.Test; public class PickupTest { @@ -8,5 +10,35 @@ public class PickupTest { public void whenNeitherLocationIdNorCoordIsSet_itThrowsException(){ Pickup.Builder.newInstance("p", 0).build(); } + + @Test + public void whenAddingTwoCapDimension_nuOfDimsShouldBeTwo(){ + Pickup one = (Pickup)Pickup.Builder.newInstance("s").setLocationId("foofoo") + .addCapacityDimension(0,2) + .addCapacityDimension(1,4) + .build(); + assertEquals(2,one.getCapacity().getNuOfDimensions()); + assertEquals(2,one.getCapacity().get(0)); + assertEquals(4,one.getCapacity().get(1)); + + } + + @Test + public void whenPickupIsBuiltWithoutSpecifyingCapacity_itShouldHvCapWithOneDimAndDimValOfZero(){ + Pickup one = (Pickup)Pickup.Builder.newInstance("s").setLocationId("foofoo") + .build(); + assertEquals(1,one.getCapacity().getNuOfDimensions()); + assertEquals(0,one.getCapacity().get(0)); + } + + @Test + public void whenPickupIsBuiltWithConstructorWhereSizeIsSpecified_capacityShouldBeSetCorrectly(){ + Pickup one = (Pickup)Pickup.Builder.newInstance("s",1).setLocationId("foofoo") + .build(); + assertEquals(1,one.getCapacityDemand()); + assertEquals(1,one.getCapacity().getNuOfDimensions()); + assertEquals(1,one.getCapacity().get(0)); + } + }