mirror of
https://github.com/graphhopper/jsprit.git
synced 2020-01-24 07:45:05 +01:00
add tests and improve insertionCalc
This commit is contained in:
parent
099d01ddd8
commit
59319ff355
10 changed files with 341 additions and 198 deletions
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -39,11 +39,11 @@ interface StatesContainer {
|
|||
|
||||
|
||||
|
||||
Map<VehicleRoute, States> getRouteStates();
|
||||
// Map<VehicleRoute, States> getRouteStates();
|
||||
|
||||
// void put(VehicleRoute route, States states);
|
||||
|
||||
Map<TourActivity, States> getActivityStates();
|
||||
// Map<TourActivity, States> getActivityStates();
|
||||
|
||||
// void put(TourActivity act, States states);
|
||||
|
||||
|
|
|
|||
|
|
@ -28,7 +28,6 @@ class StatesContainerImpl implements StatesContainer{
|
|||
|
||||
private Map<TourActivity,States> activityStates = new HashMap<TourActivity, StatesContainer.States>();
|
||||
|
||||
@Override
|
||||
public Map<VehicleRoute, States> getRouteStates() {
|
||||
return Collections.unmodifiableMap(vehicleRouteStates);
|
||||
}
|
||||
|
|
@ -41,7 +40,6 @@ class StatesContainerImpl implements StatesContainer{
|
|||
vehicleRouteStates.put(route, states);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<TourActivity, States> getActivityStates() {
|
||||
return Collections.unmodifiableMap(activityStates);
|
||||
}
|
||||
|
|
|
|||
218
jsprit-core/src/test/java/algorithms/RefuseCollectionTest.java
Normal file
218
jsprit-core/src/test/java/algorithms/RefuseCollectionTest.java
Normal file
|
|
@ -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<RelationKey,Integer> distances;
|
||||
|
||||
public RoutingCosts(Map<RelationKey, Integer> 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<VehicleRoutingProblemSolution> 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();
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -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);
|
||||
//
|
||||
// }
|
||||
//
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
// }
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
// }
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
node,quantity
|
||||
2,4
|
||||
3,6
|
||||
4,5
|
||||
5,4
|
||||
6,7
|
||||
7,3
|
||||
8,5
|
||||
9,4
|
||||
10,4
|
||||
Loading…
Add table
Add a link
Reference in a new issue