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:
parent
390340140f
commit
e5f6edeae4
39 changed files with 277 additions and 379 deletions
|
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue