From d102cbb651efb9798e3b8a41d3f11cec42a2bbdd Mon Sep 17 00:00:00 2001 From: oblonski Date: Tue, 2 Feb 2016 21:23:50 +0100 Subject: [PATCH] fix #213 --- .../core/problem/VehicleRoutingProblem.java | 11 ++- .../algorithm/state/StateManagerTest.java | 6 +- .../problem/VehicleRoutingProblemTest.java | 4 +- .../constraint/SkillConstraintTest.java | 2 +- .../test/resources/infiniteWriterV2Test.xml | 81 +++++++------------ 5 files changed, 43 insertions(+), 61 deletions(-) diff --git a/jsprit-core/src/main/java/jsprit/core/problem/VehicleRoutingProblem.java b/jsprit-core/src/main/java/jsprit/core/problem/VehicleRoutingProblem.java index bdfdcde2..4c1d516f 100644 --- a/jsprit-core/src/main/java/jsprit/core/problem/VehicleRoutingProblem.java +++ b/jsprit-core/src/main/java/jsprit/core/problem/VehicleRoutingProblem.java @@ -91,6 +91,8 @@ public class VehicleRoutingProblem { private Set uniqueVehicles = new HashSet(); + private Set addedVehicleIds = new HashSet(); + private boolean hasBreaks = false; private JobActivityFactory jobActivityFactory = new JobActivityFactory() { @@ -289,7 +291,10 @@ public class VehicleRoutingProblem { * @return the builder */ public Builder addInitialVehicleRoute(VehicleRoute route) { - addVehicle((AbstractVehicle) route.getVehicle()); + if(!addedVehicleIds.contains(route.getVehicle().getId())){ + addVehicle((AbstractVehicle) route.getVehicle()); + addedVehicleIds.add(route.getVehicle().getId()); + } for (TourActivity act : route.getActivities()) { AbstractActivity abstractAct = (AbstractActivity) act; abstractAct.setIndex(activityIndexCounter); @@ -360,6 +365,10 @@ public class VehicleRoutingProblem { * @return this builder */ public Builder addVehicle(AbstractVehicle vehicle) { + if(addedVehicleIds.contains(vehicle.getId())){ + throw new IllegalStateException("problem already contains a vehicle with id " + vehicle.getId() + ". choose unique ids for each vehicle."); + } + else addedVehicleIds.add(vehicle.getId()); if (!uniqueVehicles.contains(vehicle)) { vehicle.setIndex(vehicleIndexCounter); incVehicleIndexCounter(); diff --git a/jsprit-core/src/test/java/jsprit/core/algorithm/state/StateManagerTest.java b/jsprit-core/src/test/java/jsprit/core/algorithm/state/StateManagerTest.java index b21a07db..9d20eefa 100644 --- a/jsprit-core/src/test/java/jsprit/core/algorithm/state/StateManagerTest.java +++ b/jsprit-core/src/test/java/jsprit/core/algorithm/state/StateManagerTest.java @@ -272,7 +272,7 @@ public class StateManagerTest { public void whenMemorizingTwoVehicleInfoForRoute_itShouldBeMemorized() { VehicleType type = VehicleTypeImpl.Builder.newInstance("t").setCostPerDistance(4.).build(); VehicleImpl vehicle = VehicleImpl.Builder.newInstance("v").setStartLocation(Location.newInstance("loc")).build(); - VehicleImpl vehicle2 = VehicleImpl.Builder.newInstance("v").setStartLocation(Location.newInstance("loc")).setType(type).build(); + VehicleImpl vehicle2 = VehicleImpl.Builder.newInstance("v2").setStartLocation(Location.newInstance("loc")).setType(type).build(); VehicleRoute route = getRoute(vehicle); //getting the indices created in vrpBuilder @@ -292,7 +292,7 @@ public class StateManagerTest { public void whenMemorizingTwoVehicleInfoForAct_itShouldBeMemorized() { VehicleType type = VehicleTypeImpl.Builder.newInstance("t").setCostPerDistance(4.).build(); VehicleImpl vehicle = VehicleImpl.Builder.newInstance("v").setStartLocation(Location.newInstance("loc")).build(); - VehicleImpl vehicle2 = VehicleImpl.Builder.newInstance("v").setStartLocation(Location.newInstance("loc")).setType(type).build(); + VehicleImpl vehicle2 = VehicleImpl.Builder.newInstance("v2").setStartLocation(Location.newInstance("loc")).setType(type).build(); //getting the indices created in vrpBuilder VehicleRoutingProblem.Builder vrpBuilder = VehicleRoutingProblem.Builder.newInstance(); @@ -314,7 +314,7 @@ public class StateManagerTest { public void whenClearing_arrElementsShouldBeNull() { VehicleType type = VehicleTypeImpl.Builder.newInstance("t").setCostPerDistance(4.).build(); VehicleImpl vehicle = VehicleImpl.Builder.newInstance("v").setStartLocation(Location.newInstance("loc")).build(); - VehicleImpl vehicle2 = VehicleImpl.Builder.newInstance("v").setStartLocation(Location.newInstance("loc")).setType(type).build(); + VehicleImpl vehicle2 = VehicleImpl.Builder.newInstance("v2").setStartLocation(Location.newInstance("loc")).setType(type).build(); //getting the indices created in vrpBuilder VehicleRoutingProblem.Builder vrpBuilder = VehicleRoutingProblem.Builder.newInstance(); diff --git a/jsprit-core/src/test/java/jsprit/core/problem/VehicleRoutingProblemTest.java b/jsprit-core/src/test/java/jsprit/core/problem/VehicleRoutingProblemTest.java index 9737f4c9..1da8985b 100644 --- a/jsprit-core/src/test/java/jsprit/core/problem/VehicleRoutingProblemTest.java +++ b/jsprit-core/src/test/java/jsprit/core/problem/VehicleRoutingProblemTest.java @@ -326,7 +326,7 @@ public class VehicleRoutingProblemTest { VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance(); VehicleType type = VehicleTypeImpl.Builder.newInstance("type").build(); VehicleImpl vehicle = VehicleImpl.Builder.newInstance("v").setStartLocation(Location.newInstance("loc")).setType(type).build(); - VehicleImpl vehicle2 = VehicleImpl.Builder.newInstance("v").setStartLocation(Location.newInstance("loc")).setType(type).build(); + VehicleImpl vehicle2 = VehicleImpl.Builder.newInstance("v2").setStartLocation(Location.newInstance("loc")).setType(type).build(); builder.addVehicle(vehicle); builder.addVehicle(vehicle2); @@ -342,7 +342,7 @@ public class VehicleRoutingProblemTest { VehicleType type2 = VehicleTypeImpl.Builder.newInstance("type2").build(); VehicleImpl vehicle = VehicleImpl.Builder.newInstance("v").setStartLocation(Location.newInstance("loc")).setType(type).build(); - VehicleImpl vehicle2 = VehicleImpl.Builder.newInstance("v").setStartLocation(Location.newInstance("loc")).setType(type2).build(); + VehicleImpl vehicle2 = VehicleImpl.Builder.newInstance("v2").setStartLocation(Location.newInstance("loc")).setType(type2).build(); builder.addVehicle(vehicle); builder.addVehicle(vehicle2); diff --git a/jsprit-core/src/test/java/jsprit/core/problem/constraint/SkillConstraintTest.java b/jsprit-core/src/test/java/jsprit/core/problem/constraint/SkillConstraintTest.java index 66402c68..fa1cee12 100644 --- a/jsprit-core/src/test/java/jsprit/core/problem/constraint/SkillConstraintTest.java +++ b/jsprit-core/src/test/java/jsprit/core/problem/constraint/SkillConstraintTest.java @@ -51,7 +51,7 @@ public class SkillConstraintTest { public void doBefore() { VehicleType type = VehicleTypeImpl.Builder.newInstance("t").build(); vehicle = VehicleImpl.Builder.newInstance("v").addSkill("skill1").addSkill("skill2").addSkill("skill3").addSkill("skill4").setStartLocation(Location.newInstance("start")).setType(type).build(); - vehicle2 = VehicleImpl.Builder.newInstance("v").addSkill("skill4").addSkill("skill5").setStartLocation(Location.newInstance("start")).setType(type).build(); + vehicle2 = VehicleImpl.Builder.newInstance("v2").addSkill("skill4").addSkill("skill5").setStartLocation(Location.newInstance("start")).setType(type).build(); Service service = Service.Builder.newInstance("s").setLocation(Location.newInstance("loc")).addRequiredSkill("skill1").build(); Service service2 = Service.Builder.newInstance("s2").setLocation(Location.newInstance("loc")).addRequiredSkill("skill1").addRequiredSkill("skill2").addRequiredSkill("skill3").build(); diff --git a/jsprit-core/src/test/resources/infiniteWriterV2Test.xml b/jsprit-core/src/test/resources/infiniteWriterV2Test.xml index 2d9058ab..07c5406a 100644 --- a/jsprit-core/src/test/resources/infiniteWriterV2Test.xml +++ b/jsprit-core/src/test/resources/infiniteWriterV2Test.xml @@ -2,9 +2,24 @@ - INFINITE + FINITE + + v2 + vehType2 + + loc + + + loc + + + 0.0 + 1.7976931348623157E308 + + true + v1 vehType @@ -33,58 +48,16 @@ + + vehType2 + + 200 + + + 0.0 + 1.0 + + + - - - - loc - - - 1 - - 2.0 - - - 0.0 - 1.7976931348623157E308 - - - - - - loc2 - - - 1 - - 4.0 - - - 0.0 - 1.7976931348623157E308 - - - - - - - 10.0 - - - noDriver - v1 - 0.0 - - 1 - 0.0 - 0.0 - - 0.0 - - - - - - -