From 8f749c9fdfcba146660132624414c333fc3a19e8 Mon Sep 17 00:00:00 2001 From: Stefan Schroeder <4sschroeder@gmail.com> Date: Thu, 23 Jan 2014 12:07:19 +0100 Subject: [PATCH 1/2] bugfix issue #78 --- .../jsprit/core/problem/io/VrpXMLReader.java | 34 ++-- .../src/main/resources/vrp_xml_schema.xsd | 8 +- .../core/problem/io/VrpReaderV2Test.java | 151 +++++++++++++++++- .../resources/finiteVrpForReaderV2Test.xml | 39 ++++- 4 files changed, 203 insertions(+), 29 deletions(-) diff --git a/jsprit-core/src/main/java/jsprit/core/problem/io/VrpXMLReader.java b/jsprit-core/src/main/java/jsprit/core/problem/io/VrpXMLReader.java index e29e9cc8..ab4628da 100644 --- a/jsprit-core/src/main/java/jsprit/core/problem/io/VrpXMLReader.java +++ b/jsprit-core/src/main/java/jsprit/core/problem/io/VrpXMLReader.java @@ -316,11 +316,14 @@ public class VrpXMLReader{ int cap = getCap(shipmentConfig); Shipment.Builder builder = Shipment.Builder.newInstance(id, cap); + //pickup-locationId String pickupLocationId = shipmentConfig.getString("pickup.locationId"); - builder.setPickupLocation(pickupLocationId); + if(pickupLocationId != null){ + builder.setPickupLocation(pickupLocationId); + } + //pickup-coord Coordinate pickupCoord = getCoord(shipmentConfig,"pickup."); - if(pickupCoord != null){ builder.setPickupCoord(pickupCoord); if(pickupLocationId != null){ @@ -331,17 +334,23 @@ public class VrpXMLReader{ builder.setPickupLocation(pickupCoord.toString()); } } - + //pickup-tw String pickupTWStart = shipmentConfig.getString("pickup.timeWindows.timeWindow(0).start"); String pickupTWEnd = shipmentConfig.getString("pickup.timeWindows.timeWindow(0).end"); - TimeWindow pickupTW = TimeWindow.newInstance(Double.parseDouble(pickupTWStart), Double.parseDouble(pickupTWEnd)); - builder.setPickupTimeWindow(pickupTW); + if(pickupTWStart != null && pickupTWEnd != null){ + TimeWindow pickupTW = TimeWindow.newInstance(Double.parseDouble(pickupTWStart), Double.parseDouble(pickupTWEnd)); + builder.setPickupTimeWindow(pickupTW); + } + + //delivery-locaitonId String deliveryLocationId = shipmentConfig.getString("delivery.locationId"); - builder.setDeliveryLocation(deliveryLocationId); + if(deliveryLocationId != null){ + builder.setDeliveryLocation(deliveryLocationId); + } + //delivery-coord Coordinate deliveryCoord = getCoord(shipmentConfig,"delivery."); - if(deliveryCoord != null){ builder.setDeliveryCoord(deliveryCoord); if(deliveryLocationId != null){ @@ -349,14 +358,17 @@ public class VrpXMLReader{ } else{ vrpBuilder.addLocation(deliveryCoord.toString(),deliveryCoord); - builder.setPickupLocation(deliveryCoord.toString()); + builder.setDeliveryLocation(deliveryCoord.toString()); } } String delTWStart = shipmentConfig.getString("delivery.timeWindows.timeWindow(0).start"); String delTWEnd = shipmentConfig.getString("delivery.timeWindows.timeWindow(0).end"); - TimeWindow delTW = TimeWindow.newInstance(Double.parseDouble(delTWStart), Double.parseDouble(delTWEnd)); - builder.setDeliveryTimeWindow(delTW); + if(delTWStart != null && delTWEnd != null){ + TimeWindow delTW = TimeWindow.newInstance(Double.parseDouble(delTWStart), Double.parseDouble(delTWEnd)); + builder.setDeliveryTimeWindow(delTW); + } + Shipment shipment = builder.build(); vrpBuilder.addJob(shipment); @@ -391,7 +403,7 @@ public class VrpXMLReader{ int cap = getCap(serviceConfig); Service.Builder builder = serviceBuilderFactory.createBuilder(type, id, cap); String serviceLocationId = serviceConfig.getString("locationId"); - builder.setLocationId(serviceLocationId); + if(serviceLocationId != null) builder.setLocationId(serviceLocationId); Coordinate serviceCoord = getCoord(serviceConfig,""); if(serviceCoord != null){ builder.setCoord(serviceCoord); diff --git a/jsprit-core/src/main/resources/vrp_xml_schema.xsd b/jsprit-core/src/main/resources/vrp_xml_schema.xsd index 0b64fe56..421e9574 100644 --- a/jsprit-core/src/main/resources/vrp_xml_schema.xsd +++ b/jsprit-core/src/main/resources/vrp_xml_schema.xsd @@ -40,7 +40,7 @@ - + @@ -95,7 +95,7 @@ - + @@ -125,7 +125,7 @@ - + @@ -141,7 +141,7 @@ - + diff --git a/jsprit-core/src/test/java/jsprit/core/problem/io/VrpReaderV2Test.java b/jsprit-core/src/test/java/jsprit/core/problem/io/VrpReaderV2Test.java index 037e200f..aa659a81 100644 --- a/jsprit-core/src/test/java/jsprit/core/problem/io/VrpReaderV2Test.java +++ b/jsprit-core/src/test/java/jsprit/core/problem/io/VrpReaderV2Test.java @@ -106,12 +106,19 @@ public class VrpReaderV2Test { assertEquals(FleetSize.FINITE,vrp.getFleetSize()); } + @Test + public void whenReadingJobs_nuOfJobsIsReadThemCorrectly(){ + VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance(); + new VrpXMLReader(builder, null).read(inFileName); + VehicleRoutingProblem vrp = builder.build(); + assertEquals(4, vrp.getJobs().size()); + } + @Test public void whenReadingServices_itReadsThemCorrectly(){ VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance(); new VrpXMLReader(builder, null).read(inFileName); VehicleRoutingProblem vrp = builder.build(); - assertEquals(3, vrp.getJobs().size()); int servCounter = 0; for(Job j : vrp.getJobs().values()){ if(j instanceof Service) servCounter++; @@ -124,23 +131,153 @@ public class VrpReaderV2Test { VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance(); new VrpXMLReader(builder, null).read(inFileName); VehicleRoutingProblem vrp = builder.build(); - assertEquals(3, vrp.getJobs().size()); int shipCounter = 0; for(Job j : vrp.getJobs().values()){ if(j instanceof Shipment) shipCounter++; } - assertEquals(1,shipCounter); + assertEquals(2,shipCounter); } @Test - public void whenReadingServices_servicesAreBuiltCorrectly(){ + public void whenReadingServices_capOfService1IsReadCorrectly(){ + VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance(); + new VrpXMLReader(builder, null).read(inFileName); + VehicleRoutingProblem vrp = builder.build(); + Service s1 = (Service) vrp.getJobs().get("1"); + assertEquals(1,s1.getCapacityDemand()); + } + + @Test + public void whenReadingServices_durationOfService1IsReadCorrectly(){ + VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance(); + new VrpXMLReader(builder, null).read(inFileName); + VehicleRoutingProblem vrp = builder.build(); + Service s1 = (Service) vrp.getJobs().get("1"); + assertEquals(10.0,s1.getServiceDuration(),0.01); + } + + @Test + public void whenReadingServices_twOfService1IsReadCorrectly(){ + VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance(); + new VrpXMLReader(builder, null).read(inFileName); + VehicleRoutingProblem vrp = builder.build(); + Service s1 = (Service) vrp.getJobs().get("1"); + assertEquals(0.0,s1.getTimeWindow().getStart(),0.01); + assertEquals(4000.0,s1.getTimeWindow().getEnd(),0.01); + } + + @Test + public void whenReadingServices_typeOfService1IsReadCorrectly(){ VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance(); new VrpXMLReader(builder, null).read(inFileName); VehicleRoutingProblem vrp = builder.build(); Service s1 = (Service) vrp.getJobs().get("1"); assertEquals("service",s1.getType()); - assertEquals(1,s1.getCapacityDemand()); - assertEquals(0.0,s1.getServiceDuration(),0.01); - assertEquals(3, vrp.getJobs().size()); } + + + + @Test + public void whenReadingJobs_capOfShipment3IsReadCorrectly(){ + VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance(); + new VrpXMLReader(builder, null).read(inFileName); + VehicleRoutingProblem vrp = builder.build(); + Shipment s = (Shipment) vrp.getJobs().get("3"); + assertEquals(10,s.getCapacityDemand()); + } + + @Test + public void whenReadingJobs_pickupServiceTimeOfShipment3IsReadCorrectly(){ + VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance(); + new VrpXMLReader(builder, null).read(inFileName); + VehicleRoutingProblem vrp = builder.build(); + Shipment s = (Shipment) vrp.getJobs().get("3"); + assertEquals(10.0,s.getPickupServiceTime(),0.01); + } + + @Test + public void whenReadingJobs_pickupTimeWindowOfShipment3IsReadCorrectly(){ + VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance(); + new VrpXMLReader(builder, null).read(inFileName); + VehicleRoutingProblem vrp = builder.build(); + Shipment s = (Shipment) vrp.getJobs().get("3"); + assertEquals(1000.0,s.getPickupTimeWindow().getStart(),0.01); + assertEquals(4000.0,s.getPickupTimeWindow().getEnd(),0.01); + } + + @Test + public void whenReadingJobs_deliveryTimeWindowOfShipment3IsReadCorrectly(){ + VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance(); + new VrpXMLReader(builder, null).read(inFileName); + VehicleRoutingProblem vrp = builder.build(); + Shipment s = (Shipment) vrp.getJobs().get("3"); + assertEquals(6000.0,s.getDeliveryTimeWindow().getStart(),0.01); + assertEquals(10000.0,s.getDeliveryTimeWindow().getEnd(),0.01); + } + + @Test + public void whenReadingJobs_deliveryServiceTimeOfShipment3IsReadCorrectly(){ + VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance(); + new VrpXMLReader(builder, null).read(inFileName); + VehicleRoutingProblem vrp = builder.build(); + Shipment s = (Shipment) vrp.getJobs().get("3"); + assertEquals(100.0,s.getPickupServiceTime(),0.01); + } + + @Test + public void whenReadingJobs_deliveryCoordShipment3IsReadCorrectly(){ + VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance(); + new VrpXMLReader(builder, null).read(inFileName); + VehicleRoutingProblem vrp = builder.build(); + Shipment s = (Shipment) vrp.getJobs().get("3"); + assertEquals(10.0,s.getDeliveryCoord().getX(),0.01); + assertEquals(0.0,s.getDeliveryCoord().getY(),0.01); + } + + @Test + public void whenReadingJobs_pickupCoordShipment3IsReadCorrectly(){ + VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance(); + new VrpXMLReader(builder, null).read(inFileName); + VehicleRoutingProblem vrp = builder.build(); + Shipment s = (Shipment) vrp.getJobs().get("3"); + assertEquals(10.0,s.getPickupCoord().getX(),0.01); + assertEquals(10.0,s.getPickupCoord().getY(),0.01); + } + + @Test + public void whenReadingJobs_deliveryIdShipment3IsReadCorrectly(){ + VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance(); + new VrpXMLReader(builder, null).read(inFileName); + VehicleRoutingProblem vrp = builder.build(); + Shipment s = (Shipment) vrp.getJobs().get("3"); + assertEquals("i(9,9)",s.getDeliveryLocation()); + } + + @Test + public void whenReadingJobs_pickupIdShipment3IsReadCorrectly(){ + VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance(); + new VrpXMLReader(builder, null).read(inFileName); + VehicleRoutingProblem vrp = builder.build(); + Shipment s = (Shipment) vrp.getJobs().get("3"); + assertEquals("i(3,9)",s.getPickupLocation()); + } + + @Test + public void whenReadingJobs_pickupLocationIdShipment4IsReadCorrectly(){ + VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance(); + new VrpXMLReader(builder, null).read(inFileName); + VehicleRoutingProblem vrp = builder.build(); + Shipment s = (Shipment) vrp.getJobs().get("4"); + assertEquals("[x=10.0][y=10.0]",s.getPickupLocation()); + } + + @Test + public void whenReadingJobs_deliveryLocationIdShipment4IsReadCorrectly(){ + VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance(); + new VrpXMLReader(builder, null).read(inFileName); + VehicleRoutingProblem vrp = builder.build(); + Shipment s = (Shipment) vrp.getJobs().get("4"); + assertEquals("[x=10.0][y=0.0]",s.getDeliveryLocation()); + } + } diff --git a/jsprit-core/src/test/resources/finiteVrpForReaderV2Test.xml b/jsprit-core/src/test/resources/finiteVrpForReaderV2Test.xml index 4a195415..a85b6cf6 100644 --- a/jsprit-core/src/test/resources/finiteVrpForReaderV2Test.xml +++ b/jsprit-core/src/test/resources/finiteVrpForReaderV2Test.xml @@ -79,7 +79,7 @@ j(1,5) 1 - 0.0 + 10.0 0.0 @@ -108,10 +108,10 @@ i(3,9) - 0.0 + 10.0 - 0.0 + 1000.0 4000.0 @@ -119,16 +119,41 @@ i(9,9) - 0.0 + 100.0 - 0.0 - 4000.0 + 6000.0 + 10000.0 - 1 + 10 + + + + + 10.0 + + + 1000.0 + 4000.0 + + + + + + 100.0 + + + 6000.0 + 10000.0 + + + + 10 + + From d50ce05a76df89a5af868640d84303fb65484907 Mon Sep 17 00:00:00 2001 From: Stefan Schroeder <4sschroeder@gmail.com> Date: Thu, 23 Jan 2014 12:13:57 +0100 Subject: [PATCH 2/2] bugfix issue #79 --- .../jsprit/core/problem/io/VrpXMLReader.java | 10 +++++++++- .../core/problem/io/VrpReaderV2Test.java | 20 ++++++++++++++++++- .../resources/finiteVrpForReaderV2Test.xml | 1 - 3 files changed, 28 insertions(+), 3 deletions(-) diff --git a/jsprit-core/src/main/java/jsprit/core/problem/io/VrpXMLReader.java b/jsprit-core/src/main/java/jsprit/core/problem/io/VrpXMLReader.java index ab4628da..e0445815 100644 --- a/jsprit-core/src/main/java/jsprit/core/problem/io/VrpXMLReader.java +++ b/jsprit-core/src/main/java/jsprit/core/problem/io/VrpXMLReader.java @@ -334,6 +334,10 @@ public class VrpXMLReader{ builder.setPickupLocation(pickupCoord.toString()); } } + //pickup-serviceTime + String pickupServiceTime = shipmentConfig.getString("pickup.duration"); + if(pickupServiceTime != null) builder.setPickupServiceTime(Double.parseDouble(pickupServiceTime)); + //pickup-tw String pickupTWStart = shipmentConfig.getString("pickup.timeWindows.timeWindow(0).start"); String pickupTWEnd = shipmentConfig.getString("pickup.timeWindows.timeWindow(0).end"); @@ -343,7 +347,7 @@ public class VrpXMLReader{ } - //delivery-locaitonId + //delivery-locationId String deliveryLocationId = shipmentConfig.getString("delivery.locationId"); if(deliveryLocationId != null){ builder.setDeliveryLocation(deliveryLocationId); @@ -361,7 +365,11 @@ public class VrpXMLReader{ builder.setDeliveryLocation(deliveryCoord.toString()); } } + //delivery-serviceTime + String deliveryServiceTime = shipmentConfig.getString("delivery.duration"); + if(deliveryServiceTime != null) builder.setDeliveryServiceTime(Double.parseDouble(deliveryServiceTime)); + //delivery-tw String delTWStart = shipmentConfig.getString("delivery.timeWindows.timeWindow(0).start"); String delTWEnd = shipmentConfig.getString("delivery.timeWindows.timeWindow(0).end"); if(delTWStart != null && delTWEnd != null){ diff --git a/jsprit-core/src/test/java/jsprit/core/problem/io/VrpReaderV2Test.java b/jsprit-core/src/test/java/jsprit/core/problem/io/VrpReaderV2Test.java index aa659a81..152b772c 100644 --- a/jsprit-core/src/test/java/jsprit/core/problem/io/VrpReaderV2Test.java +++ b/jsprit-core/src/test/java/jsprit/core/problem/io/VrpReaderV2Test.java @@ -221,7 +221,7 @@ public class VrpReaderV2Test { new VrpXMLReader(builder, null).read(inFileName); VehicleRoutingProblem vrp = builder.build(); Shipment s = (Shipment) vrp.getJobs().get("3"); - assertEquals(100.0,s.getPickupServiceTime(),0.01); + assertEquals(100.0,s.getDeliveryServiceTime(),0.01); } @Test @@ -279,5 +279,23 @@ public class VrpReaderV2Test { Shipment s = (Shipment) vrp.getJobs().get("4"); assertEquals("[x=10.0][y=0.0]",s.getDeliveryLocation()); } + + @Test + public void whenReadingJobs_pickupServiceTimeOfShipment4IsReadCorrectly(){ + VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance(); + new VrpXMLReader(builder, null).read(inFileName); + VehicleRoutingProblem vrp = builder.build(); + Shipment s = (Shipment) vrp.getJobs().get("4"); + assertEquals(0.0,s.getPickupServiceTime(),0.01); + } + + @Test + public void whenReadingJobs_deliveryServiceTimeOfShipment4IsReadCorrectly(){ + VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance(); + new VrpXMLReader(builder, null).read(inFileName); + VehicleRoutingProblem vrp = builder.build(); + Shipment s = (Shipment) vrp.getJobs().get("4"); + assertEquals(100.0,s.getDeliveryServiceTime(),0.01); + } } diff --git a/jsprit-core/src/test/resources/finiteVrpForReaderV2Test.xml b/jsprit-core/src/test/resources/finiteVrpForReaderV2Test.xml index a85b6cf6..d38fa774 100644 --- a/jsprit-core/src/test/resources/finiteVrpForReaderV2Test.xml +++ b/jsprit-core/src/test/resources/finiteVrpForReaderV2Test.xml @@ -133,7 +133,6 @@ - 10.0 1000.0