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:
parent
f6bf46ca9a
commit
217c824506
24 changed files with 380 additions and 198 deletions
|
|
@ -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));
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue