From 1c63530fcd5655b070d3fc58e513f37e2dcdec72 Mon Sep 17 00:00:00 2001 From: oblonski <4sschroeder@gmail.com> Date: Tue, 15 Jul 2014 14:27:29 +0200 Subject: [PATCH] added indeces to main elements --- .../core/algorithm/state/StateManager.java | 79 +++++++++++++------ .../core/algorithm/state/UpdateLoads.java | 8 +- .../UpdateMaxCapacityUtilisationAtRoute.java | 2 +- .../algorithm/state/UpdateVariableCosts.java | 2 +- 4 files changed, 60 insertions(+), 31 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 10f93340..4ef93e72 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 @@ -74,10 +74,6 @@ public class StateManager implements RouteAndActivityStateGetter, IterationStart } } - - private Map vehicleRouteStates_ = new HashMap(); - -// private Map activityStates_ = new HashMap(); private States_ problemStates_ = new States_(); @@ -111,7 +107,7 @@ public class StateManager implements RouteAndActivityStateGetter, IterationStart private int initialNuStates = 20; - private int initialNuActivities = 100; + private int nuActivities; private Object[][] activity_states; @@ -159,16 +155,18 @@ public class StateManager implements RouteAndActivityStateGetter, IterationStart @Deprecated public StateManager(VehicleRoutingTransportCosts routingCosts){ this.routingCosts = routingCosts; - activity_states = new Object[initialNuActivities+1][initialNuStates]; - route_states = new Object[initialNuActivities+1][initialNuStates]; + nuActivities = 101; + activity_states = new Object[nuActivities][initialNuStates]; + route_states = new Object[nuActivities][initialNuStates]; addDefaultStates(); } public StateManager(VehicleRoutingProblem vehicleRoutingProblem){ this.routingCosts = vehicleRoutingProblem.getTransportCosts(); this.vrp = vehicleRoutingProblem; - activity_states = new Object[vrp.getNuActivities()+1][initialNuStates]; - route_states = new Object[vrp.getNuActivities()+1][initialNuStates]; + nuActivities = vrp.getNuActivities() + 1; + activity_states = new Object[nuActivities][initialNuStates]; + route_states = new Object[nuActivities][initialNuStates]; addDefaultStates(); } @@ -225,10 +223,8 @@ public class StateManager implements RouteAndActivityStateGetter, IterationStart * */ public void clear(){ -// activity_states = new Object[101][10]; - route_states = new Object[vrp.getNuActivities()+1][initialNuStates]; - vehicleRouteStates_.clear(); -// activityStates_.clear(); + activity_states = new Object[nuActivities][stateIndexCounter]; + route_states = new Object[nuActivities][stateIndexCounter]; problemStates_.clear(); } @@ -273,6 +269,10 @@ public class StateManager implements RouteAndActivityStateGetter, IterationStart @Override public T getRouteState(VehicleRoute route, StateId stateId, Class type) { if(route.isEmpty()) return getDefaultTypedRouteState(stateId,type); +// if(route.getActivities().get(0).getIndex()>=route_states.length){ +// nuActivities=route.getActivities().get(0).getIndex()+1; +// this.route_states = resizeArr(route_states,nuActivities); +// } T state = type.cast(route_states[route.getActivities().get(0).getIndex()][stateId.getIndex()]); if(state==null) return getDefaultTypedRouteState(stateId,type); return state; @@ -300,11 +300,22 @@ public class StateManager implements RouteAndActivityStateGetter, IterationStart * @param state state-value */ public void putTypedActivityState(TourActivity act, StateId stateId, Class type, T state){ - if(StateFactory.isReservedId(stateId)) StateFactory.throwReservedIdException(stateId.toString()); +// if(act.getIndex()>=activity_states.length){ +// nuActivities=act.getIndex()+1; +// this.activity_states = resizeArr(activity_states,nuActivities); +// } + if(stateId.getIndex()<10) StateFactory.throwReservedIdException(stateId.toString()); putInternalTypedActivityState(act, stateId, type, state); } - - void putInternalTypedActivityState(TourActivity act, StateId stateId, Class type, T state){ + + private Object[][] resizeArr(Object[][] states, int newLength) { + int oldSize = states.length; + Object[][] new_states = new Object[newLength][stateIndexCounter]; + System.arraycopy(states,0,new_states,0,Math.min(oldSize,newLength)); + return new_states; + } + + void putInternalTypedActivityState(TourActivity act, StateId stateId, Class type, T state){ activity_states[act.getIndex()][stateId.getIndex()]=state; } @@ -317,17 +328,35 @@ public class StateManager implements RouteAndActivityStateGetter, IterationStart *

you can retrieve the duration of myRoute then by
* double totalRouteDuration = stateManager.getRouteState(myRoute, StateFactory.createStateId("route-duration"), Double.class); * - * @param route - * @param stateId - * @param type - * @param state + * @param route for which a state needs to be memorized + * @param stateId stateId of the state value to identify it + * @param type type of state + * @param state state value */ + @Deprecated public void putTypedRouteState(VehicleRoute route, StateId stateId, Class type, T state){ - if(StateFactory.isReservedId(stateId)) StateFactory.throwReservedIdException(stateId.toString()); - putTypedInternalRouteState(route, stateId, type, state); + putTypedRouteState(route,stateId,state); } - void putTypedInternalRouteState(VehicleRoute route, StateId stateId, Class type, T state){ + /** + * Generic method to memorize state 'state' of type 'type' of route and stateId. + * + *

For example:
+ * double totalRouteDuration = 100.0;
+ * stateManager.putTypedActivityState(myRoute, StateFactory.createStateId("route-duration"), Double.class, totalRouteDuration);
+ *

you can retrieve the duration of myRoute then by
+ * double totalRouteDuration = stateManager.getRouteState(myRoute, StateFactory.createStateId("route-duration"), Double.class); + * + * @param route for which a state needs to be memorized + * @param stateId stateId of the state value to identify it + * @param state state value + */ + public void putTypedRouteState(VehicleRoute route, StateId stateId, T state){ + if(stateId.getIndex()<10) StateFactory.throwReservedIdException(stateId.toString()); + putTypedInternalRouteState(route, stateId, state); + } + + void putTypedInternalRouteState(VehicleRoute route, StateId stateId, T state){ if(route.isEmpty()) return; route_states[route.getActivities().get(0).getIndex()][stateId.getIndex()] = state; } @@ -342,7 +371,7 @@ public class StateManager implements RouteAndActivityStateGetter, IterationStart *

The following rule pertain for activity/route visitors:These visitors visits all activities/route in a route subsequently in two cases. First, if insertionStart (after ruinStrategies have removed activities from routes) * and, second, if a job has been inserted and thus if a route has changed. * - * @param updater + * @param updater the update to be added */ public void addStateUpdater(StateUpdater updater){ if(updater instanceof ActivityVisitor) addActivityVisitor((ActivityVisitor) updater); @@ -364,7 +393,7 @@ public class StateManager implements RouteAndActivityStateGetter, IterationStart *

This visitor visits all activities in a route subsequently in two cases. First, if insertionStart (after ruinStrategies have removed activities from routes) * and, second, if a job has been inserted and thus if a route has changed. * - * @param activityVistor + * @param activityVistor the activity-visitor to be added */ void addActivityVisitor(ActivityVisitor activityVistor){ routeActivityVisitor.addActivityVisitor(activityVistor); diff --git a/jsprit-core/src/main/java/jsprit/core/algorithm/state/UpdateLoads.java b/jsprit-core/src/main/java/jsprit/core/algorithm/state/UpdateLoads.java index f6f10010..101721db 100644 --- a/jsprit-core/src/main/java/jsprit/core/algorithm/state/UpdateLoads.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/state/UpdateLoads.java @@ -90,8 +90,8 @@ class UpdateLoads implements ActivityVisitor, StateUpdater, InsertionStartsListe loadAtEnd = Capacity.addup(loadAtEnd, j.getSize()); } } - stateManager.putTypedInternalRouteState(route, StateFactory.LOAD_AT_BEGINNING, Capacity.class, loadAtDepot); - stateManager.putTypedInternalRouteState(route, StateFactory.LOAD_AT_END, Capacity.class, loadAtEnd); + stateManager.putTypedInternalRouteState(route, StateFactory.LOAD_AT_BEGINNING, loadAtDepot); + stateManager.putTypedInternalRouteState(route, StateFactory.LOAD_AT_END, loadAtEnd); } @Override @@ -103,11 +103,11 @@ class UpdateLoads implements ActivityVisitor, StateUpdater, InsertionStartsListe public void informJobInserted(Job job2insert, VehicleRoute inRoute, double additionalCosts, double additionalTime) { if(job2insert instanceof Delivery){ Capacity loadAtDepot = stateManager.getRouteState(inRoute, StateFactory.LOAD_AT_BEGINNING, Capacity.class); - stateManager.putTypedInternalRouteState(inRoute, StateFactory.LOAD_AT_BEGINNING, Capacity.class, Capacity.addup(loadAtDepot, job2insert.getSize())); + stateManager.putTypedInternalRouteState(inRoute, StateFactory.LOAD_AT_BEGINNING, Capacity.addup(loadAtDepot, job2insert.getSize())); } else if(job2insert instanceof Pickup || job2insert instanceof Service){ Capacity loadAtEnd = stateManager.getRouteState(inRoute, StateFactory.LOAD_AT_END, Capacity.class); - stateManager.putTypedInternalRouteState(inRoute, StateFactory.LOAD_AT_END, Capacity.class, Capacity.addup(loadAtEnd, job2insert.getSize())); + stateManager.putTypedInternalRouteState(inRoute, StateFactory.LOAD_AT_END, Capacity.addup(loadAtEnd, job2insert.getSize())); } } diff --git a/jsprit-core/src/main/java/jsprit/core/algorithm/state/UpdateMaxCapacityUtilisationAtRoute.java b/jsprit-core/src/main/java/jsprit/core/algorithm/state/UpdateMaxCapacityUtilisationAtRoute.java index d2f47664..30a94f41 100644 --- a/jsprit-core/src/main/java/jsprit/core/algorithm/state/UpdateMaxCapacityUtilisationAtRoute.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/state/UpdateMaxCapacityUtilisationAtRoute.java @@ -65,6 +65,6 @@ class UpdateMaxCapacityUtilisationAtRoute implements ActivityVisitor, StateUpdat @Override public void finish() { - stateManager.putTypedInternalRouteState(route, StateFactory.MAXLOAD, Capacity.class, maxLoad); + stateManager.putTypedInternalRouteState(route, StateFactory.MAXLOAD, maxLoad); } } diff --git a/jsprit-core/src/main/java/jsprit/core/algorithm/state/UpdateVariableCosts.java b/jsprit-core/src/main/java/jsprit/core/algorithm/state/UpdateVariableCosts.java index 92816b05..880876e6 100644 --- a/jsprit-core/src/main/java/jsprit/core/algorithm/state/UpdateVariableCosts.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/state/UpdateVariableCosts.java @@ -109,7 +109,7 @@ public class UpdateVariableCosts implements ActivityVisitor,StateUpdater{ totalOperationCost += transportCost; totalOperationCost += actCost; - states.putTypedInternalRouteState(vehicleRoute, StateFactory.COSTS, Double.class, totalOperationCost); + states.putTypedInternalRouteState(vehicleRoute, StateFactory.COSTS, totalOperationCost); startTimeAtPrevAct = 0.0; prevAct = null;