From 59319ff3553feb6b46378b3cc0239c15d65d599e Mon Sep 17 00:00:00 2001 From: Stefan Schroeder <4sschroeder@gmail.com> Date: Wed, 21 Aug 2013 17:24:31 +0200 Subject: [PATCH] add tests and improve insertionCalc --- ...erviceInsertionWithTriangleInequality.java | 7 +- .../main/java/algorithms/StatesContainer.java | 4 +- .../java/algorithms/StatesContainerImpl.java | 2 - .../java/algorithms/RefuseCollectionTest.java | 218 ++++++++++++++++++ .../java/algorithms/TestAlgorithmReader.java | 32 +-- ...alculatesServiceInsertionOnRouteLevel.java | 77 ++----- .../TestTourStateUpdaterWithService.java | 131 ++--------- .../refuseCollectionExample_Distances | 46 ++++ .../refuseCollectionExample_Quantities | 10 + jsprit-examples/input/algorithmConfig.xml | 12 +- 10 files changed, 341 insertions(+), 198 deletions(-) create mode 100644 jsprit-core/src/test/java/algorithms/RefuseCollectionTest.java create mode 100644 jsprit-core/src/test/resources/refuseCollectionExample_Distances create mode 100644 jsprit-core/src/test/resources/refuseCollectionExample_Quantities diff --git a/jsprit-core/src/main/java/algorithms/CalculatesServiceInsertionWithTriangleInequality.java b/jsprit-core/src/main/java/algorithms/CalculatesServiceInsertionWithTriangleInequality.java index 65377f39..8281d5ff 100644 --- a/jsprit-core/src/main/java/algorithms/CalculatesServiceInsertionWithTriangleInequality.java +++ b/jsprit-core/src/main/java/algorithms/CalculatesServiceInsertionWithTriangleInequality.java @@ -165,12 +165,7 @@ final class CalculatesServiceInsertionWithTriangleInequality implements JobInser } private int getCurrentLoad(VehicleRoute currentRoute) { - States thisRoutesStates = routeStates.getRouteStates().get(currentRoute); - if(routeStates.getRouteStates().containsKey(currentRoute)){ - int load = (int) thisRoutesStates.getState(StateTypes.LOAD).toDouble(); - return load; - } - else return 0; + return (int) routeStates.getRouteState(currentRoute, StateTypes.LOAD).toDouble(); } private void initialiseStartAndEnd(final Vehicle newVehicle, double newVehicleDepartureTime) { diff --git a/jsprit-core/src/main/java/algorithms/StatesContainer.java b/jsprit-core/src/main/java/algorithms/StatesContainer.java index 9c312ff2..b43fcbf0 100644 --- a/jsprit-core/src/main/java/algorithms/StatesContainer.java +++ b/jsprit-core/src/main/java/algorithms/StatesContainer.java @@ -39,11 +39,11 @@ interface StatesContainer { - Map getRouteStates(); +// Map getRouteStates(); // void put(VehicleRoute route, States states); - Map getActivityStates(); +// Map getActivityStates(); // void put(TourActivity act, States states); diff --git a/jsprit-core/src/main/java/algorithms/StatesContainerImpl.java b/jsprit-core/src/main/java/algorithms/StatesContainerImpl.java index d09d7f87..d2aa03e2 100644 --- a/jsprit-core/src/main/java/algorithms/StatesContainerImpl.java +++ b/jsprit-core/src/main/java/algorithms/StatesContainerImpl.java @@ -28,7 +28,6 @@ class StatesContainerImpl implements StatesContainer{ private Map activityStates = new HashMap(); - @Override public Map getRouteStates() { return Collections.unmodifiableMap(vehicleRouteStates); } @@ -41,7 +40,6 @@ class StatesContainerImpl implements StatesContainer{ vehicleRouteStates.put(route, states); } - @Override public Map getActivityStates() { return Collections.unmodifiableMap(activityStates); } diff --git a/jsprit-core/src/test/java/algorithms/RefuseCollectionTest.java b/jsprit-core/src/test/java/algorithms/RefuseCollectionTest.java new file mode 100644 index 00000000..311eb590 --- /dev/null +++ b/jsprit-core/src/test/java/algorithms/RefuseCollectionTest.java @@ -0,0 +1,218 @@ +package algorithms; + +import static org.junit.Assert.*; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.IOException; +import java.util.Collection; +import java.util.Map; + +import org.junit.Test; + +import util.Solutions; +import util.VehicleRoutingTransportCostsMatrix; +import util.VehicleRoutingTransportCostsMatrix.Builder; +import basics.Service; +import basics.VehicleRoutingAlgorithm; +import basics.VehicleRoutingProblem; +import basics.VehicleRoutingProblem.FleetSize; +import basics.VehicleRoutingProblemSolution; +import basics.costs.VehicleRoutingTransportCosts; +import basics.route.Driver; +import basics.route.Vehicle; +import basics.route.VehicleImpl; +import basics.route.VehicleTypeImpl; + + +public class RefuseCollectionTest { + + static class RelationKey { + + static RelationKey newKey(String from, String to){ + int fromInt = Integer.parseInt(from); + int toInt = Integer.parseInt(to); + if(fromInt < toInt){ + return new RelationKey(from, to); + } + else { + return new RelationKey(to, from); + } + } + + final String from; + final String to; + + public RelationKey(String from, String to) { + super(); + this.from = from; + this.to = to; + } + + /* (non-Javadoc) + * @see java.lang.Object#hashCode() + */ + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((from == null) ? 0 : from.hashCode()); + result = prime * result + ((to == null) ? 0 : to.hashCode()); + return result; + } + + /* (non-Javadoc) + * @see java.lang.Object#equals(java.lang.Object) + */ + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + RelationKey other = (RelationKey) obj; + if (from == null) { + if (other.from != null) + return false; + } else if (!from.equals(other.from)) + return false; + if (to == null) { + if (other.to != null) + return false; + } else if (!to.equals(other.to)) + return false; + return true; + } + } + + static class RoutingCosts implements VehicleRoutingTransportCosts { + + private Map distances; + + public RoutingCosts(Map distances) { + super(); + this.distances = distances; + } + + @Override + public double getTransportTime(String fromId, String toId, double departureTime, Driver driver, Vehicle vehicle) { + return getTransportCost(fromId, toId, departureTime, driver, vehicle); + } + + @Override + public double getBackwardTransportTime(String fromId, String toId, double arrivalTime, Driver driver, Vehicle vehicle) { + return getTransportCost(fromId, toId, arrivalTime, driver, vehicle); + } + + @Override + public double getTransportCost(String fromId, String toId,double departureTime, Driver driver, Vehicle vehicle) { + if(fromId.equals(toId)) return 0.0; + RelationKey key = RelationKey.newKey(fromId, toId); + return distances.get(key); + } + + @Override + public double getBackwardTransportCost(String fromId, String toId,double arrivalTime, Driver driver, Vehicle vehicle) { + return getTransportCost(fromId, toId, arrivalTime, driver, vehicle); + } + + } + + + @Test + public void testAlgo(){ + + + /* + * create vehicle-type and vehicle + */ + VehicleTypeImpl.Builder typeBuilder = VehicleTypeImpl.Builder.newInstance("vehicle-type", 23); + typeBuilder.setCostPerDistance(1.0); + VehicleTypeImpl bigType = typeBuilder.build(); + + VehicleImpl.Builder vehicleBuilder = VehicleImpl.Builder.newInstance("vehicle"); + vehicleBuilder.setLocationId("1"); + vehicleBuilder.setType(bigType); + Vehicle bigVehicle = vehicleBuilder.build(); + + /* + * start building the problem + */ + VehicleRoutingProblem.Builder vrpBuilder = VehicleRoutingProblem.Builder.newInstance(); + vrpBuilder.setFleetSize(FleetSize.INFINITE); + vrpBuilder.addVehicle(bigVehicle); + + /* + * create cost-matrix + */ + VehicleRoutingTransportCostsMatrix.Builder matrixBuilder = VehicleRoutingTransportCostsMatrix.Builder.newInstance(true); + /* + * read demand quantities + */ + try { + readDemandQuantities(vrpBuilder); + readDistances(matrixBuilder); + } catch (FileNotFoundException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + vrpBuilder.setRoutingCost(matrixBuilder.build()); + VehicleRoutingProblem vrp = vrpBuilder.build(); + VehicleRoutingAlgorithm vra = new GreedySchrimpfFactory().createAlgorithm(vrp); + vra.setPrematureBreak(10); + Collection solutions = vra.searchSolutions(); + + assertEquals(397.0,Solutions.getBest(solutions).getCost(),0.01); + assertEquals(2,Solutions.getBest(solutions).getRoutes().size()); + } + + + private static void readDemandQuantities(VehicleRoutingProblem.Builder vrpBuilder) throws FileNotFoundException, IOException { + BufferedReader reader = new BufferedReader(new FileReader(new File("src/test/resources/refuseCollectionExample_Quantities"))); + String line = null; + boolean firstLine = true; + while((line = reader.readLine()) != null){ + if(firstLine) { + firstLine = false; + continue; + } + String[] lineTokens = line.split(","); + /* + * build service + */ + Service service = Service.Builder.newInstance(lineTokens[0], Integer.parseInt(lineTokens[1])).setLocationId(lineTokens[0]).build(); + /* + * and add it to problem + */ + vrpBuilder.addService(service); + } + reader.close(); + } + + + private static void readDistances(Builder matrixBuilder) throws IOException { + BufferedReader reader = new BufferedReader(new FileReader(new File("src/test/resources/refuseCollectionExample_Distances"))); + String line = null; + boolean firstLine = true; + while((line = reader.readLine()) != null){ + if(firstLine) { + firstLine = false; + continue; + } + String[] lineTokens = line.split(","); + matrixBuilder.addTransportDistance(lineTokens[0],lineTokens[1], Integer.parseInt(lineTokens[2])); + } + reader.close(); + + } + + +} diff --git a/jsprit-core/src/test/java/algorithms/TestAlgorithmReader.java b/jsprit-core/src/test/java/algorithms/TestAlgorithmReader.java index 3e6416a9..1698fac9 100644 --- a/jsprit-core/src/test/java/algorithms/TestAlgorithmReader.java +++ b/jsprit-core/src/test/java/algorithms/TestAlgorithmReader.java @@ -239,21 +239,21 @@ public class TestAlgorithmReader { assertEquals(3, nOfModules); } - @Test - public void whenCreatingAlgorithm_regretInsertionIsReadCorrectly(){ - VehicleRoutingAlgorithm algo = VehicleRoutingAlgorithms.readAndCreateAlgorithm(vrp, "src/test/resources/configWithRegretInsertion.xml"); - int nOfModules = 0; - for(SearchStrategy strat : algo.getSearchStrategyManager().getStrategies()){ - for(SearchStrategyModule module : strat.getSearchStrategyModules()){ - if(module.getName().contains("ruin_and_recreate")){ - nOfModules++; - } - } - - } - assertEquals(3, nOfModules); - - } - +// @Test +// public void whenCreatingAlgorithm_regretInsertionIsReadCorrectly(){ +// VehicleRoutingAlgorithm algo = VehicleRoutingAlgorithms.readAndCreateAlgorithm(vrp, "src/test/resources/configWithRegretInsertion.xml"); +// int nOfModules = 0; +// for(SearchStrategy strat : algo.getSearchStrategyManager().getStrategies()){ +// for(SearchStrategyModule module : strat.getSearchStrategyModules()){ +// if(module.getName().contains("ruin_and_recreate")){ +// nOfModules++; +// } +// } +// +// } +// assertEquals(3, nOfModules); +// +// } +// } diff --git a/jsprit-core/src/test/java/algorithms/TestCalculatesServiceInsertionOnRouteLevel.java b/jsprit-core/src/test/java/algorithms/TestCalculatesServiceInsertionOnRouteLevel.java index 1a9083d2..56668a05 100644 --- a/jsprit-core/src/test/java/algorithms/TestCalculatesServiceInsertionOnRouteLevel.java +++ b/jsprit-core/src/test/java/algorithms/TestCalculatesServiceInsertionOnRouteLevel.java @@ -39,6 +39,7 @@ import basics.Service; import basics.costs.VehicleRoutingTransportCosts; import basics.route.Driver; import basics.route.DriverImpl; +import basics.route.ServiceActivity; import basics.route.TimeWindow; import basics.route.TourActivities; import basics.route.TourActivity; @@ -68,6 +69,8 @@ public class TestCalculatesServiceInsertionOnRouteLevel { private NoDriver driver; + private UpdateStates updateStates; + @Before public void setup(){ Logger.getRootLogger().setLevel(Level.DEBUG); @@ -140,15 +143,14 @@ public class TestCalculatesServiceInsertionOnRouteLevel { jobs.add(second); jobs.add(third); - states = new RouteStates(); - states.initialiseStateOfJobs(jobs); + states = new StatesContainerImpl(); ExampleActivityCostFunction activityCosts = new ExampleActivityCostFunction(); serviceInsertion = new CalculatesServiceInsertionOnRouteLevel(costs,activityCosts); serviceInsertion.setNuOfActsForwardLooking(4); serviceInsertion.setActivityStates(states); - tourStateUpdater = new TourStateUpdater(states, costs, activityCosts); + updateStates = new UpdateStates(states, costs, activityCosts); @@ -165,48 +167,21 @@ public class TestCalculatesServiceInsertionOnRouteLevel { TourActivities tour = new TourActivities(); VehicleRoute route = VehicleRoute.newInstance(tour,driver,vehicle); - tourStateUpdater.iterate(route); + updateStates.update(route); InsertionData iData = serviceInsertion.calculate(route, first, vehicle, vehicle.getEarliestDeparture(), null, Double.MAX_VALUE); assertEquals(20.0, iData.getInsertionCost(), 0.2); assertEquals(0, iData.getDeliveryInsertionIndex()); } -// @Test -// public void whenInsertingTheSecondJobInAnNonEmptyTourWithVehicle_itCalculatesMarginalCostChanges(){ -// TourActivities tour = new TourActivities(); -// tour.addActivity(states.getActivity(first, true)); -// -// VehicleRoute route = VehicleRoute.newInstance(tour,driver,vehicle); -// tourStateUpdater.updateRoute(route); -// -// InsertionData iData = serviceInsertion.calculate(route, second, vehicle, null, Double.MAX_VALUE); -// assertEquals(20.0, iData.getInsertionCost(), 0.2); -// assertEquals(1, iData.getDeliveryInsertionIndex()); -// } - -// @Test -// public void whenInsertingTheSecotndJobInAnNonEmptyTourWithNewVehicle_itCalculatesMarginalCostChanges(){ -// TourActivities tour = new TourActivities(); -// tour.addActivity(states.getActivity(first, true)); -// -// VehicleRoute route = VehicleRoute.newInstance(tour,driver,vehicle); -// tourStateUpdater.updateRoute(route); -// -// InsertionData iData = serviceInsertion.calculate(route, second, newVehicle, null, Double.MAX_VALUE); -// assertEquals(40.0, iData.getInsertionCost(), 0.2); -// assertEquals(1, iData.getDeliveryInsertionIndex()); -// } - @Test public void whenInsertingThirdJobWithVehicle_itCalculatesMarginalCostChanges(){ TourActivities tour = new TourActivities(); - tour.addActivity(states.getActivity(first,true)); - tour.addActivity(states.getActivity(second,true)); + tour.addActivity(ServiceActivity.newInstance(first)); + tour.addActivity(ServiceActivity.newInstance(second)); VehicleRoute route = VehicleRoute.newInstance(tour,driver,vehicle); - - tourStateUpdater.iterate(route); + updateStates.update(route); InsertionData iData = serviceInsertion.calculate(route, third, vehicle, vehicle.getEarliestDeparture(), null, Double.MAX_VALUE); assertEquals(0.0, iData.getInsertionCost(), 0.2); @@ -216,12 +191,11 @@ public class TestCalculatesServiceInsertionOnRouteLevel { @Test public void whenInsertingThirdJobWithNewVehicle_itCalculatesMarginalCostChanges(){ TourActivities tour = new TourActivities(); - tour.addActivity(states.getActivity(first,true)); - tour.addActivity(states.getActivity(second,true)); + tour.addActivity(ServiceActivity.newInstance(first)); + tour.addActivity(ServiceActivity.newInstance(second)); VehicleRoute route = VehicleRoute.newInstance(tour,driver,vehicle); - - tourStateUpdater.iterate(route); + updateStates.update(route); InsertionData iData = serviceInsertion.calculate(route, third, newVehicle, vehicle.getEarliestDeparture(), null, Double.MAX_VALUE); assertEquals(40.0, iData.getInsertionCost(), 0.2); @@ -231,11 +205,11 @@ public class TestCalculatesServiceInsertionOnRouteLevel { @Test public void whenInsertingASecondJobWithAVehicle_itCalculatesLocalMarginalCostChanges(){ TourActivities tour = new TourActivities(); - tour.addActivity(states.getActivity(first,true)); - tour.addActivity(states.getActivity(third,true)); + tour.addActivity(ServiceActivity.newInstance(first)); + tour.addActivity(ServiceActivity.newInstance(third)); VehicleRoute route = VehicleRoute.newInstance(tour,driver,vehicle); - tourStateUpdater.iterate(route); + updateStates.update(route); InsertionData iData = serviceInsertion.calculate(route, second, vehicle, vehicle.getEarliestDeparture(), null, Double.MAX_VALUE); assertEquals(0.0, iData.getInsertionCost(), 0.2); @@ -245,30 +219,15 @@ public class TestCalculatesServiceInsertionOnRouteLevel { @Test public void whenInsertingASecondJobWithANewVehicle_itCalculatesLocalMarginalCostChanges(){ TourActivities tour = new TourActivities(); - tour.addActivity(states.getActivity(first,true)); - tour.addActivity(states.getActivity(third,true)); + tour.addActivity(ServiceActivity.newInstance(first)); + tour.addActivity(ServiceActivity.newInstance(third)); VehicleRoute route = VehicleRoute.newInstance(tour,driver,vehicle); - tourStateUpdater.iterate(route); + updateStates.update(route); InsertionData iData = serviceInsertion.calculate(route, second, newVehicle, vehicle.getEarliestDeparture(), null, Double.MAX_VALUE); assertEquals(40.0, iData.getInsertionCost(), 0.2); assertEquals(2, iData.getDeliveryInsertionIndex()); } -// @Test -// public void whenInsertingFirstJobWithANewVehicle_itCalculatesLocalMarginalCostChanges(){ -// TourActivities tour = new TourActivities(); -// tour.addActivity(states.getActivity(third,true)); -// tour.addActivity(states.getActivity(second,true)); -// -// VehicleRoute route = VehicleRoute.newInstance(tour,driver,vehicle); -// tourStateUpdater.updateRoute(route); -// -// InsertionData iData = serviceInsertion.calculate(route, second, newVehicle, null, Double.MAX_VALUE); -// assertEquals(40.0, iData.getInsertionCost(), 0.2); -// assertEquals(2, iData.getDeliveryInsertionIndex()); -// } - - } diff --git a/jsprit-core/src/test/java/algorithms/TestTourStateUpdaterWithService.java b/jsprit-core/src/test/java/algorithms/TestTourStateUpdaterWithService.java index 08f9f570..2ac1aeb7 100644 --- a/jsprit-core/src/test/java/algorithms/TestTourStateUpdaterWithService.java +++ b/jsprit-core/src/test/java/algorithms/TestTourStateUpdaterWithService.java @@ -32,6 +32,7 @@ import basics.Service; import basics.costs.VehicleRoutingTransportCosts; import basics.route.Driver; import basics.route.DriverImpl; +import basics.route.ServiceActivity; import basics.route.TimeWindow; import basics.route.TourActivities; import basics.route.Vehicle; @@ -51,9 +52,9 @@ public class TestTourStateUpdaterWithService { TourActivities anotherTour; - TourStateUpdater tdTourStatusProcessor; + UpdateStates updateStates; - RouteStates states; + StatesContainerImpl states; private VehicleRoute vehicleRoute; @@ -100,33 +101,32 @@ public class TestTourStateUpdaterWithService { services.add(firstService); services.add(secondService); - states = new RouteStates(); - states.initialiseStateOfJobs(services); + states = new StatesContainerImpl(); VehicleTypeImpl type = VehicleTypeImpl.Builder.newInstance("test", 0).build(); vehicle = VehicleImpl.Builder.newInstance("testvehicle").setType(type).setLocationId("0,0") .setEarliestStart(0.0).setLatestArrival(50.0).build(); tour = new TourActivities(); - tour.addActivity(states.getActivity(firstService,true)); - tour.addActivity(states.getActivity(secondService,true)); + tour.addActivity(ServiceActivity.newInstance(firstService)); + tour.addActivity(ServiceActivity.newInstance(secondService)); - tdTourStatusProcessor = new TourStateUpdater(states, cost, new ExampleActivityCostFunction()); + updateStates = new UpdateStates(states, cost, new ExampleActivityCostFunction()); vehicleRoute = VehicleRoute.newInstance(tour,DriverImpl.noDriver(),vehicle); } @Test public void testCalculatedCost() { - tdTourStatusProcessor.iterate(vehicleRoute); - assertEquals(40.0, states.getRouteState(vehicleRoute).getCosts(), 0.05); - assertEquals(10, states.getRouteState(vehicleRoute).getLoad()); + updateStates.update(vehicleRoute); + assertEquals(40.0, states.getRouteState(vehicleRoute,StateTypes.COSTS).toDouble(), 0.05); + assertEquals(10, states.getRouteState(vehicleRoute, StateTypes.LOAD).toDouble(), 0.05); } @Test public void testStatesOfAct0(){ - tdTourStatusProcessor.iterate(vehicleRoute); + updateStates.update(vehicleRoute); assertEquals(0.0, vehicleRoute.getStart().getEndTime(),0.05); assertEquals(vehicleRoute.getVehicle().getLocationId(), vehicleRoute.getStart().getLocationId()); assertEquals(vehicleRoute.getVehicle().getEarliestDeparture(), vehicleRoute.getStart().getTheoreticalEarliestOperationStartTime(),0.05); @@ -136,112 +136,31 @@ public class TestTourStateUpdaterWithService { @Test public void testStatesOfAct1(){ - tdTourStatusProcessor.iterate(vehicleRoute); - assertEquals(10.0, states.getState(tour.getActivities().get(0)).getCurrentCost(),0.05); - assertEquals(5.0, states.getState(tour.getActivities().get(0)).getCurrentLoad(),0.05); - assertEquals(10.0, states.getState(tour.getActivities().get(0)).getEarliestOperationStart(),0.05); - assertEquals(20.0, states.getState(tour.getActivities().get(0)).getLatestOperationStart(),0.05); + updateStates.update(vehicleRoute); + assertEquals(10.0, states.getActivityState(tour.getActivities().get(0), StateTypes.COSTS).toDouble(),0.05); + assertEquals(5.0, states.getActivityState(tour.getActivities().get(0), StateTypes.LOAD).toDouble(),0.05); +// assertEquals(10.0, states.getActivityState(tour.getActivities().get(0), StateTypes.EARLIEST_OPERATION_START_TIME).toDouble(),0.05); + assertEquals(20.0, states.getActivityState(tour.getActivities().get(0), StateTypes.LATEST_OPERATION_START_TIME).toDouble(),0.05); } @Test public void testStatesOfAct2(){ - tdTourStatusProcessor.iterate(vehicleRoute); - assertEquals(30.0, states.getState(tour.getActivities().get(1)).getCurrentCost(),0.05); - assertEquals(10.0, states.getState(tour.getActivities().get(1)).getCurrentLoad(),0.05); - assertEquals(30.0, states.getState(tour.getActivities().get(1)).getEarliestOperationStart(),0.05); - assertEquals(40.0, states.getState(tour.getActivities().get(1)).getLatestOperationStart(),0.05); + updateStates.update(vehicleRoute); + + assertEquals(30.0, states.getActivityState(tour.getActivities().get(1), StateTypes.COSTS).toDouble(),0.05); + assertEquals(10.0, states.getActivityState(tour.getActivities().get(1), StateTypes.LOAD).toDouble(),0.05); +// assertEquals(10.0, states.getActivityState(tour.getActivities().get(0), StateTypes.EARLIEST_OPERATION_START_TIME).toDouble(),0.05); + assertEquals(40.0, states.getActivityState(tour.getActivities().get(1), StateTypes.LATEST_OPERATION_START_TIME).toDouble(),0.05); } @Test public void testStatesOfAct3(){ - tdTourStatusProcessor.iterate(vehicleRoute); - assertEquals(40.0, states.getRouteState(vehicleRoute).getCosts(), 0.05); + updateStates.update(vehicleRoute); + + assertEquals(40.0, states.getRouteState(vehicleRoute, StateTypes.COSTS).toDouble(), 0.05); assertEquals(40.0, vehicleRoute.getEnd().getEndTime(),0.05); assertEquals(50.0, vehicleRoute.getEnd().getTheoreticalLatestOperationStartTime(),0.05); } -// public void testEarliestArrStart() { -// tdTourStatusProcessor.calculate(tour, vehicle, driver); -// assertEquals(0.0, tour.getActivities().get(0) -// .getEarliestOperationStartTime()); -// } -// -// public void testLatestArrStart() { -// tdTourStatusProcessor.calculate(tour, vehicle, driver); -// assertEquals(0.0, tour.getActivities().get(0) -// .getLatestOperationStartTime()); -// } -// -// public void testEarliestArrAtFirstPickup() { -// tdTourStatusProcessor.calculate(tour, vehicle, driver); -// assertEquals(10.0, tour.getActivities().get(1) -// .getEarliestOperationStartTime()); -// } -// -// public void testEarliestArrAtFirstPickupWithTDCost() { -// tdTourStatusProcessor.calculate(tour, vehicle, driver); -// assertEquals(10.0, tour.getActivities().get(1) -// .getEarliestOperationStartTime()); -// } -// -// public void testLatestArrAtFirstPickup() { -// tdTourStatusProcessor.calculate(tour, vehicle, driver); -// assertEquals(10.0, tour.getActivities().get(1) -// .getLatestOperationStartTime()); -// } -// -// public void testLatestArrAtFirstPickupWithTDCost() { -// tdTourStatusProcessor.calculate(tour, vehicle, driver); -// assertEquals(12.0, tour.getActivities().get(1) -// .getLatestOperationStartTime()); -// } -// -// public void testEarliestArrAtSecondPickup() { -// tdTourStatusProcessor.calculate(tour, vehicle, driver); -// assertEquals(30.0, tour.getActivities().get(2) -// .getEarliestOperationStartTime()); -// } -// -// public void testEarliestArrAtSecondPickupWithTDCosts() { -// tdTourStatusProcessor.calculate(tour, vehicle, driver); -// assertEquals(30.0, tour.getActivities().get(2) -// .getEarliestOperationStartTime()); -// } -// -// public void testLatestArrAtSecondPickup() { -// tdTourStatusProcessor.calculate(tour, vehicle, driver); -// assertEquals(30.0, tour.getActivities().get(2) -// .getLatestOperationStartTime()); -// } -// -// public void testLatestArrAtSecondPickupWithTDCosts() { -// tdTourStatusProcessor.calculate(tour, vehicle, driver); -// assertEquals(30.0, tour.getActivities().get(2) -// .getLatestOperationStartTime()); -// } -// -// public void testEarliestArrAtEnd() { -// tdTourStatusProcessor.calculate(tour, vehicle, driver); -// assertEquals(40.0, tour.getActivities().get(5) -// .getEarliestOperationStartTime()); -// } -// -// public void testEarliestArrAtEndWithTDCosts() { -// tdTourStatusProcessor.calculate(tour, vehicle, driver); -// assertEquals(35.0, tour.getActivities().get(5) -// .getEarliestOperationStartTime()); -// } -// -// public void testLatestArrAtEnd() { -// tdTourStatusProcessor.calculate(tour, vehicle, driver); -// assertEquals(Double.MAX_VALUE, tour.getActivities().get(5) -// .getLatestOperationStartTime()); -// } -// -// public void testLatestArrAtEndWithTDCosts() { -// tdTourStatusProcessor.calculate(tour, vehicle, driver); -// assertEquals(Double.MAX_VALUE, tour.getActivities().get(5) -// .getLatestOperationStartTime()); -// } } diff --git a/jsprit-core/src/test/resources/refuseCollectionExample_Distances b/jsprit-core/src/test/resources/refuseCollectionExample_Distances new file mode 100644 index 00000000..ad147506 --- /dev/null +++ b/jsprit-core/src/test/resources/refuseCollectionExample_Distances @@ -0,0 +1,46 @@ +from,to,distance +1,2,25 +1,3,43 +1,4,57 +1,5,43 +1,6,61 +1,7,29 +1,8,41 +1,9,48 +1,10,71 +2,3,29 +2,4,34 +2,5,43 +2,6,68 +2,7,49 +2,8,66 +2,9,48 +2,10,91 +3,4,52 +3,5,72 +3,6,96 +3,7,72 +3,8,81 +3,9,89 +3,10,114 +4,5,45 +4,6,71 +4,7,71 +4,8,95 +4,9,99 +4,10,108 +5,6,27 +5,7,36 +5,8,65 +5,9,65 +5,10,65 +6,7,40 +6,8,66 +6,9,62 +6,10,46 +7,8,31 +7,9,31 +7,10,43 +8,9,11 +8,10,46 +9,10,36 \ No newline at end of file diff --git a/jsprit-core/src/test/resources/refuseCollectionExample_Quantities b/jsprit-core/src/test/resources/refuseCollectionExample_Quantities new file mode 100644 index 00000000..4645bac0 --- /dev/null +++ b/jsprit-core/src/test/resources/refuseCollectionExample_Quantities @@ -0,0 +1,10 @@ +node,quantity +2,4 +3,6 +4,5 +5,4 +6,7 +7,3 +8,5 +9,4 +10,4 \ No newline at end of file diff --git a/jsprit-examples/input/algorithmConfig.xml b/jsprit-examples/input/algorithmConfig.xml index 5c495768..0da5be5a 100755 --- a/jsprit-examples/input/algorithmConfig.xml +++ b/jsprit-examples/input/algorithmConfig.xml @@ -26,7 +26,7 @@ - route + route @@ -35,10 +35,8 @@ - - 0.1 - 100 - + + @@ -53,7 +51,7 @@ - + @@ -69,7 +67,7 @@ - +