1
0
Fork 0
mirror of https://github.com/graphhopper/jsprit.git synced 2020-01-24 07:45:05 +01:00

adjusted load updater to cope with multiple capacity dimensions

This commit is contained in:
oblonski 2014-03-01 17:59:18 +01:00
parent f6bf46ca9a
commit 217c824506
24 changed files with 380 additions and 198 deletions

View file

@ -0,0 +1,174 @@
package jsprit.core.algorithm.state;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import java.util.Arrays;
import java.util.Collections;
import jsprit.core.problem.Capacity;
import jsprit.core.problem.cost.VehicleRoutingTransportCosts;
import jsprit.core.problem.driver.Driver;
import jsprit.core.problem.job.Delivery;
import jsprit.core.problem.job.Job;
import jsprit.core.problem.job.Pickup;
import jsprit.core.problem.solution.route.ReverseRouteActivityVisitor;
import jsprit.core.problem.solution.route.RouteActivityVisitor;
import jsprit.core.problem.solution.route.VehicleRoute;
import jsprit.core.problem.solution.route.state.StateFactory;
import jsprit.core.problem.vehicle.Vehicle;
import org.junit.Test;
public class UpdateCapacityUtilizationForwardLookingTest {
@Test
public void whenVehicleRouteHasPickupAndDelivery_futureMaxLoadAtEachActivityShouldBeCalculatedCorrectly(){
StateManager stateManager = new StateManager(mock(VehicleRoutingTransportCosts.class));
UpdateLoads updateLoad = new UpdateLoads(stateManager);
UpdateMaxCapacityUtilisationAtActivitiesByLookingForwardInRoute updateMaxLoad = new UpdateMaxCapacityUtilisationAtActivitiesByLookingForwardInRoute(stateManager);
RouteActivityVisitor routeActivityVisitor = new RouteActivityVisitor();
routeActivityVisitor.addActivityVisitor(updateLoad);
ReverseRouteActivityVisitor revRouteActivityVisitor = new ReverseRouteActivityVisitor();
revRouteActivityVisitor.addActivityVisitor(updateMaxLoad);
Pickup pickup = mock(Pickup.class);
when(pickup.getSize()).thenReturn(Capacity.Builder.newInstance().addDimension(0, 1).build());
Delivery delivery = mock(Delivery.class);
when(delivery.getSize()).thenReturn(Capacity.Builder.newInstance().addDimension(0, 10).build());
VehicleRoute route = VehicleRoute.Builder.newInstance(mock(Vehicle.class), mock(Driver.class))
.addService(pickup).addService(delivery).build();
updateLoad.informInsertionStarts(Arrays.asList(route), Collections.<Job>emptyList());
routeActivityVisitor.visit(route);
revRouteActivityVisitor.visit(route);
assertEquals(11,stateManager.getActivityState(route.getActivities().get(0), StateFactory.FUTURE_MAXLOAD, Capacity.class).get(0),0.1);
assertEquals(1,stateManager.getActivityState(route.getActivities().get(1), StateFactory.FUTURE_MAXLOAD, Capacity.class).get(0),0.1);
}
@Test
public void whenVehicleRouteHasPickupAndDeliveryWithMultipleCapDims_futureMaxLoadAtEachActivityShouldBeCalculatedCorrectly(){
StateManager stateManager = new StateManager(mock(VehicleRoutingTransportCosts.class));
UpdateLoads updateLoad = new UpdateLoads(stateManager);
UpdateMaxCapacityUtilisationAtActivitiesByLookingForwardInRoute updateMaxLoad = new UpdateMaxCapacityUtilisationAtActivitiesByLookingForwardInRoute(stateManager);
RouteActivityVisitor routeActivityVisitor = new RouteActivityVisitor();
routeActivityVisitor.addActivityVisitor(updateLoad);
ReverseRouteActivityVisitor revRouteActivityVisitor = new ReverseRouteActivityVisitor();
revRouteActivityVisitor.addActivityVisitor(updateMaxLoad);
Pickup pickup = mock(Pickup.class);
when(pickup.getSize()).thenReturn(Capacity.Builder.newInstance().addDimension(0, 1)
.addDimension(1, 5).build());
Delivery delivery = mock(Delivery.class);
when(delivery.getSize()).thenReturn(Capacity.Builder.newInstance().addDimension(0, 10)
.addDimension(1, 3).build());
VehicleRoute route = VehicleRoute.Builder.newInstance(mock(Vehicle.class), mock(Driver.class))
.addService(pickup).addService(delivery).build();
updateLoad.informInsertionStarts(Arrays.asList(route), Collections.<Job>emptyList());
routeActivityVisitor.visit(route);
revRouteActivityVisitor.visit(route);
assertEquals(11,stateManager.getActivityState(route.getActivities().get(0), StateFactory.FUTURE_MAXLOAD, Capacity.class).get(0),0.1);
assertEquals(8,stateManager.getActivityState(route.getActivities().get(0), StateFactory.FUTURE_MAXLOAD, Capacity.class).get(1),0.1);
assertEquals(1,stateManager.getActivityState(route.getActivities().get(1), StateFactory.FUTURE_MAXLOAD, Capacity.class).get(0),0.1);
assertEquals(5,stateManager.getActivityState(route.getActivities().get(1), StateFactory.FUTURE_MAXLOAD, Capacity.class).get(1),0.1);
}
@Test
public void whenVehicleRouteHasPickupAndDeliveryAndPickupWithMultipleCapDims_futureMaxLoadAtEachActivityShouldBeCalculatedCorrectly(){
StateManager stateManager = new StateManager(mock(VehicleRoutingTransportCosts.class));
UpdateLoads updateLoad = new UpdateLoads(stateManager);
UpdateMaxCapacityUtilisationAtActivitiesByLookingForwardInRoute updateMaxLoad = new UpdateMaxCapacityUtilisationAtActivitiesByLookingForwardInRoute(stateManager);
RouteActivityVisitor routeActivityVisitor = new RouteActivityVisitor();
routeActivityVisitor.addActivityVisitor(updateLoad);
ReverseRouteActivityVisitor revRouteActivityVisitor = new ReverseRouteActivityVisitor();
revRouteActivityVisitor.addActivityVisitor(updateMaxLoad);
Pickup pickup = mock(Pickup.class);
when(pickup.getSize()).thenReturn(Capacity.Builder.newInstance().addDimension(0, 1)
.addDimension(1, 5).build());
Delivery delivery = mock(Delivery.class);
when(delivery.getSize()).thenReturn(Capacity.Builder.newInstance().addDimension(0, 10)
.addDimension(1, 3).build());
Pickup pickup2 = mock(Pickup.class);
when(pickup2.getSize()).thenReturn(Capacity.Builder.newInstance().addDimension(0, 3)
.addDimension(1, 8).build());
VehicleRoute route = VehicleRoute.Builder.newInstance(mock(Vehicle.class), mock(Driver.class))
.addService(pickup).addService(delivery).addService(pickup2).build();
updateLoad.informInsertionStarts(Arrays.asList(route), Collections.<Job>emptyList());
routeActivityVisitor.visit(route);
revRouteActivityVisitor.visit(route);
assertEquals(11,stateManager.getActivityState(route.getActivities().get(0), StateFactory.FUTURE_MAXLOAD, Capacity.class).get(0));
assertEquals(13,stateManager.getActivityState(route.getActivities().get(0), StateFactory.FUTURE_MAXLOAD, Capacity.class).get(1));
assertEquals(4,stateManager.getActivityState(route.getActivities().get(1), StateFactory.FUTURE_MAXLOAD, Capacity.class).get(0));
assertEquals(13,stateManager.getActivityState(route.getActivities().get(1), StateFactory.FUTURE_MAXLOAD, Capacity.class).get(1));
assertEquals(4,stateManager.getActivityState(route.getActivities().get(2), StateFactory.FUTURE_MAXLOAD, Capacity.class).get(0));
assertEquals(13,stateManager.getActivityState(route.getActivities().get(2), StateFactory.FUTURE_MAXLOAD, Capacity.class).get(1));
}
@Test
public void whenVehicleRouteHasPickupAndDeliveryAndPickupWithMultipleCapDims_futureMaxLoadAtEachActivityShouldBeCalculatedCorrectly_v2(){
StateManager stateManager = new StateManager(mock(VehicleRoutingTransportCosts.class));
UpdateLoads updateLoad = new UpdateLoads(stateManager);
UpdateMaxCapacityUtilisationAtActivitiesByLookingForwardInRoute updateMaxLoad = new UpdateMaxCapacityUtilisationAtActivitiesByLookingForwardInRoute(stateManager);
RouteActivityVisitor routeActivityVisitor = new RouteActivityVisitor();
routeActivityVisitor.addActivityVisitor(updateLoad);
ReverseRouteActivityVisitor revRouteActivityVisitor = new ReverseRouteActivityVisitor();
revRouteActivityVisitor.addActivityVisitor(updateMaxLoad);
Pickup pickup = mock(Pickup.class);
when(pickup.getSize()).thenReturn(Capacity.Builder.newInstance().addDimension(0, 1)
.addDimension(1, 5).build());
Delivery delivery = mock(Delivery.class);
when(delivery.getSize()).thenReturn(Capacity.Builder.newInstance().addDimension(0, 10)
.addDimension(1, 3).build());
Pickup pickup2 = mock(Pickup.class);
when(pickup2.getSize()).thenReturn(Capacity.Builder.newInstance().addDimension(0, 3)
.addDimension(1, 8).addDimension(4, 29).build());
VehicleRoute route = VehicleRoute.Builder.newInstance(mock(Vehicle.class), mock(Driver.class))
.addService(pickup).addService(delivery).addService(pickup2).build();
updateLoad.informInsertionStarts(Arrays.asList(route), Collections.<Job>emptyList());
routeActivityVisitor.visit(route);
revRouteActivityVisitor.visit(route);
assertEquals(11,stateManager.getActivityState(route.getActivities().get(0), StateFactory.FUTURE_MAXLOAD, Capacity.class).get(0));
assertEquals(13,stateManager.getActivityState(route.getActivities().get(0), StateFactory.FUTURE_MAXLOAD, Capacity.class).get(1));
assertEquals(29,stateManager.getActivityState(route.getActivities().get(0), StateFactory.FUTURE_MAXLOAD, Capacity.class).get(4));
assertEquals(4,stateManager.getActivityState(route.getActivities().get(1), StateFactory.FUTURE_MAXLOAD, Capacity.class).get(0));
assertEquals(13,stateManager.getActivityState(route.getActivities().get(1), StateFactory.FUTURE_MAXLOAD, Capacity.class).get(1));
assertEquals(29,stateManager.getActivityState(route.getActivities().get(1), StateFactory.FUTURE_MAXLOAD, Capacity.class).get(4));
assertEquals(4,stateManager.getActivityState(route.getActivities().get(2), StateFactory.FUTURE_MAXLOAD, Capacity.class).get(0));
assertEquals(13,stateManager.getActivityState(route.getActivities().get(2), StateFactory.FUTURE_MAXLOAD, Capacity.class).get(1));
}
}

