mirror of
https://github.com/graphhopper/jsprit.git
synced 2020-01-24 07:45:05 +01:00
add javadoc to algorithm.state.StateManager
This commit is contained in:
parent
b36679452f
commit
db12002777
2 changed files with 38 additions and 28 deletions
|
|
@ -1,5 +1,5 @@
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Copyright (C) 2013 Stefan Schroeder
|
* Copyright (C) 2014 Stefan Schroeder
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
|
@ -90,7 +90,9 @@ public class StateManager implements RouteAndActivityStateGetter, IterationStart
|
||||||
|
|
||||||
private boolean updateTWs = false;
|
private boolean updateTWs = false;
|
||||||
|
|
||||||
private int stateIndexCounter = 21;
|
private final int initialNoStates = 21;
|
||||||
|
|
||||||
|
private int stateIndexCounter;
|
||||||
|
|
||||||
private Map<String,StateId> createdStateIds = new HashMap<String, StateId>();
|
private Map<String,StateId> createdStateIds = new HashMap<String, StateId>();
|
||||||
|
|
||||||
|
|
@ -144,14 +146,15 @@ public class StateManager implements RouteAndActivityStateGetter, IterationStart
|
||||||
* @param vehicleRoutingProblem the corresponding VehicleRoutingProblem
|
* @param vehicleRoutingProblem the corresponding VehicleRoutingProblem
|
||||||
*/
|
*/
|
||||||
public StateManager(VehicleRoutingProblem vehicleRoutingProblem){
|
public StateManager(VehicleRoutingProblem vehicleRoutingProblem){
|
||||||
int initialNuStates = 30;
|
stateIndexCounter = initialNoStates;
|
||||||
|
int initialStateArrayLength = 30;
|
||||||
this.vrp = vehicleRoutingProblem;
|
this.vrp = vehicleRoutingProblem;
|
||||||
nuActivities = Math.max(10, vrp.getNuActivities() + 1);
|
nuActivities = Math.max(10, vrp.getNuActivities() + 1);
|
||||||
nuVehicleTypeKeys = Math.max(3, getNuVehicleTypes(vrp) + 2);
|
nuVehicleTypeKeys = Math.max(3, getNuVehicleTypes(vrp) + 2);
|
||||||
activity_states = new Object[nuActivities][initialNuStates];
|
activity_states = new Object[nuActivities][initialStateArrayLength];
|
||||||
route_states = new Object[nuActivities][initialNuStates];
|
route_states = new Object[nuActivities][initialStateArrayLength];
|
||||||
vehicle_dependent_activity_states = new Object[nuActivities][nuVehicleTypeKeys][initialNuStates];
|
vehicle_dependent_activity_states = new Object[nuActivities][nuVehicleTypeKeys][initialStateArrayLength];
|
||||||
vehicle_dependent_route_states = new Object[nuActivities][nuVehicleTypeKeys][initialNuStates];
|
vehicle_dependent_route_states = new Object[nuActivities][nuVehicleTypeKeys][initialStateArrayLength];
|
||||||
}
|
}
|
||||||
|
|
||||||
private int getNuVehicleTypes(VehicleRoutingProblem vrp) {
|
private int getNuVehicleTypes(VehicleRoutingProblem vrp) {
|
||||||
|
|
@ -224,6 +227,7 @@ public class StateManager implements RouteAndActivityStateGetter, IterationStart
|
||||||
* @param <T> the type
|
* @param <T> the type
|
||||||
* @return the state value that is associated to the specified activity and stateId, or null if no value is associated.
|
* @return the state value that is associated to the specified activity and stateId, or null if no value is associated.
|
||||||
* @throws java.lang.ClassCastException if type class is not equal to the associated type class of the requested state value
|
* @throws java.lang.ClassCastException if type class is not equal to the associated type class of the requested state value
|
||||||
|
* @throws java.lang.IllegalStateException if <code>act.getIndex()==0</code> since this suggests that act has no index at all
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public <T> T getActivityState(TourActivity act, StateId stateId, Class<T> type) {
|
public <T> T getActivityState(TourActivity act, StateId stateId, Class<T> type) {
|
||||||
|
|
@ -246,6 +250,7 @@ public class StateManager implements RouteAndActivityStateGetter, IterationStart
|
||||||
* @param vehicle the vehicle for which a state value is associated to
|
* @param vehicle the vehicle for which a state value is associated to
|
||||||
* @param stateId the stateId which is the associated key to the problem state
|
* @param stateId the stateId which is the associated key to the problem state
|
||||||
* @return true if a state value is associated otherwise false
|
* @return true if a state value is associated otherwise false
|
||||||
|
* @throws java.lang.IllegalStateException if <code>act.getIndex()==0</code> since this suggests that act has no index at all
|
||||||
*/
|
*/
|
||||||
public boolean hasActivityState(TourActivity act, Vehicle vehicle, StateId stateId){
|
public boolean hasActivityState(TourActivity act, Vehicle vehicle, StateId stateId){
|
||||||
if(act.getIndex() == 0) throw new IllegalStateException("activity index is 0. this should not be.");
|
if(act.getIndex() == 0) throw new IllegalStateException("activity index is 0. this should not be.");
|
||||||
|
|
@ -264,10 +269,11 @@ public class StateManager implements RouteAndActivityStateGetter, IterationStart
|
||||||
* @return the associated state value to the specified activity, vehicle and stateId, or null if no state value is
|
* @return the associated state value to the specified activity, vehicle and stateId, or null if no state value is
|
||||||
* associated.
|
* associated.
|
||||||
* @throws java.lang.ClassCastException if type class is not equal to the associated type class of the requested state value
|
* @throws java.lang.ClassCastException if type class is not equal to the associated type class of the requested state value
|
||||||
|
* @throws java.lang.IllegalStateException if <code>act.getIndex()==0</code> since this suggests that act has no index at all
|
||||||
*/
|
*/
|
||||||
public <T> T getActivityState(TourActivity act, Vehicle vehicle, StateId stateId, Class<T> type) {
|
public <T> T getActivityState(TourActivity act, Vehicle vehicle, StateId stateId, Class<T> type) {
|
||||||
if(act.getIndex() == 0) throw new IllegalStateException("activity index is 0. this should not be.");
|
if(act.getIndex() == 0) throw new IllegalStateException("activity index is 0. this should not be.");
|
||||||
if(act.getIndex()<0) return null;
|
if(act.getIndex() < 0) return null; //act.getIndex() < 0 indicates that act is either Start (-1) or End (-2)
|
||||||
T state;
|
T state;
|
||||||
try {
|
try {
|
||||||
state = type.cast(vehicle_dependent_activity_states[act.getIndex()][vehicle.getVehicleTypeIdentifier().getIndex()][stateId.getIndex()]);
|
state = type.cast(vehicle_dependent_activity_states[act.getIndex()][vehicle.getVehicleTypeIdentifier().getIndex()][stateId.getIndex()]);
|
||||||
|
|
@ -293,6 +299,7 @@ public class StateManager implements RouteAndActivityStateGetter, IterationStart
|
||||||
* @param <T> the type of the class
|
* @param <T> the type of the class
|
||||||
* @return the route state that is associated to the route and stateId, or null if no state is associated.
|
* @return the route state that is associated to the route and stateId, or null if no state is associated.
|
||||||
* @throws java.lang.ClassCastException if type class is not equal to the associated type class of the requested state value
|
* @throws java.lang.ClassCastException if type class is not equal to the associated type class of the requested state value
|
||||||
|
* @throws java.lang.IllegalStateException if <code>!route.isEmpty()</code> and <code>act(0).getIndex()==0</code> since this suggests that act has no index at all
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public <T> T getRouteState(VehicleRoute route, StateId stateId, Class<T> type) {
|
public <T> T getRouteState(VehicleRoute route, StateId stateId, Class<T> type) {
|
||||||
|
|
@ -332,6 +339,7 @@ public class StateManager implements RouteAndActivityStateGetter, IterationStart
|
||||||
* @param <T> the type of the class
|
* @param <T> the type of the class
|
||||||
* @return the actual route state that is assigned to the route, vehicle and stateId
|
* @return the actual route state that is assigned to the route, vehicle and stateId
|
||||||
* @throws java.lang.ClassCastException if specified type is not equal to the memorized type
|
* @throws java.lang.ClassCastException if specified type is not equal to the memorized type
|
||||||
|
* @throws java.lang.IllegalStateException if <code>!route.isEmpty()</code> and <code>act(0).getIndex()==0</code> since this suggests that act has no index at all
|
||||||
*/
|
*/
|
||||||
public <T> T getRouteState(VehicleRoute route, Vehicle vehicle, StateId stateId, Class<T> type) {
|
public <T> T getRouteState(VehicleRoute route, Vehicle vehicle, StateId stateId, Class<T> type) {
|
||||||
if(route.isEmpty()) return null;
|
if(route.isEmpty()) return null;
|
||||||
|
|
@ -355,11 +363,13 @@ public class StateManager implements RouteAndActivityStateGetter, IterationStart
|
||||||
* @param stateId the stateId which is the associated key to the activity state
|
* @param stateId the stateId which is the associated key to the activity state
|
||||||
* @param state the state that is associated to the activity and stateId
|
* @param state the state that is associated to the activity and stateId
|
||||||
* @param <T> the type of the state
|
* @param <T> the type of the state
|
||||||
* @throws java.lang.IllegalStateException if stateId is equall to a stateId that is already used internally.
|
* @throws java.lang.IllegalStateException if <code>act.getIndex() == 0</code>
|
||||||
|
* || stateId.getIndex < noInternalStates
|
||||||
|
*
|
||||||
*/
|
*/
|
||||||
public <T> void putActivityState(TourActivity act, StateId stateId, T state){
|
public <T> void putActivityState(TourActivity act, StateId stateId, T state){
|
||||||
if(act.getIndex() == 0) throw new IllegalStateException("activity index is 0. this should not be.");
|
if(act.getIndex() == 0) throw new IllegalStateException("activity index is 0. this should not be.");
|
||||||
if(stateId.getIndex()<10) throw new IllegalStateException("either you use a reserved stateId that is applied\n" +
|
if(stateId.getIndex() < initialNoStates) throw new IllegalStateException("either you use a reserved stateId that is applied\n" +
|
||||||
"internally or your stateId has been created without index, e.g. StateFactory.createId(stateName)\n" +
|
"internally or your stateId has been created without index, e.g. StateFactory.createId(stateName)\n" +
|
||||||
" does not assign indeces thus do not use it anymore, but use\n " +
|
" does not assign indeces thus do not use it anymore, but use\n " +
|
||||||
"stateManager.createStateId(name)\n" +
|
"stateManager.createStateId(name)\n" +
|
||||||
|
|
@ -376,11 +386,12 @@ public class StateManager implements RouteAndActivityStateGetter, IterationStart
|
||||||
* @param stateId the stateId which is the associated key to the activity state
|
* @param stateId the stateId which is the associated key to the activity state
|
||||||
* @param state the state that is associated to the activity and stateId
|
* @param state the state that is associated to the activity and stateId
|
||||||
* @param <T> the type of the state
|
* @param <T> the type of the state
|
||||||
* @throws java.lang.IllegalStateException if stateId is equall to a stateId that is already used internally.
|
* @throws java.lang.IllegalStateException if <code>act.getIndex() == 0</code>
|
||||||
|
* || stateId.getIndex < noInternalStates
|
||||||
*/
|
*/
|
||||||
public <T> void putActivityState(TourActivity act, Vehicle vehicle, StateId stateId, T state){
|
public <T> void putActivityState(TourActivity act, Vehicle vehicle, StateId stateId, T state){
|
||||||
if(act.getIndex() == 0) throw new IllegalStateException("activity index is 0. this should not be.");
|
if(act.getIndex() == 0) throw new IllegalStateException("activity index is 0. this should not be.");
|
||||||
if(stateId.getIndex()<10) throw new IllegalStateException("either you use a reserved stateId that is applied\n" +
|
if(stateId.getIndex() < initialNoStates) throw new IllegalStateException("either you use a reserved stateId that is applied\n" +
|
||||||
"internally or your stateId has been created without index, e.g. StateFactory.createId(stateName)\n" +
|
"internally or your stateId has been created without index, e.g. StateFactory.createId(stateName)\n" +
|
||||||
" does not assign indeces thus do not use it anymore, but use\n " +
|
" does not assign indeces thus do not use it anymore, but use\n " +
|
||||||
"stateManager.createStateId(name)\n" +
|
"stateManager.createStateId(name)\n" +
|
||||||
|
|
@ -407,7 +418,7 @@ public class StateManager implements RouteAndActivityStateGetter, IterationStart
|
||||||
* @throws java.lang.IllegalStateException if stateId is equall to a stateId that is already used internally.
|
* @throws java.lang.IllegalStateException if stateId is equall to a stateId that is already used internally.
|
||||||
*/
|
*/
|
||||||
public <T> void putRouteState(VehicleRoute route, StateId stateId, T state){
|
public <T> void putRouteState(VehicleRoute route, StateId stateId, T state){
|
||||||
if(stateId.getIndex()<10) StateFactory.throwReservedIdException(stateId.toString());
|
if(stateId.getIndex() < initialNoStates) StateFactory.throwReservedIdException(stateId.toString());
|
||||||
putTypedInternalRouteState(route, stateId, state);
|
putTypedInternalRouteState(route, stateId, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -420,11 +431,11 @@ public class StateManager implements RouteAndActivityStateGetter, IterationStart
|
||||||
* @param stateId the stateId which is the associated key to the activity state
|
* @param stateId the stateId which is the associated key to the activity state
|
||||||
* @param state the state that is associated to the activity and stateId
|
* @param state the state that is associated to the activity and stateId
|
||||||
* @param <T> the type of the state
|
* @param <T> the type of the state
|
||||||
* @throws java.lang.IllegalStateException if stateId is equall to a stateId that is already used internally.
|
* @throws java.lang.IllegalStateException if <code>vehicle.getIndex() == 0</code> || <code>stateId.getIndex() < noInternalStates</code>
|
||||||
*/
|
*/
|
||||||
public <T> void putRouteState(VehicleRoute route, Vehicle vehicle, StateId stateId, T state){
|
public <T> void putRouteState(VehicleRoute route, Vehicle vehicle, StateId stateId, T state){
|
||||||
if(vehicle.getIndex() == 0) throw new IllegalStateException("vehicle index is 0. this should not be.");
|
if(vehicle.getIndex() == 0) throw new IllegalStateException("vehicle index is 0. this should not be.");
|
||||||
if(stateId.getIndex()<10) StateFactory.throwReservedIdException(stateId.toString());
|
if(stateId.getIndex() < initialNoStates) StateFactory.throwReservedIdException(stateId.toString());
|
||||||
putTypedInternalRouteState(route, vehicle, stateId, state);
|
putTypedInternalRouteState(route, vehicle, stateId, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Copyright (C) 2013 Stefan Schroeder
|
* Copyright (C) 2014 Stefan Schroeder
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
|
@ -16,12 +16,12 @@
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
package jsprit.core.problem.solution.route;
|
package jsprit.core.problem.solution.route;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Collection;
|
|
||||||
|
|
||||||
import jsprit.core.problem.solution.route.activity.ActivityVisitor;
|
import jsprit.core.problem.solution.route.activity.ActivityVisitor;
|
||||||
import jsprit.core.problem.solution.route.activity.TourActivity;
|
import jsprit.core.problem.solution.route.activity.TourActivity;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collection;
|
||||||
|
|
||||||
|
|
||||||
public class RouteActivityVisitor implements RouteVisitor{
|
public class RouteActivityVisitor implements RouteVisitor{
|
||||||
|
|
||||||
|
|
@ -30,7 +30,6 @@ public class RouteActivityVisitor implements RouteVisitor{
|
||||||
@Override
|
@Override
|
||||||
public void visit(VehicleRoute route) {
|
public void visit(VehicleRoute route) {
|
||||||
if(visitors.isEmpty()) return;
|
if(visitors.isEmpty()) return;
|
||||||
// if(route.isEmpty()) return;
|
|
||||||
begin(route);
|
begin(route);
|
||||||
for(TourActivity act : route.getTourActivities().getActivities()){
|
for(TourActivity act : route.getTourActivities().getActivities()){
|
||||||
visit(act);
|
visit(act);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue