1
0
Fork 0
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:
oblonski 2014-07-17 11:21:15 +02:00
parent 891b0083c6
commit 4d3e5be4fb
5 changed files with 175 additions and 99 deletions

View file

@ -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));

View file

@ -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();

View file

@ -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;
@ -83,69 +83,29 @@ public class TestCalculatesServiceInsertionOnRouteLevel {
VehicleType type = mock(VehicleType.class);
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() {
@Override
public double getBackwardTransportTime(String fromId, String toId,
double arrivalTime, Driver driver, Vehicle vehicle) {
// TODO Auto-generated method stub
return 0;
}
VehicleRoutingTransportCosts routingCosts = CostFactory.createManhattanCosts();
@Override
public double getBackwardTransportCost(String fromId, String toId,
double arrivalTime, Driver driver, Vehicle vehicle) {
// TODO Auto-generated method stub
return 0;
}
@Override
public double getTransportTime(String fromId, String toId, double departureTime, Driver driver, Vehicle vehicle) {
return 0;
}
@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]);
@Override
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;
}
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));
@ -174,12 +134,7 @@ 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(){

View file

@ -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));
}
}