From 149b657238ea5a513c3a7658b3abb5d3d2ab1980 Mon Sep 17 00:00:00 2001 From: oblonski Date: Fri, 16 Oct 2015 14:49:46 +0200 Subject: [PATCH] index based route state memory --- .../core/algorithm/state/StateManager.java | 148 +++++++++++------- ...LocalActivityInsertionCostsCalculator.java | 4 +- ...uteLevelServiceInsertionCostEstimator.java | 5 +- .../core/algorithm/state/LoadStateTest.java | 4 +- .../algorithm/state/StateManagerTest.java | 46 +++--- .../state/UpdatePracticalTimeWindowTest.java | 5 +- .../core/analysis/SolutionAnalyserTest.java | 2 +- .../constraint/LoadConstraintTest.java | 4 +- .../ServiceLoadRouteLevelConstraintTest.java | 4 +- 9 files changed, 140 insertions(+), 82 deletions(-) diff --git a/jsprit-core/src/main/java/jsprit/core/algorithm/state/StateManager.java b/jsprit-core/src/main/java/jsprit/core/algorithm/state/StateManager.java index db4d992f..43aec4a8 100644 --- a/jsprit-core/src/main/java/jsprit/core/algorithm/state/StateManager.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/state/StateManager.java @@ -98,16 +98,22 @@ public class StateManager implements RouteAndActivityStateGetter, IterationStart private int nuVehicleTypeKeys; - private Object[][] activity_states; + private Object[][] activityStates; - private Object[][][] vehicle_dependent_activity_states; + private Object[][][] vehicleDependentActivityStates; - private Map route_state_map; + private Map routeStateMap; - private Map vehicle_dependent_route_state_map; + private Map vehicleDependentRouteStateMap; + + private Object[][] routeStatesArr; + + private Object[][][] vehicleDependentRouteStatesArr; private VehicleRoutingProblem vrp; + private final boolean isIndexedBased; + int getMaxIndexOfVehicleTypeIdentifiers() { return nuVehicleTypeKeys; } @@ -124,11 +130,11 @@ public class StateManager implements RouteAndActivityStateGetter, IterationStart */ public StateId createStateId(String name) { if (createdStateIds.containsKey(name)) return createdStateIds.get(name); - if (stateIndexCounter >= activity_states[0].length) { - activity_states = new Object[vrp.getNuActivities() + 1][stateIndexCounter + 1]; -// route_states = new Object[vrp.getNuActivities()+1][stateIndexCounter+1]; - vehicle_dependent_activity_states = new Object[nuActivities][nuVehicleTypeKeys][stateIndexCounter + 1]; -// vehicle_dependent_route_states = new Object[nuActivities][nuVehicleTypeKeys][stateIndexCounter+1]; + if (stateIndexCounter >= activityStates[0].length) { + activityStates = new Object[vrp.getNuActivities() + 1][stateIndexCounter + 1]; + vehicleDependentActivityStates = new Object[nuActivities][nuVehicleTypeKeys][stateIndexCounter + 1]; + routeStatesArr = new Object[vrp.getNuActivities()+1][stateIndexCounter+1]; + vehicleDependentRouteStatesArr = new Object[nuActivities][nuVehicleTypeKeys][stateIndexCounter+1]; } StateId id = StateFactory.createId(name, stateIndexCounter); incStateIndexCounter(); @@ -152,12 +158,18 @@ public class StateManager implements RouteAndActivityStateGetter, IterationStart this.vrp = vehicleRoutingProblem; nuActivities = Math.max(10, vrp.getNuActivities() + 1); nuVehicleTypeKeys = Math.max(3, getNuVehicleTypes(vrp) + 2); - activity_states = new Object[nuActivities][initialStateArrayLength]; -// route_states = new Object[nuActivities][initialStateArrayLength]; - vehicle_dependent_activity_states = new Object[nuActivities][nuVehicleTypeKeys][initialStateArrayLength]; -// vehicle_dependent_route_states = new Object[nuActivities][nuVehicleTypeKeys][initialStateArrayLength]; - route_state_map = new HashMap(); - vehicle_dependent_route_state_map = new HashMap(); + activityStates = new Object[nuActivities][initialStateArrayLength]; + vehicleDependentActivityStates = new Object[nuActivities][nuVehicleTypeKeys][initialStateArrayLength]; + if(vehicleRoutingProblem.getFleetSize().equals(VehicleRoutingProblem.FleetSize.FINITE)){ + isIndexedBased = true; + routeStatesArr = new Object[vrp.getVehicles().size() + 2][initialStateArrayLength]; + vehicleDependentRouteStatesArr = new Object[vrp.getVehicles().size() + 2][nuVehicleTypeKeys][initialStateArrayLength]; + } + else { + isIndexedBased = false; + routeStateMap = new HashMap(); + vehicleDependentRouteStateMap = new HashMap(); + } } private int getNuVehicleTypes(VehicleRoutingProblem vrp) { @@ -198,13 +210,17 @@ public class StateManager implements RouteAndActivityStateGetter, IterationStart * Clears all states, i.e. set all value to null. */ public void clear() { - fill_twoDimArr(activity_states, null); -// fill_twoDimArr(route_states, null); - fill_threeDimArr(vehicle_dependent_activity_states, null); -// fill_threeDimArr(vehicle_dependent_route_states, null); + fill_twoDimArr(activityStates, null); + fill_threeDimArr(vehicleDependentActivityStates, null); + if(isIndexedBased) { + fill_twoDimArr(routeStatesArr, null); + fill_threeDimArr(vehicleDependentRouteStatesArr, null); + } + else{ + routeStateMap.clear(); + vehicleDependentRouteStateMap.clear(); + } problemStates_.clear(); - route_state_map.clear(); - vehicle_dependent_route_state_map.clear(); } private void fill_threeDimArr(Object[][][] states, Object o) { @@ -239,9 +255,9 @@ public class StateManager implements RouteAndActivityStateGetter, IterationStart if (act.getIndex() < 0) return null; T state; try { - state = type.cast(activity_states[act.getIndex()][stateId.getIndex()]); + state = type.cast(activityStates[act.getIndex()][stateId.getIndex()]); } catch (ClassCastException e) { - throw getClassCastException(e, stateId, type.toString(), activity_states[act.getIndex()][stateId.getIndex()].getClass().toString()); + throw getClassCastException(e, stateId, type.toString(), activityStates[act.getIndex()][stateId.getIndex()].getClass().toString()); } return state; } @@ -257,7 +273,7 @@ public class StateManager implements RouteAndActivityStateGetter, IterationStart */ public boolean hasActivityState(TourActivity act, Vehicle vehicle, StateId stateId) { if (act.getIndex() == 0) throw new IllegalStateException("activity index is 0. this should not be."); - return vehicle_dependent_activity_states[act.getIndex()][vehicle.getVehicleTypeIdentifier().getIndex()][stateId.getIndex()] != null; + return vehicleDependentActivityStates[act.getIndex()][vehicle.getVehicleTypeIdentifier().getIndex()][stateId.getIndex()] != null; } /** @@ -280,9 +296,9 @@ public class StateManager implements RouteAndActivityStateGetter, IterationStart if (act.getIndex() < 0) return null; //act.getIndex() < 0 indicates that act is either Start (-1) or End (-2) T state; try { - state = type.cast(vehicle_dependent_activity_states[act.getIndex()][vehicle.getVehicleTypeIdentifier().getIndex()][stateId.getIndex()]); + state = type.cast(vehicleDependentActivityStates[act.getIndex()][vehicle.getVehicleTypeIdentifier().getIndex()][stateId.getIndex()]); } catch (ClassCastException e) { - Object state_class = vehicle_dependent_activity_states[act.getIndex()][vehicle.getVehicleTypeIdentifier().getIndex()][stateId.getIndex()]; + Object state_class = vehicleDependentActivityStates[act.getIndex()][vehicle.getVehicleTypeIdentifier().getIndex()][stateId.getIndex()]; throw getClassCastException(e, stateId, type.toString(), state_class.getClass().toString()); } return state; @@ -308,17 +324,21 @@ public class StateManager implements RouteAndActivityStateGetter, IterationStart public T getRouteState(VehicleRoute route, StateId stateId, Class type) { if (route.isEmpty()) return null; T state = null; - -// int index_of_first_act = route.getActivities().get(0).getIndex(); -// if(index_of_first_act == 0) throw new IllegalStateException("first activity in route has no index. this should not be."); - try { - if (route_state_map.containsKey(route)) { - state = type.cast(route_state_map.get(route)[stateId.getIndex()]); + if(isIndexedBased){ + try { + state = type.cast(routeStatesArr[route.getVehicle().getIndex()][stateId.getIndex()]); + } catch (ClassCastException e) { + throw getClassCastException(e,stateId,type.toString(),routeStatesArr[route.getVehicle().getIndex()][stateId.getIndex()].getClass().toString()); + } + } + else { + try { + if (routeStateMap.containsKey(route)) { + state = type.cast(routeStateMap.get(route)[stateId.getIndex()]); + } + } catch (ClassCastException e) { + throw getClassCastException(e, stateId, type.toString(), routeStateMap.get(route)[stateId.getIndex()].getClass().toString()); } -// state = type.cast(route_states[index_of_first_act][stateId.getIndex()]); - } catch (ClassCastException e) { - throw getClassCastException(e, stateId, type.toString(), route_state_map.get(route)[stateId.getIndex()].getClass().toString()); -// throw getClassCastException(e,stateId,type.toString(),route_states[index_of_first_act][stateId.getIndex()].getClass().toString()); } return state; } @@ -333,8 +353,8 @@ public class StateManager implements RouteAndActivityStateGetter, IterationStart */ @SuppressWarnings("UnusedDeclaration") public boolean hasRouteState(VehicleRoute route, Vehicle vehicle, StateId stateId) { - if (!vehicle_dependent_route_state_map.containsKey(route)) return false; - return vehicle_dependent_route_state_map.get(route)[vehicle.getVehicleTypeIdentifier().getIndex()][stateId.getIndex()] != null; + if (!vehicleDependentRouteStateMap.containsKey(route)) return false; + return vehicleDependentRouteStateMap.get(route)[vehicle.getVehicleTypeIdentifier().getIndex()][stateId.getIndex()] != null; // return vehicle_dependent_route_states[route.getActivities().get(0).getIndex()][vehicle.getVehicleTypeIdentifier().getIndex()][stateId.getIndex()] != null; } @@ -353,16 +373,22 @@ public class StateManager implements RouteAndActivityStateGetter, IterationStart */ public T getRouteState(VehicleRoute route, Vehicle vehicle, StateId stateId, Class type) { if (route.isEmpty()) return null; -// int index_of_first_act = route.getActivities().get(0).getIndex(); -// if(index_of_first_act == 0) throw new IllegalStateException("first activity in route has no index. this should not be."); T state = null; - try { - if (vehicle_dependent_route_state_map.containsKey(route)) { - state = type.cast(vehicle_dependent_route_state_map.get(route)[vehicle.getVehicleTypeIdentifier().getIndex()][stateId.getIndex()]); + if(isIndexedBased){ + try { + state = type.cast(vehicleDependentRouteStatesArr[route.getVehicle().getIndex()][vehicle.getVehicleTypeIdentifier().getIndex()][stateId.getIndex()]); + } catch (ClassCastException e) { + throw getClassCastException(e, stateId, type.toString(), vehicleDependentRouteStatesArr[route.getVehicle().getIndex()][vehicle.getVehicleTypeIdentifier().getIndex()][stateId.getIndex()].getClass().toString()); + } + } + else { + try { + if (vehicleDependentRouteStateMap.containsKey(route)) { + state = type.cast(vehicleDependentRouteStateMap.get(route)[vehicle.getVehicleTypeIdentifier().getIndex()][stateId.getIndex()]); + } + } catch (ClassCastException e) { + throw getClassCastException(e, stateId, type.toString(), vehicleDependentRouteStateMap.get(route)[vehicle.getVehicleTypeIdentifier().getIndex()][stateId.getIndex()].getClass().toString()); } -// state = type.cast(vehicle_dependent_route_states[index_of_first_act][vehicle.getVehicleTypeIdentifier().getIndex()][stateId.getIndex()]); - } catch (ClassCastException e) { - throw getClassCastException(e, stateId, type.toString(), vehicle_dependent_route_state_map.get(route)[vehicle.getVehicleTypeIdentifier().getIndex()][stateId.getIndex()].getClass().toString()); } return state; } @@ -413,11 +439,11 @@ public class StateManager implements RouteAndActivityStateGetter, IterationStart } void putInternalTypedActivityState(TourActivity act, StateId stateId, T state) { - activity_states[act.getIndex()][stateId.getIndex()] = state; + activityStates[act.getIndex()][stateId.getIndex()] = state; } void putInternalTypedActivityState(TourActivity act, Vehicle vehicle, StateId stateId, T state) { - vehicle_dependent_activity_states[act.getIndex()][vehicle.getVehicleTypeIdentifier().getIndex()][stateId.getIndex()] = state; + vehicleDependentActivityStates[act.getIndex()][vehicle.getVehicleTypeIdentifier().getIndex()][stateId.getIndex()] = state; } /** @@ -454,20 +480,29 @@ public class StateManager implements RouteAndActivityStateGetter, IterationStart void putTypedInternalRouteState(VehicleRoute route, StateId stateId, T state) { if (route.isEmpty()) return; - if (!route_state_map.containsKey(route)) { - route_state_map.put(route, new Object[stateIndexCounter]); + if(isIndexedBased){ + routeStatesArr[route.getVehicle().getIndex()][stateId.getIndex()] = state; + } + else { + if (!routeStateMap.containsKey(route)) { + routeStateMap.put(route, new Object[stateIndexCounter]); + } + routeStateMap.get(route)[stateId.getIndex()] = state; } - route_state_map.get(route)[stateId.getIndex()] = state; -// route_states[route.getActivities().get(0).getIndex()][stateId.getIndex()] = state; } void putTypedInternalRouteState(VehicleRoute route, Vehicle vehicle, StateId stateId, T state) { if (route.isEmpty()) return; - if (!vehicle_dependent_route_state_map.containsKey(route)) { - vehicle_dependent_route_state_map.put(route, new Object[nuVehicleTypeKeys][stateIndexCounter]); + if(isIndexedBased){ + vehicleDependentRouteStatesArr[route.getVehicle().getIndex()][vehicle.getVehicleTypeIdentifier().getIndex()][stateId.getIndex()] = state; } - vehicle_dependent_route_state_map.get(route)[vehicle.getVehicleTypeIdentifier().getIndex()][stateId.getIndex()] = state; -// vehicle_dependent_route_states[route.getActivities().get(0).getIndex()][vehicle.getVehicleTypeIdentifier().getIndex()][stateId.getIndex()] = state; + else { + if (!vehicleDependentRouteStateMap.containsKey(route)) { + vehicleDependentRouteStateMap.put(route, new Object[nuVehicleTypeKeys][stateIndexCounter]); + } + vehicleDependentRouteStateMap.get(route)[vehicle.getVehicleTypeIdentifier().getIndex()][stateId.getIndex()] = state; + } + } /** @@ -621,6 +656,7 @@ public class StateManager implements RouteAndActivityStateGetter, IterationStart addActivityVisitor(new UpdateSkills(this)); } + @Deprecated public void addCoreUpdater() { } diff --git a/jsprit-core/src/test/java/jsprit/core/algorithm/recreate/TestLocalActivityInsertionCostsCalculator.java b/jsprit-core/src/test/java/jsprit/core/algorithm/recreate/TestLocalActivityInsertionCostsCalculator.java index 036786b7..a6d4ec08 100644 --- a/jsprit-core/src/test/java/jsprit/core/algorithm/recreate/TestLocalActivityInsertionCostsCalculator.java +++ b/jsprit-core/src/test/java/jsprit/core/algorithm/recreate/TestLocalActivityInsertionCostsCalculator.java @@ -174,7 +174,9 @@ public class TestLocalActivityInsertionCostsCalculator { VehicleRoute route = VehicleRoute.Builder.newInstance(v).setJobActivityFactory(vrp.getJobActivityFactory()).addService(prevS).addService(nextS).build(); JobInsertionContext context = new JobInsertionContext(route, newS, v, null, 0.); - LocalActivityInsertionCostsCalculator calc = new LocalActivityInsertionCostsCalculator(CostFactory.createEuclideanCosts(), new WaitingTimeCosts(), new StateManager(mock(VehicleRoutingProblem.class))); + VehicleRoutingProblem vrpMock = mock(VehicleRoutingProblem.class); + when(vrpMock.getFleetSize()).thenReturn(VehicleRoutingProblem.FleetSize.INFINITE); + LocalActivityInsertionCostsCalculator calc = new LocalActivityInsertionCostsCalculator(CostFactory.createEuclideanCosts(), new WaitingTimeCosts(), new StateManager(vrpMock)); calc.setSolutionCompletenessRatio(1.); double c = calc.getCosts(context, prevAct, nextAct, newAct, 10); diff --git a/jsprit-core/src/test/java/jsprit/core/algorithm/recreate/TestRouteLevelServiceInsertionCostEstimator.java b/jsprit-core/src/test/java/jsprit/core/algorithm/recreate/TestRouteLevelServiceInsertionCostEstimator.java index b96edd59..01ca4a44 100644 --- a/jsprit-core/src/test/java/jsprit/core/algorithm/recreate/TestRouteLevelServiceInsertionCostEstimator.java +++ b/jsprit-core/src/test/java/jsprit/core/algorithm/recreate/TestRouteLevelServiceInsertionCostEstimator.java @@ -48,6 +48,7 @@ import java.util.List; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; /** * Created by schroeder on 02.07.14. @@ -103,7 +104,9 @@ public class TestRouteLevelServiceInsertionCostEstimator { }; route = VehicleRoute.Builder.newInstance(vehicle).setJobActivityFactory(activityFactory).addService(s1).addService(s2).addService(s3).build(); - stateManager = new StateManager(mock(VehicleRoutingProblem.class)); + VehicleRoutingProblem vrpMock = mock(VehicleRoutingProblem.class); + when(vrpMock.getFleetSize()).thenReturn(VehicleRoutingProblem.FleetSize.INFINITE); + stateManager = new StateManager(vrpMock); stateManager.addStateUpdater(new UpdateVariableCosts(activityCosts, routingCosts, stateManager)); stateManager.informInsertionStarts(Arrays.asList(route), Collections.emptyList()); constraintManager = new ConstraintManager(vrp, stateManager); diff --git a/jsprit-core/src/test/java/jsprit/core/algorithm/state/LoadStateTest.java b/jsprit-core/src/test/java/jsprit/core/algorithm/state/LoadStateTest.java index 5f233f16..d138cc4b 100644 --- a/jsprit-core/src/test/java/jsprit/core/algorithm/state/LoadStateTest.java +++ b/jsprit-core/src/test/java/jsprit/core/algorithm/state/LoadStateTest.java @@ -100,7 +100,9 @@ public class LoadStateTest { }); shipment_route = shipmentRouteBuilder.addPickup(shipment1).addPickup(shipment2).addDelivery(shipment2).addDelivery(shipment1).build(); - stateManager = new StateManager(mock(VehicleRoutingProblem.class)); + VehicleRoutingProblem vrpMock = mock(VehicleRoutingProblem.class); + when(vrpMock.getFleetSize()).thenReturn(VehicleRoutingProblem.FleetSize.FINITE); + stateManager = new StateManager(vrpMock); stateManager.updateLoadStates(); } 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 432144b3..c115f852 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 @@ -26,6 +26,7 @@ import jsprit.core.problem.vehicle.Vehicle; import jsprit.core.problem.vehicle.VehicleImpl; import jsprit.core.problem.vehicle.VehicleType; import jsprit.core.problem.vehicle.VehicleTypeImpl; +import org.junit.Before; import org.junit.Test; import java.util.ArrayList; @@ -53,11 +54,18 @@ public class StateManagerTest { return VehicleRoute.Builder.newInstance(vehicle).setJobActivityFactory(new ActFac()).addService(Service.Builder.newInstance("s").setLocation(Location.newInstance("loc")).build()).build(); } + private VehicleRoutingProblem vrpMock; + + @Before + public void doBefore(){ + vrpMock = mock(VehicleRoutingProblem.class); + when(vrpMock.getFleetSize()).thenReturn(VehicleRoutingProblem.FleetSize.INFINITE); + } @Test public void whenInternalRouteStateIsSet_itMustBeSetCorrectly() { VehicleRoute route = getRoute(mock(Vehicle.class)); - StateManager stateManager = new StateManager(mock(VehicleRoutingProblem.class)); + StateManager stateManager = new StateManager(vrpMock); StateId id = InternalStates.COSTS; stateManager.putTypedInternalRouteState(route, id, 10.); assertEquals(10., stateManager.getRouteState(route, id, Double.class), 0.01); @@ -66,7 +74,7 @@ public class StateManagerTest { @Test public void whenInternalRouteStateIsNotSet_itShouldReturnNull() { VehicleRoute route = getRoute(mock(Vehicle.class)); - StateManager stateManager = new StateManager(mock(VehicleRoutingProblem.class)); + StateManager stateManager = new StateManager(vrpMock); StateId id = InternalStates.COSTS; Double costs = stateManager.getRouteState(route, id, Double.class); assertTrue(costs == null); @@ -79,7 +87,7 @@ public class StateManagerTest { VehicleRoutingProblem vrp = VehicleRoutingProblem.Builder.newInstance().addVehicle(vehicle).build(); VehicleRoute route = getRoute(vehicle); - StateManager stateManager = new StateManager(mock(VehicleRoutingProblem.class)); + StateManager stateManager = new StateManager(vrpMock); StateId id = InternalStates.COSTS; stateManager.putTypedInternalRouteState(route, vehicle, id, 10.); assertEquals(10., stateManager.getRouteState(route, vehicle, id, Double.class), 0.01); @@ -92,7 +100,7 @@ public class StateManagerTest { VehicleRoutingProblem vrp = VehicleRoutingProblem.Builder.newInstance().addVehicle(vehicle).build(); VehicleRoute route = getRoute(vehicle); - StateManager stateManager = new StateManager(mock(VehicleRoutingProblem.class)); + StateManager stateManager = new StateManager(vrpMock); StateId id = InternalStates.COSTS; Double costs = stateManager.getRouteState(route, vehicle, id, Double.class); assertTrue(costs == null); @@ -101,7 +109,7 @@ public class StateManagerTest { @Test public void whenRouteStateIsSetWithGenericMethodAndBoolean_itMustBeSetCorrectly() { VehicleRoute route = getRoute(mock(Vehicle.class)); - StateManager stateManager = new StateManager(mock(VehicleRoutingProblem.class)); + StateManager stateManager = new StateManager(vrpMock); StateId id = stateManager.createStateId("myState"); stateManager.putRouteState(route, id, true); assertTrue(stateManager.getRouteState(route, id, Boolean.class)); @@ -110,7 +118,7 @@ public class StateManagerTest { @Test public void whenRouteStateIsSetWithGenericMethodAndInteger_itMustBeSetCorrectly() { VehicleRoute route = getRoute(mock(Vehicle.class)); - StateManager stateManager = new StateManager(mock(VehicleRoutingProblem.class)); + StateManager stateManager = new StateManager(vrpMock); StateId id = stateManager.createStateId("myState"); int load = 3; stateManager.putRouteState(route, id, load); @@ -121,7 +129,7 @@ public class StateManagerTest { @Test public void whenRouteStateIsSetWithGenericMethodAndCapacity_itMustBeSetCorrectly() { VehicleRoute route = getRoute(mock(Vehicle.class)); - StateManager stateManager = new StateManager(mock(VehicleRoutingProblem.class)); + StateManager stateManager = new StateManager(vrpMock); StateId id = stateManager.createStateId("myState"); Capacity capacity = Capacity.Builder.newInstance().addDimension(0, 500).build(); stateManager.putRouteState(route, id, capacity); @@ -134,7 +142,7 @@ public class StateManagerTest { public void whenActivityStateIsSetWithGenericMethodAndBoolean_itMustBeSetCorrectly() { TourActivity activity = mock(TourActivity.class); when(activity.getIndex()).thenReturn(1); - StateManager stateManager = new StateManager(mock(VehicleRoutingProblem.class)); + StateManager stateManager = new StateManager(vrpMock); StateId id = stateManager.createStateId("myState"); stateManager.putActivityState(activity, id, true); assertTrue(stateManager.getActivityState(activity, id, Boolean.class)); @@ -144,7 +152,7 @@ public class StateManagerTest { public void whenActivityStateIsSetWithGenericMethodAndInteger_itMustBeSetCorrectly() { TourActivity activity = mock(TourActivity.class); when(activity.getIndex()).thenReturn(1); - StateManager stateManager = new StateManager(mock(VehicleRoutingProblem.class)); + StateManager stateManager = new StateManager(vrpMock); StateId id = stateManager.createStateId("myState"); int load = 3; stateManager.putActivityState(activity, id, load); @@ -156,7 +164,7 @@ public class StateManagerTest { public void whenActivityStateIsSetWithGenericMethodAndCapacity_itMustBeSetCorrectly() { TourActivity activity = mock(TourActivity.class); when(activity.getIndex()).thenReturn(1); - StateManager stateManager = new StateManager(mock(VehicleRoutingProblem.class)); + StateManager stateManager = new StateManager(vrpMock); StateId id = stateManager.createStateId("myState"); Capacity capacity = Capacity.Builder.newInstance().addDimension(0, 500).build(); stateManager.putActivityState(activity, id, capacity); @@ -166,7 +174,7 @@ public class StateManagerTest { @Test public void whenProblemStateIsSet_itMustBeSetCorrectly() { - StateManager stateManager = new StateManager(mock(VehicleRoutingProblem.class)); + StateManager stateManager = new StateManager(vrpMock); StateId id = stateManager.createStateId("problemState"); stateManager.putProblemState(id, Boolean.class, true); boolean problemState = stateManager.getProblemState(id, Boolean.class); @@ -175,7 +183,7 @@ public class StateManagerTest { @Test(expected = NullPointerException.class) public void whenProblemStateIsSetAndStateManagerClearedAfterwards_itThrowsException() { - StateManager stateManager = new StateManager(mock(VehicleRoutingProblem.class)); + StateManager stateManager = new StateManager(vrpMock); StateId id = stateManager.createStateId("problemState"); stateManager.putProblemState(id, Boolean.class, true); stateManager.clear(); @@ -185,7 +193,7 @@ public class StateManagerTest { @Test public void whenProblemStateIsSetAndStateManagerClearedAfterwards_itReturnsNull() { - StateManager stateManager = new StateManager(mock(VehicleRoutingProblem.class)); + StateManager stateManager = new StateManager(vrpMock); StateId id = StateFactory.createId("problemState"); stateManager.putProblemState(id, Boolean.class, true); stateManager.clear(); @@ -195,14 +203,14 @@ public class StateManagerTest { @Test public void whenCreatingNewState_itShouldHaveAnIndex() { - StateManager stateManager = new StateManager(mock(VehicleRoutingProblem.class)); + StateManager stateManager = new StateManager(vrpMock); StateId stateId = stateManager.createStateId("foo-state"); assertEquals(21, stateId.getIndex()); } @Test public void whenCreatingNewStates_theyShouldHaveAnIndex() { - StateManager stateManager = new StateManager(mock(VehicleRoutingProblem.class)); + StateManager stateManager = new StateManager(vrpMock); StateId fooState = stateManager.createStateId("foo-state"); StateId foofooState = stateManager.createStateId("foo-foo-state"); assertEquals(21, fooState.getIndex()); @@ -211,7 +219,7 @@ public class StateManagerTest { @Test public void whenCreatingTwoStatesWithTheSameName_theyShouldHaveTheSameIndex() { - StateManager stateManager = new StateManager(mock(VehicleRoutingProblem.class)); + StateManager stateManager = new StateManager(vrpMock); StateId fooState = stateManager.createStateId("foo-state"); StateId foofooState = stateManager.createStateId("foo-state"); assertEquals(21, fooState.getIndex()); @@ -224,7 +232,7 @@ public class StateManagerTest { //noinspection UnusedDeclaration VehicleRoutingProblem vrp = VehicleRoutingProblem.Builder.newInstance().addVehicle(vehicle).build(); VehicleRoute route = getRoute(vehicle); - StateManager stateManager = new StateManager(mock(VehicleRoutingProblem.class)); + StateManager stateManager = new StateManager(vrpMock); StateId id = stateManager.createStateId("myState"); Capacity capacity = Capacity.Builder.newInstance().addDimension(0, 500).build(); stateManager.putRouteState(route, vehicle, id, capacity); @@ -237,7 +245,7 @@ public class StateManagerTest { VehicleImpl vehicle = VehicleImpl.Builder.newInstance("v").setStartLocation(Location.newInstance("loc")).build(); //noinspection UnusedDeclaration VehicleRoutingProblem vrp = VehicleRoutingProblem.Builder.newInstance().addVehicle(vehicle).build(); - StateManager stateManager = new StateManager(mock(VehicleRoutingProblem.class)); + StateManager stateManager = new StateManager(vrpMock); StateId id = stateManager.createStateId("myState"); Capacity capacity = Capacity.Builder.newInstance().addDimension(0, 500).build(); TourActivity act = mock(TourActivity.class); @@ -253,7 +261,7 @@ public class StateManagerTest { //noinspection UnusedDeclaration VehicleRoutingProblem vrp = VehicleRoutingProblem.Builder.newInstance().addVehicle(vehicle).build(); VehicleRoute route = getRoute(vehicle); - StateManager stateManager = new StateManager(mock(VehicleRoutingProblem.class)); + StateManager stateManager = new StateManager(vrpMock); StateId id = stateManager.createStateId("vehicleParam"); double distanceParam = vehicle.getType().getVehicleCostParams().perDistanceUnit; stateManager.putRouteState(route, vehicle, id, distanceParam); diff --git a/jsprit-core/src/test/java/jsprit/core/algorithm/state/UpdatePracticalTimeWindowTest.java b/jsprit-core/src/test/java/jsprit/core/algorithm/state/UpdatePracticalTimeWindowTest.java index 143dd3df..5b97b4a5 100644 --- a/jsprit-core/src/test/java/jsprit/core/algorithm/state/UpdatePracticalTimeWindowTest.java +++ b/jsprit-core/src/test/java/jsprit/core/algorithm/state/UpdatePracticalTimeWindowTest.java @@ -41,6 +41,7 @@ import java.util.List; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; public class UpdatePracticalTimeWindowTest { @@ -57,7 +58,9 @@ public class UpdatePracticalTimeWindowTest { routingCosts = CostFactory.createManhattanCosts(); - stateManager = new StateManager(mock(VehicleRoutingProblem.class)); + VehicleRoutingProblem vrpMock = mock(VehicleRoutingProblem.class); + when(vrpMock.getFleetSize()).thenReturn(VehicleRoutingProblem.FleetSize.FINITE); + stateManager = new StateManager(vrpMock); reverseActivityVisitor = new ReverseRouteActivityVisitor(); reverseActivityVisitor.addActivityVisitor(new UpdatePracticalTimeWindows(stateManager, routingCosts)); diff --git a/jsprit-core/src/test/java/jsprit/core/analysis/SolutionAnalyserTest.java b/jsprit-core/src/test/java/jsprit/core/analysis/SolutionAnalyserTest.java index a3801474..1d1c3e4f 100644 --- a/jsprit-core/src/test/java/jsprit/core/analysis/SolutionAnalyserTest.java +++ b/jsprit-core/src/test/java/jsprit/core/analysis/SolutionAnalyserTest.java @@ -98,7 +98,7 @@ public class SolutionAnalyserTest { VehicleRoutingProblem.Builder vrpBuilder = VehicleRoutingProblem.Builder.newInstance().addVehicle(vehicle) .addVehicle(vehicle2) .addJob(s1) - .addJob(s2).addJob(shipment1).addJob(s3).addJob(s4).addJob(shipment2).setFleetSize(VehicleRoutingProblem.FleetSize.FINITE); + .addJob(s2).addJob(shipment1).addJob(s3).addJob(s4).addJob(shipment2).setFleetSize(VehicleRoutingProblem.FleetSize.INFINITE); vrpBuilder.setRoutingCost(new ManhattanCosts(vrpBuilder.getLocations())); vrp = vrpBuilder.build(); diff --git a/jsprit-core/src/test/java/jsprit/core/problem/constraint/LoadConstraintTest.java b/jsprit-core/src/test/java/jsprit/core/problem/constraint/LoadConstraintTest.java index 0baf36c6..193e2186 100644 --- a/jsprit-core/src/test/java/jsprit/core/problem/constraint/LoadConstraintTest.java +++ b/jsprit-core/src/test/java/jsprit/core/problem/constraint/LoadConstraintTest.java @@ -103,7 +103,9 @@ public class LoadConstraintTest { }); shipment_route = shipmentRouteBuilder.addPickup(shipment1).addPickup(shipment2).addDelivery(shipment2).addDelivery(shipment1).build(); - stateManager = new StateManager(mock(VehicleRoutingProblem.class)); + VehicleRoutingProblem vrpMock = mock(VehicleRoutingProblem.class); + when(vrpMock.getFleetSize()).thenReturn(VehicleRoutingProblem.FleetSize.FINITE); + stateManager = new StateManager(vrpMock); stateManager.updateLoadStates(); } diff --git a/jsprit-core/src/test/java/jsprit/core/problem/constraint/ServiceLoadRouteLevelConstraintTest.java b/jsprit-core/src/test/java/jsprit/core/problem/constraint/ServiceLoadRouteLevelConstraintTest.java index e7e94757..530045ae 100644 --- a/jsprit-core/src/test/java/jsprit/core/problem/constraint/ServiceLoadRouteLevelConstraintTest.java +++ b/jsprit-core/src/test/java/jsprit/core/problem/constraint/ServiceLoadRouteLevelConstraintTest.java @@ -70,7 +70,9 @@ public class ServiceLoadRouteLevelConstraintTest { constraint = new ServiceLoadRouteLevelConstraint(stateGetter); - stateManager = new StateManager(mock(VehicleRoutingProblem.class)); + VehicleRoutingProblem vrpMock = mock(VehicleRoutingProblem.class); + when(vrpMock.getFleetSize()).thenReturn(VehicleRoutingProblem.FleetSize.INFINITE); + stateManager = new StateManager(vrpMock); stateManager.updateLoadStates(); }