1
0
Fork 0
mirror of https://github.com/graphhopper/jsprit.git synced 2020-01-24 07:45:05 +01:00

switch to getActivityDuration method

This commit is contained in:
oblonski 2016-01-06 20:52:43 +01:00
parent 390340140f
commit e5f6edeae4
39 changed files with 277 additions and 379 deletions

View file

@ -40,7 +40,7 @@ public class ExampleActivityCostFunction implements VehicleRoutingActivityCosts
return 0.0;
} else {
//waiting + act-time
double endTime = Math.max(arrivalTime, tourAct.getTheoreticalEarliestOperationStartTime()) + tourAct.getOperationTime();
double endTime = Math.max(arrivalTime, tourAct.getTheoreticalEarliestOperationStartTime()) + getActivityDuration(tourAct,arrivalTime,driver,vehicle);
double timeAtAct = endTime - arrivalTime;
double totalCost = timeAtAct * parameter_timeAtAct;
@ -57,4 +57,9 @@ public class ExampleActivityCostFunction implements VehicleRoutingActivityCosts
}
}
@Override
public double getActivityDuration(TourActivity tourAct, double arrivalTime, Driver driver, Vehicle vehicle) {
return tourAct.getOperationTime();
}
}

View file

@ -46,6 +46,11 @@ public class VariableDepartureAndWaitingTime_IT {
return vehicle.getType().getVehicleCostParams().perWaitingTimeUnit * Math.max(0, tourAct.getTheoreticalEarliestOperationStartTime() - arrivalTime);
}
@Override
public double getActivityDuration(TourActivity tourAct, double arrivalTime, Driver driver, Vehicle vehicle) {
return tourAct.getOperationTime();
}
};
algorithmFactory = new AlgorithmFactory() {
@Override

View file

@ -63,6 +63,11 @@ public class ServiceInsertionAndLoadConstraintsTest {
return 0;
}
@Override
public double getActivityDuration(TourActivity tourAct, double arrivalTime, Driver driver, Vehicle vehicle) {
return tourAct.getOperationTime();
}
};
HardActivityConstraint hardActivityLevelConstraint = new HardActivityConstraint() {
@ -103,7 +108,7 @@ public class ServiceInsertionAndLoadConstraintsTest {
private void createInsertionCalculator(HardRouteConstraint hardRouteLevelConstraint) {
ConstraintManager constraintManager = new ConstraintManager(mock(VehicleRoutingProblem.class), mock(RouteAndActivityStateGetter.class));
constraintManager.addConstraint(hardRouteLevelConstraint);
insertionCalculator = new ShipmentInsertionCalculator(routingCosts, activityInsertionCostsCalculator, constraintManager);
insertionCalculator = new ShipmentInsertionCalculator(routingCosts, activityCosts, activityInsertionCostsCalculator, constraintManager);
}
@Test
@ -137,9 +142,9 @@ public class ServiceInsertionAndLoadConstraintsTest {
stateManager.informInsertionStarts(Arrays.asList(route), null);
JobCalculatorSwitcher switcher = new JobCalculatorSwitcher();
ServiceInsertionCalculator serviceInsertionCalc = new ServiceInsertionCalculator(routingCosts, activityInsertionCostsCalculator, constraintManager);
ServiceInsertionCalculator serviceInsertionCalc = new ServiceInsertionCalculator(routingCosts, activityCosts, activityInsertionCostsCalculator, constraintManager);
serviceInsertionCalc.setJobActivityFactory(activityFactory);
ShipmentInsertionCalculator insertionCalculator = new ShipmentInsertionCalculator(routingCosts, activityInsertionCostsCalculator, constraintManager);
ShipmentInsertionCalculator insertionCalculator = new ShipmentInsertionCalculator(routingCosts, activityCosts, activityInsertionCostsCalculator, constraintManager);
insertionCalculator.setJobActivityFactory(activityFactory);
switcher.put(Pickup.class, serviceInsertionCalc);

View file

@ -72,6 +72,11 @@ public class ShipmentInsertionCalculatorTest {
return 0;
}
@Override
public double getActivityDuration(TourActivity tourAct, double arrivalTime, Driver driver, Vehicle vehicle) {
return tourAct.getOperationTime();
}
};
HardRouteConstraint hardRouteLevelConstraint = new HardRouteConstraint() {
@ -102,7 +107,7 @@ public class ShipmentInsertionCalculatorTest {
private void createInsertionCalculator(HardRouteConstraint hardRouteLevelConstraint) {
ConstraintManager constraintManager = new ConstraintManager(mock(VehicleRoutingProblem.class), mock(RouteAndActivityStateGetter.class));
constraintManager.addConstraint(hardRouteLevelConstraint);
insertionCalculator = new ShipmentInsertionCalculator(routingCosts, activityInsertionCostsCalculator, constraintManager);
insertionCalculator = new ShipmentInsertionCalculator(routingCosts, activityCosts, activityInsertionCostsCalculator, constraintManager);
}
@Test
@ -254,8 +259,8 @@ public class ShipmentInsertionCalculatorTest {
constraintManager.addConstraint(new PickupAndDeliverShipmentLoadActivityLevelConstraint(stateManager), Priority.CRITICAL);
constraintManager.addConstraint(new ShipmentPickupsFirstConstraint(), Priority.CRITICAL);
ShipmentInsertionCalculator insertionCalculator = new ShipmentInsertionCalculator(routingCosts, activityInsertionCostsCalculator,
constraintManager);
ShipmentInsertionCalculator insertionCalculator = new ShipmentInsertionCalculator(routingCosts, activityCosts,
activityInsertionCostsCalculator, constraintManager);
insertionCalculator.setJobActivityFactory(vrp.getJobActivityFactory());
InsertionData iData = insertionCalculator.getInsertionData(route, shipment3, vehicle, 0.0, DriverImpl.noDriver(), Double.MAX_VALUE);
@ -289,8 +294,8 @@ public class ShipmentInsertionCalculatorTest {
stateManager.informInsertionStarts(Arrays.asList(route), null);
JobCalculatorSwitcher switcher = new JobCalculatorSwitcher();
ServiceInsertionCalculator serviceInsertionCalc = new ServiceInsertionCalculator(routingCosts, activityInsertionCostsCalculator, constraintManager);
ShipmentInsertionCalculator insertionCalculator = new ShipmentInsertionCalculator(routingCosts, activityInsertionCostsCalculator, constraintManager);
ServiceInsertionCalculator serviceInsertionCalc = new ServiceInsertionCalculator(routingCosts, activityCosts, activityInsertionCostsCalculator, constraintManager);
ShipmentInsertionCalculator insertionCalculator = new ShipmentInsertionCalculator(routingCosts, activityCosts, activityInsertionCostsCalculator, constraintManager);
switcher.put(Pickup.class, serviceInsertionCalc);
switcher.put(Service.class, serviceInsertionCalc);
switcher.put(Shipment.class, insertionCalculator);

View file

@ -130,7 +130,7 @@ public class TestCalculatesServiceInsertion {
VehicleRoutingActivityCosts actCosts = mock(VehicleRoutingActivityCosts.class);
serviceInsertion = new ServiceInsertionCalculator(costs, new LocalActivityInsertionCostsCalculator(costs, actCosts, states), cManager);
serviceInsertion = new ServiceInsertionCalculator(costs, vrp.getActivityCosts(), new LocalActivityInsertionCostsCalculator(costs, actCosts, states), cManager);
serviceInsertion.setJobActivityFactory(new JobActivityFactory() {
@Override
public List<AbstractActivity> createActivities(Job job) {

View file

@ -60,6 +60,11 @@ public class TestDepartureTimeOpt {
return waiting + late;
}
@Override
public double getActivityDuration(TourActivity tourAct, double arrivalTime, Driver driver, Vehicle vehicle) {
return tourAct.getOperationTime();
}
});
VehicleRoutingProblem vrp = vrpBuilder.addJob(service).addVehicle(vehicle).build();
@ -88,6 +93,11 @@ public class TestDepartureTimeOpt {
return waiting + late;
}
@Override
public double getActivityDuration(TourActivity tourAct, double arrivalTime, Driver driver, Vehicle vehicle) {
return tourAct.getOperationTime();
}
});
VehicleRoutingProblem vrp = vrpBuilder.addJob(service).addVehicle(vehicle).build();
@ -115,6 +125,11 @@ public class TestDepartureTimeOpt {
return waiting + late;
}
@Override
public double getActivityDuration(TourActivity tourAct, double arrivalTime, Driver driver, Vehicle vehicle) {
return tourAct.getOperationTime();
}
});
VehicleRoutingProblem vrp = vrpBuilder.addJob(service).addVehicle(vehicle).build();
@ -143,6 +158,11 @@ public class TestDepartureTimeOpt {
return waiting + late;
}
@Override
public double getActivityDuration(TourActivity tourAct, double arrivalTime, Driver driver, Vehicle vehicle) {
return tourAct.getOperationTime();
}
});
VehicleRoutingProblem vrp = vrpBuilder.addJob(service).addVehicle(vehicle).build();
@ -175,6 +195,11 @@ public class TestDepartureTimeOpt {
return waiting + late;
}
@Override
public double getActivityDuration(TourActivity tourAct, double arrivalTime, Driver driver, Vehicle vehicle) {
return tourAct.getOperationTime();
}
});
VehicleRoutingProblem vrp = vrpBuilder.addJob(service).addJob(service2).addVehicle(vehicle).build();
@ -207,6 +232,11 @@ public class TestDepartureTimeOpt {
return waiting + late;
}
@Override
public double getActivityDuration(TourActivity tourAct, double arrivalTime, Driver driver, Vehicle vehicle) {
return tourAct.getOperationTime();
}
});
VehicleRoutingProblem vrp = vrpBuilder.addJob(service).addJob(service2).addVehicle(vehicle).build();

View file

@ -82,7 +82,7 @@ public class TestLocalActivityInsertionCostsCalculator {
when(tpCosts.getTransportCost(loc("k"), loc("j"), 0.0, null, vehicle)).thenReturn(3.0);
when(tpCosts.getTransportTime(loc("k"), loc("j"), 0.0, null, vehicle)).thenReturn(0.0);
actCosts = mock(VehicleRoutingActivityCosts.class);
actCosts = new WaitingTimeCosts();
calc = new LocalActivityInsertionCostsCalculator(tpCosts, actCosts, mock(StateManager.class));
}
@ -502,8 +502,8 @@ public class TestLocalActivityInsertionCostsCalculator {
private StateManager getStateManager(VehicleRoutingProblem vrp, VehicleRoute route) {
StateManager stateManager = new StateManager(vrp);
stateManager.addStateUpdater(new UpdateActivityTimes(vrp.getTransportCosts()));
stateManager.addStateUpdater(new UpdateVehicleDependentPracticalTimeWindows(stateManager, vrp.getTransportCosts()));
stateManager.addStateUpdater(new UpdateActivityTimes(vrp.getTransportCosts(), vrp.getActivityCosts()));
stateManager.addStateUpdater(new UpdateVehicleDependentPracticalTimeWindows(stateManager, vrp.getTransportCosts(), actCosts));
stateManager.addStateUpdater(new UpdateFutureWaitingTimes(stateManager, vrp.getTransportCosts()));
stateManager.informInsertionStarts(Arrays.asList(route), new ArrayList<Job>());
return stateManager;

View file

@ -73,6 +73,11 @@ public class TestRouteLevelActivityInsertionCostEstimator {
return Math.max(0., arrivalTime - tourAct.getTheoreticalLatestOperationStartTime());
}
@Override
public double getActivityDuration(TourActivity tourAct, double arrivalTime, Driver driver, Vehicle vehicle) {
return tourAct.getOperationTime();
}
};
Service s1 = Service.Builder.newInstance("s1").setLocation(Location.newInstance("10,0")).setTimeWindow(TimeWindow.newInstance(10., 10.)).build();
Service s2 = Service.Builder.newInstance("s2").setLocation(Location.newInstance("20,0")).setTimeWindow(TimeWindow.newInstance(20., 20.)).build();

View file

@ -83,6 +83,11 @@ public class TestRouteLevelServiceInsertionCostEstimator {
return Math.max(0., arrivalTime - tourAct.getTheoreticalLatestOperationStartTime());
}
@Override
public double getActivityDuration(TourActivity tourAct, double arrivalTime, Driver driver, Vehicle vehicle) {
return tourAct.getOperationTime();
}
};
vrpBuilder.setActivityCosts(activityCosts);

View file

@ -22,7 +22,9 @@ import jsprit.core.problem.AbstractActivity;
import jsprit.core.problem.JobActivityFactory;
import jsprit.core.problem.Location;
import jsprit.core.problem.VehicleRoutingProblem;
import jsprit.core.problem.cost.VehicleRoutingActivityCosts;
import jsprit.core.problem.cost.VehicleRoutingTransportCosts;
import jsprit.core.problem.cost.WaitingTimeCosts;
import jsprit.core.problem.driver.Driver;
import jsprit.core.problem.job.Delivery;
import jsprit.core.problem.job.Job;
@ -47,6 +49,8 @@ public class UpdatePracticalTimeWindowTest {
private VehicleRoutingTransportCosts routingCosts;
private VehicleRoutingActivityCosts activityCosts;
private ReverseRouteActivityVisitor reverseActivityVisitor;
private StateManager stateManager;
@ -57,13 +61,14 @@ public class UpdatePracticalTimeWindowTest {
public void doBefore() {
routingCosts = CostFactory.createManhattanCosts();
activityCosts = new WaitingTimeCosts();
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));
reverseActivityVisitor.addActivityVisitor(new UpdatePracticalTimeWindows(stateManager, routingCosts, activityCosts));
Pickup pickup = (Pickup) Pickup.Builder.newInstance("pick").setLocation(Location.newInstance("0,20")).setTimeWindow(TimeWindow.newInstance(0, 30)).build();
Delivery delivery = (Delivery) Delivery.Builder.newInstance("del").setLocation(Location.newInstance("20,20")).setTimeWindow(TimeWindow.newInstance(10, 40)).build();

View file

@ -4,7 +4,9 @@ import jsprit.core.problem.AbstractActivity;
import jsprit.core.problem.JobActivityFactory;
import jsprit.core.problem.Location;
import jsprit.core.problem.VehicleRoutingProblem;
import jsprit.core.problem.cost.VehicleRoutingActivityCosts;
import jsprit.core.problem.cost.VehicleRoutingTransportCosts;
import jsprit.core.problem.cost.WaitingTimeCosts;
import jsprit.core.problem.job.Job;
import jsprit.core.problem.job.Service;
import jsprit.core.problem.solution.route.VehicleRoute;
@ -39,6 +41,8 @@ public class UpdateVehicleDependentTimeWindowTest {
private VehicleRoutingTransportCosts routingCosts;
private VehicleRoutingActivityCosts activityCosts;
private VehicleFleetManager fleetManager;
private VehicleRoutingProblem vrp;
@ -48,6 +52,7 @@ public class UpdateVehicleDependentTimeWindowTest {
VehicleRoutingProblem.Builder vrpBuilder = VehicleRoutingProblem.Builder.newInstance();
routingCosts = CostFactory.createEuclideanCosts();
activityCosts = new WaitingTimeCosts();
vrpBuilder.setRoutingCost(routingCosts);
vehicle = VehicleImpl.Builder.newInstance("v").setStartLocation(Location.newInstance("0,0")).setEarliestStart(0.).setLatestArrival(100.).build();
@ -84,7 +89,7 @@ public class UpdateVehicleDependentTimeWindowTest {
stateManager = new StateManager(vrp);
UpdateVehicleDependentPracticalTimeWindows updater = new UpdateVehicleDependentPracticalTimeWindows(stateManager, routingCosts);
UpdateVehicleDependentPracticalTimeWindows updater = new UpdateVehicleDependentPracticalTimeWindows(stateManager, routingCosts, activityCosts);
updater.setVehiclesToUpdate(new UpdateVehicleDependentPracticalTimeWindows.VehiclesToUpdate() {
@Override
@ -103,7 +108,7 @@ public class UpdateVehicleDependentTimeWindowTest {
@Test
public void whenSwitchIsNotAllowed_itShouldCalOnlyStatesOfCurrentVehicle() {
stateManager = new StateManager(vrp);
UpdateVehicleDependentPracticalTimeWindows updater = new UpdateVehicleDependentPracticalTimeWindows(stateManager, routingCosts);
UpdateVehicleDependentPracticalTimeWindows updater = new UpdateVehicleDependentPracticalTimeWindows(stateManager, routingCosts, activityCosts);
stateManager.addStateUpdater(updater);
stateManager.informInsertionStarts(Arrays.asList(route), Collections.<Job>emptyList());

View file

@ -264,6 +264,11 @@ public class VehicleRoutingProblemTest {
return 4.0;
}
@Override
public double getActivityDuration(TourActivity tourAct, double arrivalTime, Driver driver, Vehicle vehicle) {
return tourAct.getOperationTime();
}
});
VehicleRoutingProblem problem = builder.build();

View file

@ -22,7 +22,9 @@ import jsprit.core.algorithm.state.StateManager;
import jsprit.core.algorithm.state.UpdateActivityTimes;
import jsprit.core.algorithm.state.UpdateVehicleDependentPracticalTimeWindows;
import jsprit.core.problem.*;
import jsprit.core.problem.cost.VehicleRoutingActivityCosts;
import jsprit.core.problem.cost.VehicleRoutingTransportCosts;
import jsprit.core.problem.cost.WaitingTimeCosts;
import jsprit.core.problem.job.Job;
import jsprit.core.problem.job.Service;
import jsprit.core.problem.misc.JobInsertionContext;
@ -52,6 +54,8 @@ public class VehicleDependentTimeWindowTest {
private VehicleRoutingTransportCosts routingCosts;
private VehicleRoutingActivityCosts activityCosts;
private VehicleImpl v3;
private VehicleImpl v4;
private VehicleImpl v5;
@ -61,6 +65,9 @@ public class VehicleDependentTimeWindowTest {
public void doBefore() {
VehicleRoutingProblem.Builder vrpBuilder = VehicleRoutingProblem.Builder.newInstance();
routingCosts = CostFactory.createEuclideanCosts();
activityCosts = new WaitingTimeCosts();
vrpBuilder.setRoutingCost(routingCosts);
VehicleType type = VehicleTypeImpl.Builder.newInstance("type").build();
@ -112,7 +119,7 @@ public class VehicleDependentTimeWindowTest {
final VehicleFleetManager fleetManager = new FiniteFleetManagerFactory(vehicles).createFleetManager();
UpdateVehicleDependentPracticalTimeWindows timeWindow_updater = new UpdateVehicleDependentPracticalTimeWindows(stateManager, routingCosts);
UpdateVehicleDependentPracticalTimeWindows timeWindow_updater = new UpdateVehicleDependentPracticalTimeWindows(stateManager, routingCosts, activityCosts);
timeWindow_updater.setVehiclesToUpdate(new UpdateVehicleDependentPracticalTimeWindows.VehiclesToUpdate() {
@Override
@ -125,7 +132,7 @@ public class VehicleDependentTimeWindowTest {
});
stateManager.addStateUpdater(timeWindow_updater);
stateManager.addStateUpdater(new UpdateActivityTimes(routingCosts));
stateManager.addStateUpdater(new UpdateActivityTimes(routingCosts, activityCosts));
stateManager.informInsertionStarts(Arrays.asList(route), Collections.<Job>emptyList());
}
@ -155,7 +162,7 @@ public class VehicleDependentTimeWindowTest {
JobInsertionContext insertionContext = new JobInsertionContext(route, s4, vehicle, route.getDriver(), 0.);
HardActivityConstraint twConstraint = new VehicleDependentTimeWindowConstraints(stateManager, routingCosts);
HardActivityConstraint twConstraint = new VehicleDependentTimeWindowConstraints(stateManager, routingCosts, activityCosts);
HardActivityConstraint.ConstraintsStatus status = twConstraint.fulfilled(insertionContext, route.getActivities().get(2), serviceAct, route.getEnd(), 30.);
assertTrue(status.equals(HardActivityConstraint.ConstraintsStatus.FULFILLED));
@ -170,7 +177,7 @@ public class VehicleDependentTimeWindowTest {
JobInsertionContext insertionContext = new JobInsertionContext(route, s4, vehicle, route.getDriver(), 0.);
HardActivityConstraint twConstraint = new VehicleDependentTimeWindowConstraints(stateManager, routingCosts);
HardActivityConstraint twConstraint = new VehicleDependentTimeWindowConstraints(stateManager, routingCosts, activityCosts);
HardActivityConstraint.ConstraintsStatus status = twConstraint.fulfilled(insertionContext, route.getActivities().get(2), serviceAct, route.getEnd(), 30.);
assertFalse(status.equals(HardActivityConstraint.ConstraintsStatus.FULFILLED));
@ -185,7 +192,7 @@ public class VehicleDependentTimeWindowTest {
JobInsertionContext insertionContext = new JobInsertionContext(route, s4, vehicle, route.getDriver(), 0.);
HardActivityConstraint twConstraint = new VehicleDependentTimeWindowConstraints(stateManager, routingCosts);
HardActivityConstraint twConstraint = new VehicleDependentTimeWindowConstraints(stateManager, routingCosts, activityCosts);
/*
driverTime = 10 + 10 + 30 + 20 + 30 = 100
*/
@ -207,7 +214,7 @@ public class VehicleDependentTimeWindowTest {
driverTime = 10 + 10 + 31 + 21 + 30 = 102
*/
HardActivityConstraint twConstraint = new VehicleDependentTimeWindowConstraints(stateManager, routingCosts);
HardActivityConstraint twConstraint = new VehicleDependentTimeWindowConstraints(stateManager, routingCosts, activityCosts);
HardActivityConstraint.ConstraintsStatus status = twConstraint.fulfilled(insertionContext, route.getActivities().get(1), serviceAct, route.getActivities().get(2), 20.);
assertFalse(status.equals(HardActivityConstraint.ConstraintsStatus.FULFILLED));
@ -225,7 +232,7 @@ public class VehicleDependentTimeWindowTest {
JobInsertionContext insertionContext = new JobInsertionContext(route, s4, v2, route.getDriver(), 0.);
HardActivityConstraint twConstraint = new VehicleDependentTimeWindowConstraints(stateManager, routingCosts);
HardActivityConstraint twConstraint = new VehicleDependentTimeWindowConstraints(stateManager, routingCosts, activityCosts);
HardActivityConstraint.ConstraintsStatus status = twConstraint.fulfilled(insertionContext, route.getActivities().get(2), serviceAct, route.getEnd(), 30.);
@ -244,7 +251,7 @@ public class VehicleDependentTimeWindowTest {
JobInsertionContext insertionContext = new JobInsertionContext(route, s4, v3, route.getDriver(), 0.);
HardActivityConstraint twConstraint = new VehicleDependentTimeWindowConstraints(stateManager, routingCosts);
HardActivityConstraint twConstraint = new VehicleDependentTimeWindowConstraints(stateManager, routingCosts, activityCosts);
HardActivityConstraint.ConstraintsStatus status = twConstraint.fulfilled(insertionContext, route.getActivities().get(2), serviceAct, route.getEnd(), 30.);
assertFalse(status.equals(HardActivityConstraint.ConstraintsStatus.FULFILLED));
@ -262,7 +269,7 @@ public class VehicleDependentTimeWindowTest {
JobInsertionContext insertionContext = new JobInsertionContext(route, s4, v4, route.getDriver(), 0.);
HardActivityConstraint twConstraint = new VehicleDependentTimeWindowConstraints(stateManager, routingCosts);
HardActivityConstraint twConstraint = new VehicleDependentTimeWindowConstraints(stateManager, routingCosts, activityCosts);
HardActivityConstraint.ConstraintsStatus status = twConstraint.fulfilled(insertionContext, route.getActivities().get(2), serviceAct, route.getEnd(), 30.);
assertFalse(status.equals(HardActivityConstraint.ConstraintsStatus.FULFILLED));
@ -280,7 +287,7 @@ public class VehicleDependentTimeWindowTest {
JobInsertionContext insertionContext = new JobInsertionContext(route, s4, v6, route.getDriver(), 0.);
HardActivityConstraint twConstraint = new VehicleDependentTimeWindowConstraints(stateManager, routingCosts);
HardActivityConstraint twConstraint = new VehicleDependentTimeWindowConstraints(stateManager, routingCosts, activityCosts);
HardActivityConstraint.ConstraintsStatus status = twConstraint.fulfilled(insertionContext, route.getActivities().get(1), serviceAct, route.getActivities().get(2), 30.);
assertFalse(status.equals(HardActivityConstraint.ConstraintsStatus.FULFILLED));
@ -298,7 +305,7 @@ public class VehicleDependentTimeWindowTest {
JobInsertionContext insertionContext = new JobInsertionContext(route, s4, v6, route.getDriver(), 0.);
HardActivityConstraint twConstraint = new VehicleDependentTimeWindowConstraints(stateManager, routingCosts);
HardActivityConstraint twConstraint = new VehicleDependentTimeWindowConstraints(stateManager, routingCosts, activityCosts);
HardActivityConstraint.ConstraintsStatus status = twConstraint.fulfilled(insertionContext, route.getActivities().get(0), serviceAct, route.getActivities().get(1), 10.);
assertFalse(status.equals(HardActivityConstraint.ConstraintsStatus.FULFILLED));
@ -316,7 +323,7 @@ public class VehicleDependentTimeWindowTest {
JobInsertionContext insertionContext = new JobInsertionContext(route, s4, v6, route.getDriver(), 0.);
HardActivityConstraint twConstraint = new VehicleDependentTimeWindowConstraints(stateManager, routingCosts);
HardActivityConstraint twConstraint = new VehicleDependentTimeWindowConstraints(stateManager, routingCosts, activityCosts);
HardActivityConstraint.ConstraintsStatus status = twConstraint.fulfilled(insertionContext, route.getActivities().get(2), serviceAct, route.getEnd(), 30.);
assertTrue(status.equals(HardActivityConstraint.ConstraintsStatus.FULFILLED));
@ -332,7 +339,7 @@ public class VehicleDependentTimeWindowTest {
JobInsertionContext insertionContext = new JobInsertionContext(route, s4, v5, route.getDriver(), 60.);
HardActivityConstraint twConstraint = new VehicleDependentTimeWindowConstraints(stateManager, routingCosts);
HardActivityConstraint twConstraint = new VehicleDependentTimeWindowConstraints(stateManager, routingCosts, activityCosts);
HardActivityConstraint.ConstraintsStatus status = twConstraint.fulfilled(insertionContext, route.getActivities().get(2), serviceAct, route.getEnd(), 90.);
assertFalse(status.equals(HardActivityConstraint.ConstraintsStatus.FULFILLED));

View file

@ -22,7 +22,9 @@ import jsprit.core.algorithm.state.StateManager;
import jsprit.core.algorithm.state.UpdateActivityTimes;
import jsprit.core.algorithm.state.UpdateVehicleDependentPracticalTimeWindows;
import jsprit.core.problem.*;
import jsprit.core.problem.cost.VehicleRoutingActivityCosts;
import jsprit.core.problem.cost.VehicleRoutingTransportCosts;
import jsprit.core.problem.cost.WaitingTimeCosts;
import jsprit.core.problem.job.Job;
import jsprit.core.problem.job.Service;
import jsprit.core.problem.misc.JobInsertionContext;
@ -52,6 +54,8 @@ public class VehicleDependentTimeWindowWithStartTimeAndMaxOperationTimeTest {
private VehicleRoutingTransportCosts routingCosts;
private VehicleRoutingActivityCosts activityCosts;
private VehicleImpl v3;
private VehicleImpl v4;
private VehicleImpl v5;
@ -61,6 +65,7 @@ public class VehicleDependentTimeWindowWithStartTimeAndMaxOperationTimeTest {
public void doBefore() {
VehicleRoutingProblem.Builder vrpBuilder = VehicleRoutingProblem.Builder.newInstance();
routingCosts = CostFactory.createEuclideanCosts();
activityCosts = new WaitingTimeCosts();
vrpBuilder.setRoutingCost(routingCosts);
VehicleType type = VehicleTypeImpl.Builder.newInstance("type").build();
@ -112,7 +117,7 @@ public class VehicleDependentTimeWindowWithStartTimeAndMaxOperationTimeTest {
final VehicleFleetManager fleetManager = new FiniteFleetManagerFactory(vehicles).createFleetManager();
// stateManager.updateTimeWindowStates();
UpdateVehicleDependentPracticalTimeWindows timeWindow_updater = new UpdateVehicleDependentPracticalTimeWindows(stateManager, routingCosts);
UpdateVehicleDependentPracticalTimeWindows timeWindow_updater = new UpdateVehicleDependentPracticalTimeWindows(stateManager, routingCosts, activityCosts);
timeWindow_updater.setVehiclesToUpdate(new UpdateVehicleDependentPracticalTimeWindows.VehiclesToUpdate() {
@Override
@ -125,7 +130,7 @@ public class VehicleDependentTimeWindowWithStartTimeAndMaxOperationTimeTest {
});
stateManager.addStateUpdater(timeWindow_updater);
stateManager.addStateUpdater(new UpdateActivityTimes(routingCosts));
stateManager.addStateUpdater(new UpdateActivityTimes(routingCosts,activityCosts));
stateManager.informInsertionStarts(Arrays.asList(route), Collections.<Job>emptyList());
}
@ -155,7 +160,7 @@ public class VehicleDependentTimeWindowWithStartTimeAndMaxOperationTimeTest {
JobInsertionContext insertionContext = new JobInsertionContext(route, s4, vehicle, route.getDriver(), 0.);
HardActivityConstraint twConstraint = new VehicleDependentTimeWindowConstraints(stateManager, routingCosts);
HardActivityConstraint twConstraint = new VehicleDependentTimeWindowConstraints(stateManager, routingCosts, activityCosts);
HardActivityConstraint.ConstraintsStatus status = twConstraint.fulfilled(insertionContext, route.getActivities().get(2), serviceAct, route.getEnd(), 30.);
assertTrue(status.equals(HardActivityConstraint.ConstraintsStatus.FULFILLED));
@ -170,7 +175,7 @@ public class VehicleDependentTimeWindowWithStartTimeAndMaxOperationTimeTest {
JobInsertionContext insertionContext = new JobInsertionContext(route, s4, vehicle, route.getDriver(), 0.);
HardActivityConstraint twConstraint = new VehicleDependentTimeWindowConstraints(stateManager, routingCosts);
HardActivityConstraint twConstraint = new VehicleDependentTimeWindowConstraints(stateManager, routingCosts, activityCosts);
HardActivityConstraint.ConstraintsStatus status = twConstraint.fulfilled(insertionContext, route.getActivities().get(2), serviceAct, route.getEnd(), 30.);
assertFalse(status.equals(HardActivityConstraint.ConstraintsStatus.FULFILLED));
@ -185,7 +190,7 @@ public class VehicleDependentTimeWindowWithStartTimeAndMaxOperationTimeTest {
JobInsertionContext insertionContext = new JobInsertionContext(route, s4, vehicle, route.getDriver(), 0.);
HardActivityConstraint twConstraint = new VehicleDependentTimeWindowConstraints(stateManager, routingCosts);
HardActivityConstraint twConstraint = new VehicleDependentTimeWindowConstraints(stateManager, routingCosts, activityCosts);
/*
driverTime = 10 + 10 + 30 + 20 + 30 = 100
*/
@ -207,7 +212,7 @@ public class VehicleDependentTimeWindowWithStartTimeAndMaxOperationTimeTest {
driverTime = 10 + 10 + 31 + 21 + 30 = 102
*/
HardActivityConstraint twConstraint = new VehicleDependentTimeWindowConstraints(stateManager, routingCosts);
HardActivityConstraint twConstraint = new VehicleDependentTimeWindowConstraints(stateManager, routingCosts, activityCosts);
HardActivityConstraint.ConstraintsStatus status = twConstraint.fulfilled(insertionContext, route.getActivities().get(1), serviceAct, route.getActivities().get(2), 20.);
assertFalse(status.equals(HardActivityConstraint.ConstraintsStatus.FULFILLED));
@ -225,7 +230,7 @@ public class VehicleDependentTimeWindowWithStartTimeAndMaxOperationTimeTest {
JobInsertionContext insertionContext = new JobInsertionContext(route, s4, v2, route.getDriver(), 0.);
HardActivityConstraint twConstraint = new VehicleDependentTimeWindowConstraints(stateManager, routingCosts);
HardActivityConstraint twConstraint = new VehicleDependentTimeWindowConstraints(stateManager, routingCosts, activityCosts);
HardActivityConstraint.ConstraintsStatus status = twConstraint.fulfilled(insertionContext, route.getActivities().get(2), serviceAct, route.getEnd(), 30.);
@ -244,7 +249,7 @@ public class VehicleDependentTimeWindowWithStartTimeAndMaxOperationTimeTest {
JobInsertionContext insertionContext = new JobInsertionContext(route, s4, v3, route.getDriver(), 0.);
HardActivityConstraint twConstraint = new VehicleDependentTimeWindowConstraints(stateManager, routingCosts);
HardActivityConstraint twConstraint = new VehicleDependentTimeWindowConstraints(stateManager, routingCosts, activityCosts);
HardActivityConstraint.ConstraintsStatus status = twConstraint.fulfilled(insertionContext, route.getActivities().get(2), serviceAct, route.getEnd(), 30.);
assertFalse(status.equals(HardActivityConstraint.ConstraintsStatus.FULFILLED));
@ -262,7 +267,7 @@ public class VehicleDependentTimeWindowWithStartTimeAndMaxOperationTimeTest {
JobInsertionContext insertionContext = new JobInsertionContext(route, s4, v4, route.getDriver(), 0.);
HardActivityConstraint twConstraint = new VehicleDependentTimeWindowConstraints(stateManager, routingCosts);
HardActivityConstraint twConstraint = new VehicleDependentTimeWindowConstraints(stateManager, routingCosts, activityCosts);
HardActivityConstraint.ConstraintsStatus status = twConstraint.fulfilled(insertionContext, route.getActivities().get(2), serviceAct, route.getEnd(), 30.);
assertFalse(status.equals(HardActivityConstraint.ConstraintsStatus.FULFILLED));
@ -280,7 +285,7 @@ public class VehicleDependentTimeWindowWithStartTimeAndMaxOperationTimeTest {
JobInsertionContext insertionContext = new JobInsertionContext(route, s4, v6, route.getDriver(), 0.);
HardActivityConstraint twConstraint = new VehicleDependentTimeWindowConstraints(stateManager, routingCosts);
HardActivityConstraint twConstraint = new VehicleDependentTimeWindowConstraints(stateManager, routingCosts, activityCosts);
HardActivityConstraint.ConstraintsStatus status = twConstraint.fulfilled(insertionContext, route.getActivities().get(1), serviceAct, route.getActivities().get(2), 30.);
assertFalse(status.equals(HardActivityConstraint.ConstraintsStatus.FULFILLED));
@ -298,7 +303,7 @@ public class VehicleDependentTimeWindowWithStartTimeAndMaxOperationTimeTest {
JobInsertionContext insertionContext = new JobInsertionContext(route, s4, v6, route.getDriver(), 0.);
HardActivityConstraint twConstraint = new VehicleDependentTimeWindowConstraints(stateManager, routingCosts);
HardActivityConstraint twConstraint = new VehicleDependentTimeWindowConstraints(stateManager, routingCosts, activityCosts);
HardActivityConstraint.ConstraintsStatus status = twConstraint.fulfilled(insertionContext, route.getActivities().get(0), serviceAct, route.getActivities().get(1), 10.);
assertFalse(status.equals(HardActivityConstraint.ConstraintsStatus.FULFILLED));
@ -316,7 +321,7 @@ public class VehicleDependentTimeWindowWithStartTimeAndMaxOperationTimeTest {
JobInsertionContext insertionContext = new JobInsertionContext(route, s4, v6, route.getDriver(), 0.);
HardActivityConstraint twConstraint = new VehicleDependentTimeWindowConstraints(stateManager, routingCosts);
HardActivityConstraint twConstraint = new VehicleDependentTimeWindowConstraints(stateManager, routingCosts, activityCosts);
HardActivityConstraint.ConstraintsStatus status = twConstraint.fulfilled(insertionContext, route.getActivities().get(2), serviceAct, route.getEnd(), 30.);
assertTrue(status.equals(HardActivityConstraint.ConstraintsStatus.FULFILLED));
@ -332,7 +337,7 @@ public class VehicleDependentTimeWindowWithStartTimeAndMaxOperationTimeTest {
JobInsertionContext insertionContext = new JobInsertionContext(route, s4, v5, route.getDriver(), 60.);
HardActivityConstraint twConstraint = new VehicleDependentTimeWindowConstraints(stateManager, routingCosts);
HardActivityConstraint twConstraint = new VehicleDependentTimeWindowConstraints(stateManager, routingCosts, activityCosts);
HardActivityConstraint.ConstraintsStatus status = twConstraint.fulfilled(insertionContext, route.getActivities().get(2), serviceAct, route.getEnd(), 90.);
assertFalse(status.equals(HardActivityConstraint.ConstraintsStatus.FULFILLED));

View file

@ -2,24 +2,9 @@
<problem xmlns="http://www.w3schools.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3schools.com vrp_xml_schema.xsd">
<problemType>
<fleetSize>FINITE</fleetSize>
<fleetSize>INFINITE</fleetSize>
</problemType>
<vehicles>
<vehicle>
<id>v2</id>
<typeId>vehType2</typeId>
<startLocation>
<id>loc</id>
</startLocation>
<endLocation>
<id>loc</id>
</endLocation>
<timeSchedule>
<start>0.0</start>
<end>1.7976931348623157E308</end>
</timeSchedule>
<returnToDepot>true</returnToDepot>
</vehicle>
<vehicle>
<id>v1</id>
<typeId>vehType</typeId>
@ -48,16 +33,58 @@
<time>0.0</time>
</costs>
</type>
<type>
<id>vehType2</id>
<capacity-dimensions>
<dimension index="0">200</dimension>
</capacity-dimensions>
<costs>
<fixed>0.0</fixed>
<distance>1.0</distance>
<time>0.0</time>
</costs>
</type>
</vehicleTypes>
<services>
<service id="1" type="service">
<location>
<id>loc</id>
</location>
<capacity-dimensions>
<dimension index="0">1</dimension>
</capacity-dimensions>
<duration>2.0</duration>
<timeWindows>
<timeWindow>
<start>0.0</start>
<end>1.7976931348623157E308</end>
</timeWindow>
</timeWindows>
</service>
<service id="2" type="service">
<location>
<id>loc2</id>
</location>
<capacity-dimensions>
<dimension index="0">1</dimension>
</capacity-dimensions>
<duration>4.0</duration>
<timeWindows>
<timeWindow>
<start>0.0</start>
<end>1.7976931348623157E308</end>
</timeWindow>
</timeWindows>
</service>
</services>
<solutions>
<solution>
<cost>10.0</cost>
<routes>
<route>
<driverId>noDriver</driverId>
<vehicleId>v1</vehicleId>
<start>0.0</start>
<act type="service">
<serviceId>1</serviceId>
<arrTime>0.0</arrTime>
<endTime>0.0</endTime>
</act>
<end>0.0</end>
</route>
</routes>
<unassignedJobs>
<job id="2"/>
</unassignedJobs>
</solution>
</solutions>
</problem>