View file

@ -23,9 +23,9 @@ public class DeliverServiceTest {
@Test
public void whenCallingCapacity_itShouldReturnCorrectCapacity(){
assertEquals(-10,deliver.getCapacity().get(0));
assertEquals(-100,deliver.getCapacity().get(1));
assertEquals(-1000,deliver.getCapacity().get(2));
assertEquals(-10,deliver.getSize().get(0));
assertEquals(-100,deliver.getSize().get(1));
assertEquals(-1000,deliver.getSize().get(2));
}
@SuppressWarnings("deprecation")
@ -67,9 +67,9 @@ public class DeliverServiceTest {
assertEquals(1.,copy.getTheoreticalEarliestOperationStartTime(),0.01);
assertEquals(2.,copy.getTheoreticalLatestOperationStartTime(),0.01);
assertEquals("loc",copy.getLocationId());
assertEquals(-10,copy.getCapacity().get(0));
assertEquals(-100,copy.getCapacity().get(1));
assertEquals(-1000,copy.getCapacity().get(2));
assertEquals(-10,copy.getSize().get(0));
assertEquals(-100,copy.getSize().get(1));
assertEquals(-1000,copy.getSize().get(2));
assertTrue(copy!=deliver);
}

View file

@ -25,9 +25,9 @@ public class DeliverShipmentTest {
@Test
public void whenCallingCapacity_itShouldReturnCorrectCapacity(){
assertEquals(-10,deliver.getCapacity().get(0));
assertEquals(-100,deliver.getCapacity().get(1));
assertEquals(-1000,deliver.getCapacity().get(2));
assertEquals(-10,deliver.getSize().get(0));
assertEquals(-100,deliver.getSize().get(1));
assertEquals(-1000,deliver.getSize().get(2));
}
@SuppressWarnings("deprecation")
@ -69,9 +69,9 @@ public class DeliverShipmentTest {
assertEquals(3.,copy.getTheoreticalEarliestOperationStartTime(),0.01);
assertEquals(4.,copy.getTheoreticalLatestOperationStartTime(),0.01);
assertEquals("deliveryLoc",copy.getLocationId());
assertEquals(-10,copy.getCapacity().get(0));
assertEquals(-100,copy.getCapacity().get(1));
assertEquals(-1000,copy.getCapacity().get(2));
assertEquals(-10,copy.getSize().get(0));
assertEquals(-100,copy.getSize().get(1));
assertEquals(-1000,copy.getSize().get(2));
assertTrue(copy!=deliver);
}
@ -81,8 +81,8 @@ public class DeliverShipmentTest {
Shipment shipment = Shipment.Builder.newInstance("s").setPickupLocation("pickLoc").setDeliveryLocation("delLoc")
.addSizeDimension(0, 10).addSizeDimension(1, 100).build();
PickupShipment pick = new PickupShipment(shipment);
assertEquals(10,pick.getCapacity().get(0));
assertEquals(100,pick.getCapacity().get(1));
assertEquals(10,pick.getSize().get(0));
assertEquals(100,pick.getSize().get(1));
}
}

View file

@ -10,7 +10,7 @@ public class EndTest {
@Test
public void whenCallingCapacity_itShouldReturnEmptyCapacity(){
End end = End.newInstance("loc", 0., 0.);
assertEquals(0,end.getCapacity().get(0));
assertEquals(0,end.getSize().get(0));
}
@Test

View file

@ -23,9 +23,9 @@ public class PickupServiceTest {
@Test
public void whenCallingCapacity_itShouldReturnCorrectCapacity(){
assertEquals(10,pickup.getCapacity().get(0));
assertEquals(100,pickup.getCapacity().get(1));
assertEquals(1000,pickup.getCapacity().get(2));
assertEquals(10,pickup.getSize().get(0));
assertEquals(100,pickup.getSize().get(1));
assertEquals(1000,pickup.getSize().get(2));
}
@SuppressWarnings("deprecation")
@ -67,9 +67,9 @@ public class PickupServiceTest {
assertEquals(1.,copy.getTheoreticalEarliestOperationStartTime(),0.01);
assertEquals(2.,copy.getTheoreticalLatestOperationStartTime(),0.01);
assertEquals("loc",copy.getLocationId());
assertEquals(10,copy.getCapacity().get(0));
assertEquals(100,copy.getCapacity().get(1));
assertEquals(1000,copy.getCapacity().get(2));
assertEquals(10,copy.getSize().get(0));
assertEquals(100,copy.getSize().get(1));
assertEquals(1000,copy.getSize().get(2));
assertTrue(copy!=pickup);
}

View file

@ -25,9 +25,9 @@ public class PickupShipmentTest {
@Test
public void whenCallingCapacity_itShouldReturnCorrectCapacity(){
assertEquals(10,pickup.getCapacity().get(0));
assertEquals(100,pickup.getCapacity().get(1));
assertEquals(1000,pickup.getCapacity().get(2));
assertEquals(10,pickup.getSize().get(0));
assertEquals(100,pickup.getSize().get(1));
assertEquals(1000,pickup.getSize().get(2));
}
@SuppressWarnings("deprecation")
@ -69,9 +69,9 @@ public class PickupShipmentTest {
assertEquals(1.,copy.getTheoreticalEarliestOperationStartTime(),0.01);
assertEquals(2.,copy.getTheoreticalLatestOperationStartTime(),0.01);
assertEquals("pickupLoc",copy.getLocationId());
assertEquals(10,copy.getCapacity().get(0));
assertEquals(100,copy.getCapacity().get(1));
assertEquals(1000,copy.getCapacity().get(2));
assertEquals(10,copy.getSize().get(0));
assertEquals(100,copy.getSize().get(1));
assertEquals(1000,copy.getSize().get(2));
assertTrue(copy!=pickup);
}
@ -81,8 +81,8 @@ public class PickupShipmentTest {
Shipment shipment = Shipment.Builder.newInstance("s").setPickupLocation("pickLoc").setDeliveryLocation("delLoc")
.addSizeDimension(0, 10).addSizeDimension(1, 100).build();
PickupShipment pick = new PickupShipment(shipment);
assertEquals(10,pick.getCapacity().get(0));
assertEquals(100,pick.getCapacity().get(1));
assertEquals(10,pick.getSize().get(0));
assertEquals(100,pick.getSize().get(1));
}
}

View file

@ -42,9 +42,9 @@ public class ServiceActivityTest {
@Test
public void whenCallingCapacity_itShouldReturnCorrectCapacity(){
assertEquals(10,serviceActivity.getCapacity().get(0));
assertEquals(100,serviceActivity.getCapacity().get(1));
assertEquals(1000,serviceActivity.getCapacity().get(2));
assertEquals(10,serviceActivity.getSize().get(0));
assertEquals(100,serviceActivity.getSize().get(1));
assertEquals(1000,serviceActivity.getSize().get(2));
}

View file

@ -9,7 +9,7 @@ public class StartTest {
@Test
public void whenCallingCapacity_itShouldReturnEmptyCapacity(){
Start start = Start.newInstance("loc", 0., 0.);
assertEquals(0,start.getCapacity().get(0));
assertEquals(0,start.getSize().get(0));
}
@Test