mirror of
https://github.com/graphhopper/jsprit.git
synced 2020-01-24 07:45:05 +01:00
added meaningful ClassCastException to core.algorithm.state.StateManager
modified clean from new arr ini to arr value ini
This commit is contained in:
parent
891b0083c6
commit
4d3e5be4fb
5 changed files with 175 additions and 99 deletions
|
|
@ -23,7 +23,6 @@ import jsprit.core.algorithm.ruin.listener.RuinListeners;
|
|||
import jsprit.core.problem.Capacity;
|
||||
import jsprit.core.problem.VehicleRoutingProblem;
|
||||
import jsprit.core.problem.cost.VehicleRoutingTransportCosts;
|
||||
import jsprit.core.problem.driver.Driver;
|
||||
import jsprit.core.problem.job.Job;
|
||||
import jsprit.core.problem.solution.VehicleRoutingProblemSolution;
|
||||
import jsprit.core.problem.solution.route.ReverseRouteActivityVisitor;
|
||||
|
|
@ -244,13 +243,29 @@ public class StateManager implements RouteAndActivityStateGetter, IterationStart
|
|||
*
|
||||
*/
|
||||
public void clear(){
|
||||
activity_states = new Object[nuActivities][stateIndexCounter];
|
||||
route_states = new Object[nuActivities][stateIndexCounter];
|
||||
vehicle_dependent_activity_states = new Object[nuActivities][nuVehicleTypeKeys][initialNuStates];
|
||||
vehicle_dependent_route_states = new Object[nuActivities][nuVehicleTypeKeys][initialNuStates];
|
||||
fill(activity_states, null);
|
||||
fill(route_states, null);
|
||||
fill_(vehicle_dependent_activity_states, null);
|
||||
fill_(vehicle_dependent_route_states,null);
|
||||
// vehicle_dependent_activity_states = new Object[nuActivities][nuVehicleTypeKeys][initialNuStates];
|
||||
// vehicle_dependent_route_states = new Object[nuActivities][nuVehicleTypeKeys][initialNuStates];
|
||||
problemStates_.clear();
|
||||
}
|
||||
|
||||
private void fill_(Object[][][] states, Object o) {
|
||||
for(Object[][] twoDimArr : states){
|
||||
for(Object[] oneDimArr : twoDimArr){
|
||||
Arrays.fill(oneDimArr,o);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void fill(Object[][] states, Object o) {
|
||||
for(Object[] rows : states){
|
||||
Arrays.fill(rows,o);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns activity state of type 'type'.
|
||||
*
|
||||
|
|
@ -258,7 +273,13 @@ public class StateManager implements RouteAndActivityStateGetter, IterationStart
|
|||
@Override
|
||||
public <T> T getActivityState(TourActivity act, StateId stateId, Class<T> type) {
|
||||
if(act.getIndex()<0) return getDefaultTypedActivityState(act, stateId, type);
|
||||
T state = type.cast(activity_states[act.getIndex()][stateId.getIndex()]);
|
||||
T state;
|
||||
try{
|
||||
state = type.cast(activity_states[act.getIndex()][stateId.getIndex()]);
|
||||
}
|
||||
catch (ClassCastException e){
|
||||
throw getClassCastException(e,stateId,type.toString(),activity_states[act.getIndex()][stateId.getIndex()].getClass().toString());
|
||||
}
|
||||
if(state == null) return getDefaultTypedActivityState(act, stateId, type);
|
||||
return state;
|
||||
}
|
||||
|
|
@ -267,13 +288,24 @@ public class StateManager implements RouteAndActivityStateGetter, IterationStart
|
|||
* Returns activity state of type 'type'.
|
||||
*
|
||||
*/
|
||||
public <T> T getActivityState(TourActivity act, Vehicle vehicle, Driver driver, StateId stateId, Class<T> type) {
|
||||
public <T> T getActivityState(TourActivity act, Vehicle vehicle, StateId stateId, Class<T> type) {
|
||||
if(act.getIndex()<0) return getDefaultTypedActivityState(act, stateId, type);
|
||||
T state = type.cast(vehicle_dependent_activity_states[act.getIndex()][vehicle.getVehicleTypeIdentifier().getIndex()][stateId.getIndex()]);
|
||||
T state;
|
||||
try {
|
||||
state = type.cast(vehicle_dependent_activity_states[act.getIndex()][vehicle.getVehicleTypeIdentifier().getIndex()][stateId.getIndex()]);
|
||||
}
|
||||
catch(ClassCastException e){
|
||||
Object state_class = vehicle_dependent_activity_states[act.getIndex()][vehicle.getVehicleTypeIdentifier().getIndex()][stateId.getIndex()];
|
||||
throw getClassCastException(e,stateId,type.toString(),state_class.getClass().toString());
|
||||
}
|
||||
if(state == null) return getDefaultTypedActivityState(act, stateId, type);
|
||||
return state;
|
||||
}
|
||||
|
||||
private ClassCastException getClassCastException(ClassCastException e, StateId stateId, String requestedTypeClass, String memorizedTypeClass){
|
||||
return new ClassCastException(e + "\n" + "state with stateId '" + stateId.toString() + "' is of " + memorizedTypeClass + ". cannot cast it to " + requestedTypeClass + ".");
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param act activity for which the state is requested
|
||||
|
|
@ -281,7 +313,7 @@ public class StateManager implements RouteAndActivityStateGetter, IterationStart
|
|||
* @param type class of state value
|
||||
* @return state value
|
||||
*/
|
||||
private <T> T getDefaultTypedActivityState(TourActivity act, StateId stateId,Class<T> type) {
|
||||
private <T> T getDefaultTypedActivityState(TourActivity act, StateId stateId, Class<T> type) {
|
||||
if(defaultActivityStates_.containsKey(stateId)){
|
||||
return type.cast(defaultActivityStates_.get(stateId));
|
||||
}
|
||||
|
|
@ -303,14 +335,26 @@ public class StateManager implements RouteAndActivityStateGetter, IterationStart
|
|||
@Override
|
||||
public <T> T getRouteState(VehicleRoute route, StateId stateId, Class<T> type) {
|
||||
if(route.isEmpty()) return getDefaultTypedRouteState(stateId,type);
|
||||
T state = type.cast(route_states[route.getActivities().get(0).getIndex()][stateId.getIndex()]);
|
||||
T state;
|
||||
try{
|
||||
state = type.cast(route_states[route.getActivities().get(0).getIndex()][stateId.getIndex()]);
|
||||
}
|
||||
catch (ClassCastException e){
|
||||
throw getClassCastException(e,stateId,type.toString(),route_states[route.getActivities().get(0).getIndex()][stateId.getIndex()].getClass().toString());
|
||||
}
|
||||
if(state==null) return getDefaultTypedRouteState(stateId,type);
|
||||
return state;
|
||||
}
|
||||
|
||||
public <T> T getRouteState(VehicleRoute route, Vehicle vehicle, Driver driver, StateId stateId, Class<T> type) {
|
||||
public <T> T getRouteState(VehicleRoute route, Vehicle vehicle, StateId stateId, Class<T> type) {
|
||||
if(route.isEmpty()) return getDefaultTypedRouteState(stateId,type);
|
||||
T state = type.cast(vehicle_dependent_route_states[route.getActivities().get(0).getIndex()][vehicle.getVehicleTypeIdentifier().getIndex()][stateId.getIndex()]);
|
||||
T state;
|
||||
try{
|
||||
state = type.cast(vehicle_dependent_route_states[route.getActivities().get(0).getIndex()][vehicle.getVehicleTypeIdentifier().getIndex()][stateId.getIndex()]);
|
||||
}
|
||||
catch( ClassCastException e){
|
||||
throw getClassCastException(e, stateId, type.toString(), vehicle_dependent_route_states[route.getActivities().get(0).getIndex()][vehicle.getVehicleTypeIdentifier().getIndex()][stateId.getIndex()].getClass().toString());
|
||||
}
|
||||
if(state==null) return getDefaultTypedRouteState(stateId,type);
|
||||
return state;
|
||||
}
|
||||
|
|
@ -381,13 +425,13 @@ public class StateManager implements RouteAndActivityStateGetter, IterationStart
|
|||
putInternalTypedActivityState(act, stateId, state);
|
||||
}
|
||||
|
||||
public <T> void putActivityState(TourActivity act, Vehicle vehicle, Driver driver, StateId stateId, T state){
|
||||
public <T> void putActivityState(TourActivity act, Vehicle vehicle, StateId stateId, T state){
|
||||
if(stateId.getIndex()<10) 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" +
|
||||
" does not assign indeces thus do not use it anymore, but use\n " +
|
||||
"stateManager.createStateId(name)\n" +
|
||||
" instead.\n");
|
||||
putInternalTypedActivityState(act, vehicle, driver, stateId, state);
|
||||
putInternalTypedActivityState(act, vehicle, stateId, state);
|
||||
}
|
||||
|
||||
private Object[][] resizeArr(Object[][] states, int newLength) {
|
||||
|
|
@ -401,7 +445,7 @@ public class StateManager implements RouteAndActivityStateGetter, IterationStart
|
|||
activity_states[act.getIndex()][stateId.getIndex()]=state;
|
||||
}
|
||||
|
||||
<T> void putInternalTypedActivityState(TourActivity act, Vehicle vehicle, Driver driver, StateId stateId, T state){
|
||||
<T> void putInternalTypedActivityState(TourActivity act, Vehicle vehicle, StateId stateId, T state){
|
||||
vehicle_dependent_activity_states[act.getIndex()][vehicle.getVehicleTypeIdentifier().getIndex()][stateId.getIndex()]=state;
|
||||
}
|
||||
|
||||
|
|
@ -443,9 +487,9 @@ public class StateManager implements RouteAndActivityStateGetter, IterationStart
|
|||
putTypedInternalRouteState(route, stateId, state);
|
||||
}
|
||||
|
||||
public <T> void putRouteState(VehicleRoute route, Vehicle vehicle, Driver driver, StateId stateId, T state){
|
||||
public <T> void putRouteState(VehicleRoute route, Vehicle vehicle, StateId stateId, T state){
|
||||
if(stateId.getIndex()<10) StateFactory.throwReservedIdException(stateId.toString());
|
||||
putTypedInternalRouteState(route, vehicle, driver, stateId, state);
|
||||
putTypedInternalRouteState(route, vehicle, stateId, state);
|
||||
}
|
||||
|
||||
<T> void putTypedInternalRouteState(VehicleRoute route, StateId stateId, T state){
|
||||
|
|
@ -453,7 +497,7 @@ public class StateManager implements RouteAndActivityStateGetter, IterationStart
|
|||
route_states[route.getActivities().get(0).getIndex()][stateId.getIndex()] = state;
|
||||
}
|
||||
|
||||
<T> void putTypedInternalRouteState(VehicleRoute route, Vehicle vehicle, Driver driver, StateId stateId, T state){
|
||||
<T> void putTypedInternalRouteState(VehicleRoute route, Vehicle vehicle, StateId stateId, T state){
|
||||
if(route.isEmpty()) return;
|
||||
vehicle_dependent_route_states[route.getActivities().get(0).getIndex()][vehicle.getVehicleTypeIdentifier().getIndex()][stateId.getIndex()] = state;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,10 +16,6 @@
|
|||
******************************************************************************/
|
||||
package jsprit.core.algorithm;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import jsprit.core.algorithm.acceptor.GreedyAcceptance;
|
||||
import jsprit.core.algorithm.module.RuinAndRecreateModule;
|
||||
import jsprit.core.algorithm.recreate.BestInsertionBuilder;
|
||||
|
|
@ -41,10 +37,13 @@ import jsprit.core.problem.solution.route.state.StateFactory;
|
|||
import jsprit.core.problem.vehicle.InfiniteFleetManagerFactory;
|
||||
import jsprit.core.problem.vehicle.VehicleFleetManager;
|
||||
import jsprit.core.util.Solutions;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
|
||||
public class BuildCVRPAlgoFromScratch_IT {
|
||||
|
||||
|
|
@ -58,7 +57,7 @@ public class BuildCVRPAlgoFromScratch_IT {
|
|||
new VrpXMLReader(builder).read("src/test/resources/vrpnc1-jsprit.xml");
|
||||
vrp = builder.build();
|
||||
|
||||
final StateManager stateManager = new StateManager(vrp.getTransportCosts());
|
||||
final StateManager stateManager = new StateManager(vrp);
|
||||
stateManager.updateLoadStates();
|
||||
stateManager.updateTimeWindowStates();
|
||||
stateManager.addStateUpdater(new UpdateVariableCosts(vrp.getActivityCosts(), vrp.getTransportCosts(), stateManager));
|
||||
|
|
|
|||
|
|
@ -16,8 +16,6 @@
|
|||
******************************************************************************/
|
||||
package jsprit.core.algorithm;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import jsprit.core.algorithm.acceptor.GreedyAcceptance;
|
||||
import jsprit.core.algorithm.module.RuinAndRecreateModule;
|
||||
import jsprit.core.algorithm.recreate.BestInsertionBuilder;
|
||||
|
|
@ -39,11 +37,12 @@ import jsprit.core.problem.solution.route.state.StateFactory;
|
|||
import jsprit.core.problem.vehicle.InfiniteFleetManagerFactory;
|
||||
import jsprit.core.problem.vehicle.VehicleFleetManager;
|
||||
import jsprit.core.util.Solutions;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
|
||||
public class BuildPDVRPAlgoFromScratch_IT {
|
||||
|
||||
|
|
@ -60,7 +59,7 @@ public class BuildPDVRPAlgoFromScratch_IT {
|
|||
new VrpXMLReader(builder).read("src/test/resources/pd_solomon_r101.xml");
|
||||
vrp = builder.build();
|
||||
|
||||
final StateManager stateManager = new StateManager(vrp.getTransportCosts());
|
||||
final StateManager stateManager = new StateManager(vrp);
|
||||
|
||||
ConstraintManager constraintManager = new ConstraintManager(vrp,stateManager);
|
||||
constraintManager.addTimeWindowConstraint();
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ import jsprit.core.problem.AbstractVehicle;
|
|||
import jsprit.core.problem.Capacity;
|
||||
import jsprit.core.problem.VehicleRoutingProblem;
|
||||
import jsprit.core.problem.constraint.ConstraintManager;
|
||||
import jsprit.core.problem.cost.AbstractForwardVehicleRoutingTransportCosts;
|
||||
import jsprit.core.problem.cost.VehicleRoutingTransportCosts;
|
||||
import jsprit.core.problem.driver.Driver;
|
||||
import jsprit.core.problem.driver.DriverImpl;
|
||||
|
|
@ -33,11 +34,10 @@ import jsprit.core.problem.solution.route.VehicleRoute;
|
|||
import jsprit.core.problem.solution.route.activity.ServiceActivity;
|
||||
import jsprit.core.problem.solution.route.activity.TimeWindow;
|
||||
import jsprit.core.problem.solution.route.activity.TourActivities;
|
||||
import jsprit.core.problem.solution.route.activity.TourActivity;
|
||||
import jsprit.core.problem.vehicle.Vehicle;
|
||||
import jsprit.core.problem.vehicle.VehicleImpl;
|
||||
import jsprit.core.problem.vehicle.VehicleType;
|
||||
import jsprit.core.util.Coordinate;
|
||||
import jsprit.core.util.ManhattanDistanceCalculator;
|
||||
import jsprit.core.util.CostFactory;
|
||||
import org.apache.log4j.Level;
|
||||
import org.apache.log4j.Logger;
|
||||
import org.junit.Before;
|
||||
|
|
@ -84,68 +84,28 @@ public class TestCalculatesServiceInsertionOnRouteLevel {
|
|||
|
||||
when(type.getCapacityDimensions()).thenReturn(Capacity.Builder.newInstance().addDimension(0, 1000).build());
|
||||
|
||||
when(vehicle.getType()).thenReturn(type);
|
||||
when(vehicle.getStartLocationId()).thenReturn("0,0");
|
||||
when(vehicle.getEndLocationId()).thenReturn("0,0");
|
||||
when(vehicle.getEarliestDeparture()).thenReturn(0.0);
|
||||
when(vehicle.getLatestArrival()).thenReturn(100.0);
|
||||
when(vehicle.isReturnToDepot()).thenReturn(true);
|
||||
|
||||
newVehicle = mock(AbstractVehicle.class);
|
||||
when(newVehicle.getType()).thenReturn(type);
|
||||
when(newVehicle.getStartLocationId()).thenReturn("0,0");
|
||||
when(newVehicle.getEndLocationId()).thenReturn("0,0");
|
||||
when(newVehicle.getEarliestDeparture()).thenReturn(0.0);
|
||||
when(newVehicle.getLatestArrival()).thenReturn(100.0);
|
||||
when(newVehicle.isReturnToDepot()).thenReturn(true);
|
||||
|
||||
vehicle = VehicleImpl.Builder.newInstance("v1").setType(type).setStartLocationId("0,0").setLatestArrival(100.).build();
|
||||
newVehicle = VehicleImpl.Builder.newInstance("v2").setType(type).setStartLocationId("0,0").setLatestArrival(100.).build();
|
||||
driver = DriverImpl.noDriver();
|
||||
|
||||
costs = new VehicleRoutingTransportCosts() {
|
||||
costs = new AbstractForwardVehicleRoutingTransportCosts() {
|
||||
|
||||
VehicleRoutingTransportCosts routingCosts = CostFactory.createManhattanCosts();
|
||||
|
||||
@Override
|
||||
public double getBackwardTransportTime(String fromId, String toId,
|
||||
double arrivalTime, Driver driver, Vehicle vehicle) {
|
||||
// TODO Auto-generated method stub
|
||||
public double getTransportTime(String fromId, String toId, double departureTime, Driver driver, Vehicle vehicle) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getBackwardTransportCost(String fromId, String toId,
|
||||
double arrivalTime, Driver driver, Vehicle vehicle) {
|
||||
// TODO Auto-generated method stub
|
||||
return 0;
|
||||
public double getTransportCost(String fromId, String toId, double departureTime, Driver driver, Vehicle vehicle) {
|
||||
double tpCosts = routingCosts.getTransportCost(fromId,toId,departureTime,driver,vehicle);
|
||||
if(vehicle.getId().equals("v1")) return tpCosts;
|
||||
return 2. * tpCosts;
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getTransportCost(String fromId, String toId, double departureTime, Driver driver, Vehicle veh) {
|
||||
String[] fromTokens = fromId.split(",");
|
||||
String[] toTokens = toId.split(",");
|
||||
double fromX = Double.parseDouble(fromTokens[0]);
|
||||
double fromY = Double.parseDouble(fromTokens[1]);
|
||||
|
||||
double toX = Double.parseDouble(toTokens[0]);
|
||||
double toY = Double.parseDouble(toTokens[1]);
|
||||
|
||||
double dist = ManhattanDistanceCalculator.calculateDistance(new Coordinate(fromX, fromY), new Coordinate(toX, toY));
|
||||
if(veh == vehicle){
|
||||
return dist;
|
||||
}
|
||||
else if(veh == newVehicle){
|
||||
return 2*dist;
|
||||
}
|
||||
throw new IllegalStateException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getTransportTime(String fromId, String toId,
|
||||
double departureTime, Driver driver, Vehicle vehicle) {
|
||||
// TODO Auto-generated method stub
|
||||
return 0;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
first = Service.Builder.newInstance("1").setLocationId("0,10").setTimeWindow(TimeWindow.newInstance(0.0, 100.0)).build();
|
||||
second = Service.Builder.newInstance("3").setLocationId("10,0").setTimeWindow(TimeWindow.newInstance(0.0, 100.0)).build();
|
||||
third = Service.Builder.newInstance("2").setLocationId("10,10").setTimeWindow(TimeWindow.newInstance(0.0, 100.0)).build();
|
||||
|
|
@ -156,7 +116,7 @@ public class TestCalculatesServiceInsertionOnRouteLevel {
|
|||
|
||||
VehicleRoutingProblem vrp = VehicleRoutingProblem.Builder.newInstance().addAllJobs(jobs).addVehicle(vehicle).addVehicle(newVehicle).setRoutingCost(costs).build();
|
||||
|
||||
states = new StateManager(vrp.getTransportCosts());
|
||||
states = new StateManager(vrp);
|
||||
states.updateLoadStates();
|
||||
states.updateTimeWindowStates();
|
||||
states.addStateUpdater(new UpdateVariableCosts(vrp.getActivityCosts(), vrp.getTransportCosts(), states));
|
||||
|
|
@ -175,11 +135,6 @@ public class TestCalculatesServiceInsertionOnRouteLevel {
|
|||
|
||||
}
|
||||
|
||||
public TourActivity getActivityMock(String id, double earliestOperationStart, double currCost){
|
||||
TourActivity act = mock(TourActivity.class);
|
||||
when(act.getLocationId()).thenReturn(id);
|
||||
return act;
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenInsertingTheFirstJobInAnEmptyTourWithVehicle_itCalculatesMarginalCostChanges(){
|
||||
|
|
|
|||
|
|
@ -28,6 +28,8 @@ import jsprit.core.problem.solution.route.state.StateFactory.State;
|
|||
import jsprit.core.problem.solution.route.state.StateFactory.StateId;
|
||||
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.Test;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
|
@ -186,8 +188,8 @@ public class StateManagerTest {
|
|||
StateManager stateManager = new StateManager(mock(VehicleRoutingProblem.class));
|
||||
StateId id = stateManager.createStateId("myState");
|
||||
Capacity capacity = Capacity.Builder.newInstance().addDimension(0, 500).build();
|
||||
stateManager.putRouteState(route, vehicle, null, id, capacity);
|
||||
Capacity getCap = stateManager.getRouteState(route, vehicle, null, id, Capacity.class);
|
||||
stateManager.putRouteState(route, vehicle, id, capacity);
|
||||
Capacity getCap = stateManager.getRouteState(route, vehicle, id, Capacity.class);
|
||||
assertEquals(500, getCap.get(0));
|
||||
}
|
||||
|
||||
|
|
@ -198,8 +200,85 @@ public class StateManagerTest {
|
|||
StateId id = stateManager.createStateId("myState");
|
||||
Capacity capacity = Capacity.Builder.newInstance().addDimension(0, 500).build();
|
||||
TourActivity act = mock(TourActivity.class);
|
||||
stateManager.putActivityState(act, vehicle, null, id, capacity);
|
||||
Capacity getCap = stateManager.getActivityState(act, vehicle, null, id, Capacity.class);
|
||||
stateManager.putActivityState(act, vehicle, id, capacity);
|
||||
Capacity getCap = stateManager.getActivityState(act, vehicle, id, Capacity.class);
|
||||
assertEquals(500, getCap.get(0));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenMemorizingVehicleInfo_itShouldBeMemorized(){
|
||||
Vehicle vehicle = VehicleImpl.Builder.newInstance("v").setStartLocationId("loc").build();
|
||||
VehicleRoute route = getRoute(vehicle);
|
||||
StateManager stateManager = new StateManager(mock(VehicleRoutingProblem.class));
|
||||
StateId id = stateManager.createStateId("vehicleParam");
|
||||
double distanceParam = vehicle.getType().getVehicleCostParams().perDistanceUnit;
|
||||
stateManager.putRouteState(route,vehicle, id,distanceParam);
|
||||
assertEquals(1.,stateManager.getRouteState(route,vehicle,id, Double.class),0.01);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenMemorizingTwoVehicleInfoForRoute_itShouldBeMemorized(){
|
||||
VehicleType type = VehicleTypeImpl.Builder.newInstance("t").setCostPerDistance(4.).build();
|
||||
VehicleImpl vehicle = VehicleImpl.Builder.newInstance("v").setStartLocationId("loc").build();
|
||||
VehicleImpl vehicle2 = VehicleImpl.Builder.newInstance("v").setStartLocationId("loc").setType(type).build();
|
||||
VehicleRoute route = getRoute(vehicle);
|
||||
|
||||
//getting the indices created in vrpBuilder
|
||||
VehicleRoutingProblem.Builder vrpBuilder = VehicleRoutingProblem.Builder.newInstance();
|
||||
VehicleRoutingProblem vrp = vrpBuilder.addVehicle(vehicle).addVehicle(vehicle2).build();
|
||||
|
||||
StateManager stateManager = new StateManager(vrp);
|
||||
StateId id = stateManager.createStateId("vehicleParam");
|
||||
double distanceParam = vehicle.getType().getVehicleCostParams().perDistanceUnit;
|
||||
stateManager.putRouteState(route,vehicle, id,distanceParam);
|
||||
stateManager.putRouteState(route,vehicle2,id,vehicle2.getType().getVehicleCostParams().perDistanceUnit);
|
||||
assertEquals(1., stateManager.getRouteState(route, vehicle, id, Double.class), 0.01);
|
||||
assertEquals(4.,stateManager.getRouteState(route,vehicle2,id, Double.class),0.01);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenMemorizingTwoVehicleInfoForAct_itShouldBeMemorized(){
|
||||
VehicleType type = VehicleTypeImpl.Builder.newInstance("t").setCostPerDistance(4.).build();
|
||||
VehicleImpl vehicle = VehicleImpl.Builder.newInstance("v").setStartLocationId("loc").build();
|
||||
VehicleImpl vehicle2 = VehicleImpl.Builder.newInstance("v").setStartLocationId("loc").setType(type).build();
|
||||
|
||||
//getting the indices created in vrpBuilder
|
||||
VehicleRoutingProblem.Builder vrpBuilder = VehicleRoutingProblem.Builder.newInstance();
|
||||
VehicleRoutingProblem vrp = vrpBuilder.addVehicle(vehicle).addVehicle(vehicle2).build();
|
||||
|
||||
TourActivity act = mock(TourActivity.class);
|
||||
|
||||
StateManager stateManager = new StateManager(vrp);
|
||||
StateId id = stateManager.createStateId("vehicleParam");
|
||||
double distanceParam = vehicle.getType().getVehicleCostParams().perDistanceUnit;
|
||||
stateManager.putActivityState(act, vehicle, id, distanceParam);
|
||||
stateManager.putActivityState(act, vehicle2, id, vehicle2.getType().getVehicleCostParams().perDistanceUnit);
|
||||
|
||||
assertEquals(1., stateManager.getActivityState(act, vehicle, id, Double.class), 0.01);
|
||||
assertEquals(4.,stateManager.getActivityState(act,vehicle2, id, Double.class),0.01);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenClearing_arrElementsShouldBeNull(){
|
||||
VehicleType type = VehicleTypeImpl.Builder.newInstance("t").setCostPerDistance(4.).build();
|
||||
VehicleImpl vehicle = VehicleImpl.Builder.newInstance("v").setStartLocationId("loc").build();
|
||||
VehicleImpl vehicle2 = VehicleImpl.Builder.newInstance("v").setStartLocationId("loc").setType(type).build();
|
||||
|
||||
//getting the indices created in vrpBuilder
|
||||
VehicleRoutingProblem.Builder vrpBuilder = VehicleRoutingProblem.Builder.newInstance();
|
||||
VehicleRoutingProblem vrp = vrpBuilder.addVehicle(vehicle).addVehicle(vehicle2).build();
|
||||
|
||||
TourActivity act = mock(TourActivity.class);
|
||||
|
||||
StateManager stateManager = new StateManager(vrp);
|
||||
StateId id = stateManager.createStateId("vehicleParam");
|
||||
double distanceParam = vehicle.getType().getVehicleCostParams().perDistanceUnit;
|
||||
stateManager.putActivityState(act, vehicle, id, distanceParam);
|
||||
stateManager.putActivityState(act, vehicle2, id, vehicle2.getType().getVehicleCostParams().perDistanceUnit);
|
||||
|
||||
stateManager.clear();
|
||||
|
||||
assertNull(stateManager.getActivityState(act, vehicle, id, Double.class));
|
||||
assertNull(stateManager.getActivityState(act,vehicle2, id, Double.class));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue