1
0
Fork 0
mirror of https://github.com/graphhopper/jsprit.git synced 2020-01-24 07:45:05 +01:00
This commit is contained in:
oblonski 2015-12-17 08:57:46 +01:00
parent 1075e38504
commit d28471fbda
50 changed files with 753 additions and 796 deletions

View file

@ -124,6 +124,7 @@ public class TestCalculatesServiceInsertion {
states.updateLoadStates();
states.updateTimeWindowStates();
ConstraintManager cManager = new ConstraintManager(vrp, states);
cManager.addLoadConstraint();
cManager.addTimeWindowConstraint();

View file

@ -29,6 +29,7 @@ import jsprit.core.problem.solution.route.VehicleRoute;
import jsprit.core.problem.solution.route.activity.DeliverShipment;
import jsprit.core.problem.solution.route.activity.PickupService;
import jsprit.core.problem.solution.route.activity.PickupShipment;
import jsprit.core.problem.solution.route.activity.TimeWindow;
import jsprit.core.problem.vehicle.Vehicle;
import jsprit.core.problem.vehicle.VehicleImpl;
import jsprit.core.problem.vehicle.VehicleType;
@ -53,6 +54,8 @@ public class TestInserter {
when(vehicle.isReturnToDepot()).thenReturn(true);
when(vehicle.getId()).thenReturn("vehId");
when(service.getTimeWindow()).thenReturn(mock(TimeWindow.class));
VehicleRoute route = VehicleRoute.Builder.newInstance(vehicle, mock(Driver.class)).addService(service).build();
//start - pick(shipment) - del(shipment) - end
Service serviceToInsert = mock(Service.class);
@ -88,6 +91,8 @@ public class TestInserter {
when(vehicle.isReturnToDepot()).thenReturn(false);
when(vehicle.getId()).thenReturn("vehId");
when(service.getTimeWindow()).thenReturn(mock(TimeWindow.class));
VehicleRoute route = VehicleRoute.Builder.newInstance(vehicle, mock(Driver.class)).addService(service).build();
Service serviceToInsert = mock(Service.class);
when(serviceToInsert.getLocation()).thenReturn(Location.Builder.newInstance().setId("delLoc").build());
@ -125,6 +130,9 @@ public class TestInserter {
when(vehicle.isReturnToDepot()).thenReturn(true);
when(vehicle.getId()).thenReturn("vehId");
when(shipment.getPickupTimeWindow()).thenReturn(mock(TimeWindow.class));
when(shipment.getDeliveryTimeWindow()).thenReturn(mock(TimeWindow.class));
VehicleRoute route = VehicleRoute.Builder.newInstance(vehicle, mock(Driver.class)).addPickup(shipment).addDelivery(shipment).build();
//start - pick(shipment) - del(shipment) - end
Shipment shipmentToInsert = Shipment.Builder.newInstance("s").setDeliveryLocation(Location.newInstance("delLoc")).setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()).build();
@ -161,6 +169,9 @@ public class TestInserter {
when(vehicle.isReturnToDepot()).thenReturn(false);
when(vehicle.getId()).thenReturn("vehId");
when(shipment.getPickupTimeWindow()).thenReturn(mock(TimeWindow.class));
when(shipment.getDeliveryTimeWindow()).thenReturn(mock(TimeWindow.class));
VehicleRoute route = VehicleRoute.Builder.newInstance(vehicle, mock(Driver.class)).addPickup(shipment).addDelivery(shipment).build();
//start - pick(shipment) - del(shipment) - end
Shipment shipmentToInsert = Shipment.Builder.newInstance("s").setDeliveryLocation(Location.newInstance("delLoc")).setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()).build();
@ -188,6 +199,9 @@ public class TestInserter {
Vehicle vehicle = VehicleImpl.Builder.newInstance("vehId").setStartLocation(Location.newInstance("vehLoc")).setType(mock(VehicleType.class)).build();
Vehicle newVehicle = VehicleImpl.Builder.newInstance("newVehId").setStartLocation(Location.newInstance("newVehLoc")).setType(mock(VehicleType.class)).build();
when(shipment.getPickupTimeWindow()).thenReturn(mock(TimeWindow.class));
when(shipment.getDeliveryTimeWindow()).thenReturn(mock(TimeWindow.class));
VehicleRoute route = VehicleRoute.Builder.newInstance(vehicle, mock(Driver.class)).addPickup(shipment).addDelivery(shipment).build();
//start - pick(shipment) - del(shipment) - end
Shipment shipmentToInsert = Shipment.Builder.newInstance("s").setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()).setDeliveryLocation(Location.newInstance("delLoc")).build();
@ -213,6 +227,9 @@ public class TestInserter {
Vehicle vehicle = VehicleImpl.Builder.newInstance("vehId").setReturnToDepot(false).setStartLocation(Location.newInstance("vehLoc")).setType(mock(VehicleType.class)).build();
Vehicle newVehicle = VehicleImpl.Builder.newInstance("newVehId").setReturnToDepot(false).setStartLocation(Location.newInstance("newVehLoc")).setType(mock(VehicleType.class)).build();
when(shipment.getPickupTimeWindow()).thenReturn(mock(TimeWindow.class));
when(shipment.getDeliveryTimeWindow()).thenReturn(mock(TimeWindow.class));
VehicleRoute route = VehicleRoute.Builder.newInstance(vehicle, mock(Driver.class)).addPickup(shipment).addDelivery(shipment).build();
//start - pick(shipment) - del(shipment) - end
Shipment shipmentToInsert = Shipment.Builder.newInstance("s").setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()).setDeliveryLocation(Location.newInstance("delLoc")).build();
@ -239,6 +256,9 @@ public class TestInserter {
Vehicle vehicle = VehicleImpl.Builder.newInstance("vehId").setReturnToDepot(false).setStartLocation(Location.Builder.newInstance().setId("vehLoc").build()).setType(mock(VehicleType.class)).build();
Vehicle newVehicle = VehicleImpl.Builder.newInstance("newVehId").setReturnToDepot(false).setStartLocation(Location.Builder.newInstance().setId("newVehLoc").build()).setType(mock(VehicleType.class)).build();
when(shipment.getPickupTimeWindow()).thenReturn(mock(TimeWindow.class));
when(shipment.getDeliveryTimeWindow()).thenReturn(mock(TimeWindow.class));
VehicleRoute route = VehicleRoute.Builder.newInstance(vehicle, mock(Driver.class)).addPickup(shipment).addDelivery(shipment).build();
//start - pick(shipment) - del(shipment) - end
Shipment shipmentToInsert = Shipment.Builder.newInstance("s").setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()).setDeliveryLocation(Location.newInstance("delLoc")).build();

View file

@ -171,6 +171,8 @@ public class TestLocalActivityInsertionCostsCalculator {
TourActivity prevAct = vrp.getActivities(prevS).get(0);
TourActivity newAct = vrp.getActivities(newS).get(0);
TourActivity nextAct = vrp.getActivities(nextS).get(0);
nextAct.setTheoreticalEarliestOperationStartTime(40);
nextAct.setTheoreticalLatestOperationStartTime(80);
VehicleRoute route = VehicleRoute.Builder.newInstance(v).setJobActivityFactory(vrp.getJobActivityFactory()).addService(prevS).addService(nextS).build();
JobInsertionContext context = new JobInsertionContext(route, newS, v, null, 0.);
@ -204,6 +206,9 @@ public class TestLocalActivityInsertionCostsCalculator {
Start prevAct = new Start(Location.newInstance(0, 0), 0, 100);
TourActivity newAct = vrp.getActivities(newS).get(0);
TourActivity nextAct = vrp.getActivities(nextS).get(0);
nextAct.setTheoreticalEarliestOperationStartTime(40);
nextAct.setTheoreticalLatestOperationStartTime(50);
VehicleRoute route = VehicleRoute.Builder.newInstance(v).setJobActivityFactory(vrp.getJobActivityFactory()).addService(nextS).build();
JobInsertionContext context = new JobInsertionContext(route, newS, v, null, 0.);
@ -228,6 +233,9 @@ public class TestLocalActivityInsertionCostsCalculator {
Start prevAct = new Start(Location.newInstance(0, 0), 0, 100);
TourActivity newAct = vrp.getActivities(newS).get(0);
TourActivity nextAct = vrp.getActivities(nextS).get(0);
nextAct.setTheoreticalEarliestOperationStartTime(140);
nextAct.setTheoreticalLatestOperationStartTime(150);
VehicleRoute route = VehicleRoute.Builder.newInstance(v2).setJobActivityFactory(vrp.getJobActivityFactory()).addService(nextS).build();
JobInsertionContext context = new JobInsertionContext(route, newS, v2, null, 0.);
@ -248,6 +256,9 @@ public class TestLocalActivityInsertionCostsCalculator {
Start prevAct = new Start(Location.newInstance(0, 0), 0, 100);
TourActivity newAct = vrp.getActivities(newS).get(0);
newAct.setTheoreticalEarliestOperationStartTime(100);
newAct.setTheoreticalLatestOperationStartTime(150);
End nextAct = new End(Location.newInstance(0, 0), 0, 100);
VehicleRoute route = VehicleRoute.Builder.newInstance(v).setJobActivityFactory(vrp.getJobActivityFactory()).build();
@ -273,6 +284,9 @@ public class TestLocalActivityInsertionCostsCalculator {
TourActivity prevAct = vrp.getActivities(prevS).get(0);
TourActivity newAct = vrp.getActivities(newS).get(0);
TourActivity nextAct = vrp.getActivities(nextS).get(0);
nextAct.setTheoreticalEarliestOperationStartTime(40);
nextAct.setTheoreticalLatestOperationStartTime(50);
VehicleRoute route = VehicleRoute.Builder.newInstance(v).setJobActivityFactory(vrp.getJobActivityFactory()).addService(prevS).addService(nextS).build();
JobInsertionContext context = new JobInsertionContext(route, newS, v, null, 0.);
@ -296,7 +310,13 @@ public class TestLocalActivityInsertionCostsCalculator {
TourActivity prevAct = vrp.getActivities(prevS).get(0);
TourActivity newAct = vrp.getActivities(newS).get(0);
newAct.setTheoreticalEarliestOperationStartTime(100);
newAct.setTheoreticalLatestOperationStartTime(120);
TourActivity nextAct = vrp.getActivities(nextS).get(0);
nextAct.setTheoreticalEarliestOperationStartTime(40);
nextAct.setTheoreticalLatestOperationStartTime(500);
VehicleRoute route = VehicleRoute.Builder.newInstance(v).setJobActivityFactory(vrp.getJobActivityFactory()).addService(prevS).addService(nextS).build();
JobInsertionContext context = new JobInsertionContext(route, newS, v, null, 0.);
@ -323,7 +343,13 @@ public class TestLocalActivityInsertionCostsCalculator {
TourActivity prevAct = vrp.getActivities(prevS).get(0);
TourActivity newAct = vrp.getActivities(newS).get(0);
newAct.setTheoreticalEarliestOperationStartTime(100);
newAct.setTheoreticalLatestOperationStartTime(120);
TourActivity nextAct = vrp.getActivities(nextS).get(0);
nextAct.setTheoreticalEarliestOperationStartTime(400);
nextAct.setTheoreticalLatestOperationStartTime(500);
VehicleRoute route = VehicleRoute.Builder.newInstance(v).setJobActivityFactory(vrp.getJobActivityFactory()).addService(prevS).addService(nextS).addService(afterNextS).build();
@ -358,7 +384,21 @@ public class TestLocalActivityInsertionCostsCalculator {
TourActivity prevAct = vrp.getActivities(prevS).get(0);
TourActivity newAct = vrp.getActivities(newS).get(0);
newAct.setTheoreticalEarliestOperationStartTime(100);
newAct.setTheoreticalLatestOperationStartTime(120);
TourActivity nextAct = vrp.getActivities(nextS).get(0);
nextAct.setTheoreticalEarliestOperationStartTime(40);
nextAct.setTheoreticalLatestOperationStartTime(500);
TourActivity afterNextAct = vrp.getActivities(afterNextS).get(0);
afterNextAct.setTheoreticalEarliestOperationStartTime(80);
afterNextAct.setTheoreticalLatestOperationStartTime(500);
TourActivity afterAfterNextAct = vrp.getActivities(afterAfterNextS).get(0);
afterAfterNextAct.setTheoreticalEarliestOperationStartTime(100);
afterAfterNextAct.setTheoreticalLatestOperationStartTime(500);
VehicleRoute route = VehicleRoute.Builder.newInstance(v).setJobActivityFactory(vrp.getJobActivityFactory()).addService(prevS).addService(nextS).addService(afterNextS).addService(afterAfterNextS).build();
@ -396,7 +436,20 @@ public class TestLocalActivityInsertionCostsCalculator {
TourActivity prevAct = vrp.getActivities(prevS).get(0);
TourActivity newAct = vrp.getActivities(newS).get(0);
newAct.setTheoreticalEarliestOperationStartTime(100);
newAct.setTheoreticalLatestOperationStartTime(120);
TourActivity nextAct = vrp.getActivities(nextS).get(0);
nextAct.setTheoreticalEarliestOperationStartTime(40);
nextAct.setTheoreticalLatestOperationStartTime(500);
TourActivity afterNextAct = vrp.getActivities(afterNextS).get(0);
afterNextAct.setTheoreticalEarliestOperationStartTime(80);
afterNextAct.setTheoreticalLatestOperationStartTime(500);
TourActivity afterAfterNextAct = vrp.getActivities(afterAfterNextS).get(0);
afterAfterNextAct.setTheoreticalEarliestOperationStartTime(100);
afterAfterNextAct.setTheoreticalLatestOperationStartTime(500);
VehicleRoute route = VehicleRoute.Builder.newInstance(v).setJobActivityFactory(vrp.getJobActivityFactory()).addService(prevS).addService(nextS).addService(afterNextS).addService(afterAfterNextS).build();
JobInsertionContext context = new JobInsertionContext(route, newS, v, null, 0.);
@ -438,7 +491,21 @@ public class TestLocalActivityInsertionCostsCalculator {
TourActivity prevAct = vrp.getActivities(prevS).get(0);
TourActivity newAct = vrp.getActivities(newS).get(0);
newAct.setTheoreticalEarliestOperationStartTime(100);
newAct.setTheoreticalLatestOperationStartTime(120);
TourActivity nextAct = vrp.getActivities(nextS).get(0);
nextAct.setTheoreticalEarliestOperationStartTime(40);
nextAct.setTheoreticalLatestOperationStartTime(500);
TourActivity afterNextAct = vrp.getActivities(afterNextS).get(0);
afterNextAct.setTheoreticalEarliestOperationStartTime(80);
afterNextAct.setTheoreticalLatestOperationStartTime(500);
TourActivity afterAfterNextAct = vrp.getActivities(afterAfterNextS).get(0);
afterAfterNextAct.setTheoreticalEarliestOperationStartTime(100);
afterAfterNextAct.setTheoreticalLatestOperationStartTime(500);
VehicleRoute route = VehicleRoute.Builder.newInstance(v).setJobActivityFactory(vrp.getJobActivityFactory()).addService(prevS).addService(nextS).addService(afterNextS).addService(afterAfterNextS).build();
JobInsertionContext context = new JobInsertionContext(route, newS, v, null, 0.);
@ -478,13 +545,29 @@ public class TestLocalActivityInsertionCostsCalculator {
.addJob(afterNextS).addJob(afterAfterNextS).build();
TourActivity prevAct = vrp.getActivities(prevS).get(0);
TourActivity newAct = vrp.getActivities(newS).get(0);
newAct.setTheoreticalEarliestOperationStartTime(50);
newAct.setTheoreticalLatestOperationStartTime(70);
TourActivity nextAct = vrp.getActivities(nextS).get(0);
nextAct.setTheoreticalEarliestOperationStartTime(40);
nextAct.setTheoreticalLatestOperationStartTime(70);
TourActivity afterNextAct = vrp.getActivities(afterNextS).get(0);
afterNextAct.setTheoreticalEarliestOperationStartTime(50);
afterNextAct.setTheoreticalEarliestOperationStartTime(100);
TourActivity afterAfterNextAct = vrp.getActivities(afterAfterNextS).get(0);
afterAfterNextAct.setTheoreticalEarliestOperationStartTime(100);
afterAfterNextAct.setTheoreticalEarliestOperationStartTime(500);
VehicleRoute route = VehicleRoute.Builder.newInstance(v).setJobActivityFactory(vrp.getJobActivityFactory()).addService(prevS).addService(nextS).addService(afterNextS).addService(afterAfterNextS).build();
JobInsertionContext context = new JobInsertionContext(route, newS, v, null, 0.);
StateManager stateManager = getStateManager(vrp, route);
stateManager.updateTimeWindowStates();
stateManager.informInsertionStarts(Arrays.asList(route),new ArrayList<Job>());
LocalActivityInsertionCostsCalculator calc = new LocalActivityInsertionCostsCalculator(CostFactory.createEuclideanCosts(), new WaitingTimeCosts(), stateManager);
calc.setSolutionCompletenessRatio(1.);

View file

@ -84,6 +84,15 @@ public class TestRouteLevelActivityInsertionCostEstimator {
VehicleRoutingProblem.Builder vrpBuilder = VehicleRoutingProblem.Builder.newInstance();
final VehicleRoutingProblem vrp = vrpBuilder.addJob(s1).addJob(s2).addJob(s3).build();
vrp.getActivities(s1).get(0).setTheoreticalEarliestOperationStartTime(10);
vrp.getActivities(s1).get(0).setTheoreticalLatestOperationStartTime(10);
vrp.getActivities(s2).get(0).setTheoreticalEarliestOperationStartTime(20);
vrp.getActivities(s2).get(0).setTheoreticalLatestOperationStartTime(20);
vrp.getActivities(s3).get(0).setTheoreticalEarliestOperationStartTime(30);
vrp.getActivities(s3).get(0).setTheoreticalLatestOperationStartTime(30);
route = VehicleRoute.Builder.newInstance(vehicle).setJobActivityFactory(new JobActivityFactory() {
@Override
public List<AbstractActivity> createActivities(Job job) {
@ -123,6 +132,9 @@ public class TestRouteLevelActivityInsertionCostEstimator {
public void whenNewActWithTWAndServiceTimeInBetweenFirstAndSecond_and_forwardLookingIs0_itShouldReturnCorrectCosts() {
Service s4 = Service.Builder.newInstance("s4").setLocation(Location.newInstance("5,0")).setServiceTime(10.).setTimeWindow(TimeWindow.newInstance(5., 5.)).build();
PickupActivity pickupService = new PickupService(s4);
pickupService.setTheoreticalEarliestOperationStartTime(5);
pickupService.setTheoreticalLatestOperationStartTime(5);
JobInsertionContext context = new JobInsertionContext(route, s4, route.getVehicle(), route.getDriver(), 0.);
RouteLevelActivityInsertionCostsEstimator estimator = new RouteLevelActivityInsertionCostsEstimator(routingCosts, activityCosts, stateManager);
estimator.setForwardLooking(0);
@ -177,6 +189,8 @@ public class TestRouteLevelActivityInsertionCostEstimator {
public void whenNewActWithTWInBetweenSecondAndThird_and_forwardLookingIs3_itShouldReturnCorrectCosts() {
Service s4 = Service.Builder.newInstance("s4").setLocation(Location.newInstance("5,0")).setTimeWindow(TimeWindow.newInstance(5., 5.)).build();
PickupActivity pickupService = new PickupService(s4);
pickupService.setTheoreticalEarliestOperationStartTime(5);
pickupService.setTheoreticalLatestOperationStartTime(5);
JobInsertionContext context = new JobInsertionContext(route, s4, route.getVehicle(), route.getDriver(), 0.);
RouteLevelActivityInsertionCostsEstimator estimator = new RouteLevelActivityInsertionCostsEstimator(routingCosts, activityCosts, stateManager);
estimator.setForwardLooking(3);

View file

@ -96,6 +96,15 @@ public class TestRouteLevelServiceInsertionCostEstimator {
vrpBuilder.addVehicle(vehicle);
vrp = vrpBuilder.build();
vrp.getActivities(s1).get(0).setTheoreticalEarliestOperationStartTime(10);
vrp.getActivities(s1).get(0).setTheoreticalLatestOperationStartTime(10);
vrp.getActivities(s2).get(0).setTheoreticalEarliestOperationStartTime(20);
vrp.getActivities(s2).get(0).setTheoreticalLatestOperationStartTime(20);
vrp.getActivities(s3).get(0).setTheoreticalEarliestOperationStartTime(30);
vrp.getActivities(s3).get(0).setTheoreticalLatestOperationStartTime(30);
activityFactory = new JobActivityFactory() {
@Override
public List<AbstractActivity> createActivities(Job job) {
@ -169,7 +178,10 @@ public class TestRouteLevelServiceInsertionCostEstimator {
public List<AbstractActivity> createActivities(Job job) {
List<AbstractActivity> acts = activityFactory.createActivities(job);
if (acts.isEmpty()) {
acts.add(new PickupService(s4));
PickupService pickupService = new PickupService(s4);
pickupService.setTheoreticalEarliestOperationStartTime(5);
pickupService.setTheoreticalLatestOperationStartTime(5);
acts.add(pickupService);
}
return acts;
}
@ -195,7 +207,10 @@ public class TestRouteLevelServiceInsertionCostEstimator {
public List<AbstractActivity> createActivities(Job job) {
List<AbstractActivity> acts = activityFactory.createActivities(job);
if (acts.isEmpty()) {
acts.add(new PickupService(s4));
PickupService pickupService = new PickupService(s4);
pickupService.setTheoreticalEarliestOperationStartTime(5);
pickupService.setTheoreticalLatestOperationStartTime(5);
acts.add(pickupService);
}
return acts;
}
@ -220,7 +235,10 @@ public class TestRouteLevelServiceInsertionCostEstimator {
public List<AbstractActivity> createActivities(Job job) {
List<AbstractActivity> acts = activityFactory.createActivities(job);
if (acts.isEmpty()) {
acts.add(new PickupService(s4));
PickupService pickupService = new PickupService(s4);
pickupService.setTheoreticalEarliestOperationStartTime(3);
pickupService.setTheoreticalLatestOperationStartTime(3);
acts.add(pickupService);
}
return acts;
}

View file

@ -1,235 +0,0 @@
package jsprit.core.algorithm.state;
import jsprit.core.problem.solution.route.activity.TimeWindow;
import junit.framework.Assert;
import org.junit.Test;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
/**
* Created by schroeder on 08/07/15.
*/
public class GetLatestArrivalTimeTest {
@Test
public void whenSingleTW_itShouldReturnCorrectTime(){
TimeWindow tw = TimeWindow.newInstance(0,10);
Assert.assertEquals(10.,getLatestArrivalTime(Arrays.asList(tw),20));
}
@Test
public void whenSingleTW2_itShouldReturnCorrectTime(){
TimeWindow tw = TimeWindow.newInstance(0,10);
Assert.assertEquals(8.,getLatestArrivalTime(Arrays.asList(tw),8));
}
@Test
public void whenSingleTW3_itShouldReturnCorrectTime(){
TimeWindow tw = TimeWindow.newInstance(2,10);
Assert.assertEquals(1.,getLatestArrivalTime(Arrays.asList(tw),1));
}
@Test
public void whenMultipleTW_itShouldReturnCorrectTime(){
TimeWindow tw = TimeWindow.newInstance(2,10);
TimeWindow tw2 = TimeWindow.newInstance(20,30);
Assert.assertEquals(30.,getLatestArrivalTime(Arrays.asList(tw,tw2),40));
}
@Test
public void whenMultipleTW2_itShouldReturnCorrectTime(){
TimeWindow tw = TimeWindow.newInstance(2,10);
TimeWindow tw2 = TimeWindow.newInstance(20,30);
Assert.assertEquals(25.,getLatestArrivalTime(Arrays.asList(tw,tw2),25));
}
@Test
public void whenMultipleTW3_itShouldReturnCorrectTime(){
TimeWindow tw = TimeWindow.newInstance(2,10);
TimeWindow tw2 = TimeWindow.newInstance(20,30);
Assert.assertEquals(10.,getLatestArrivalTime(Arrays.asList(tw,tw2),19));
}
@Test
public void whenMultipleTW4_itShouldReturnCorrectTime(){
TimeWindow tw = TimeWindow.newInstance(2,10);
TimeWindow tw2 = TimeWindow.newInstance(20,30);
Assert.assertEquals(8.,getLatestArrivalTime(Arrays.asList(tw,tw2),8));
}
@Test
public void whenMultipleTW5_itShouldReturnCorrectTime(){
TimeWindow tw = TimeWindow.newInstance(2,10);
TimeWindow tw2 = TimeWindow.newInstance(20,30);
Assert.assertEquals(1.,getLatestArrivalTime(Arrays.asList(tw,tw2),1));
}
@Test
public void whenMultiple3TW1_itShouldReturnCorrectTime(){
TimeWindow tw = TimeWindow.newInstance(2,10);
TimeWindow tw2 = TimeWindow.newInstance(20,30);
TimeWindow tw3 = TimeWindow.newInstance(40,50);
Assert.assertEquals(30.,getLatestArrivalTime(Arrays.asList(tw,tw2,tw3),35));
}
@Test
public void whenMultiple3TW2_itShouldReturnCorrectTime(){
TimeWindow tw = TimeWindow.newInstance(2,10);
TimeWindow tw2 = TimeWindow.newInstance(20,30);
TimeWindow tw3 = TimeWindow.newInstance(40,50);
Assert.assertEquals(50.,getLatestArrivalTime(Arrays.asList(tw,tw2,tw3),55));
}
@Test
public void whenMultiple3TW3_itShouldReturnCorrectTime(){
TimeWindow tw = TimeWindow.newInstance(2,10);
TimeWindow tw2 = TimeWindow.newInstance(20,30);
TimeWindow tw3 = TimeWindow.newInstance(40,50);
Assert.assertEquals(45.,getLatestArrivalTime(Arrays.asList(tw,tw2,tw3),45));
}
@Test
public void whenSingleTW_ActivityStartTime_shouldReturnCorrectTime(){
TimeWindow tw = TimeWindow.newInstance(2,10);
Assert.assertEquals(2.,getActivityStartTime(Arrays.asList(tw),1));
}
@Test
public void whenSingleTW2_ActivityStartTime_shouldReturnCorrectTime(){
TimeWindow tw = TimeWindow.newInstance(2,10);
Assert.assertEquals(3.,getActivityStartTime(Arrays.asList(tw),3));
}
@Test
public void whenSingleTW3_ActivityStartTime_shouldReturnCorrectTime(){
TimeWindow tw = TimeWindow.newInstance(2,10);
Assert.assertEquals(11.,getActivityStartTime(Arrays.asList(tw),11));
}
@Test
public void whenMultipleTW1_ActivityStartTime_shouldReturnCorrectTime(){
TimeWindow tw = TimeWindow.newInstance(2,10);
TimeWindow tw2 = TimeWindow.newInstance(20,30);
Assert.assertEquals(2.,getActivityStartTime(Arrays.asList(tw,tw2),1));
}
@Test
public void whenMultipleTW2_ActivityStartTime_shouldReturnCorrectTime(){
TimeWindow tw = TimeWindow.newInstance(2,10);
TimeWindow tw2 = TimeWindow.newInstance(20,30);
Assert.assertEquals(3.,getActivityStartTime(Arrays.asList(tw,tw2),3));
}
@Test
public void whenMultipleTW3_ActivityStartTime_shouldReturnCorrectTime(){
TimeWindow tw = TimeWindow.newInstance(2,10);
TimeWindow tw2 = TimeWindow.newInstance(20,30);
Assert.assertEquals(20.,getActivityStartTime(Arrays.asList(tw,tw2),11));
}
@Test
public void whenMultipleTW4_ActivityStartTime_shouldReturnCorrectTime(){
TimeWindow tw = TimeWindow.newInstance(2,10);
TimeWindow tw2 = TimeWindow.newInstance(20,30);
Assert.assertEquals(21.,getActivityStartTime(Arrays.asList(tw,tw2),21));
}
@Test
public void whenMultipleTW5_ActivityStartTime_shouldReturnCorrectTime(){
TimeWindow tw = TimeWindow.newInstance(2,10);
TimeWindow tw2 = TimeWindow.newInstance(20,30);
Assert.assertEquals(31.,getActivityStartTime(Arrays.asList(tw,tw2),31));
}
@Test
public void whenMultiple3TW1_ActivityStartTime_shouldReturnCorrectTime(){
TimeWindow tw = TimeWindow.newInstance(2,10);
TimeWindow tw2 = TimeWindow.newInstance(20,30);
TimeWindow tw3 = TimeWindow.newInstance(40,80);
Assert.assertEquals(40.,getActivityStartTime(Arrays.asList(tw,tw2,tw3),31));
}
@Test
public void whenMultiple3TW2_ActivityStartTime_shouldReturnCorrectTime(){
TimeWindow tw = TimeWindow.newInstance(2,10);
TimeWindow tw2 = TimeWindow.newInstance(20,30);
TimeWindow tw3 = TimeWindow.newInstance(40,80);
Assert.assertEquals(90.,getActivityStartTime(Arrays.asList(tw,tw2,tw3),90));
}
@Test
public void whenMultiple4TW1_ActivityStartTime_shouldReturnCorrectTime(){
TimeWindow tw = TimeWindow.newInstance(2,10);
TimeWindow tw2 = TimeWindow.newInstance(20,30);
TimeWindow tw3 = TimeWindow.newInstance(40,80);
TimeWindow tw4 = TimeWindow.newInstance(140,180);
Assert.assertEquals(140.,getActivityStartTime(Arrays.asList(tw,tw2,tw3,tw4),130));
}
private double getLatestArrivalTime(Collection<TimeWindow> timeWindows, double potentialLatestArrivalTimeAtCurrAct) {
TimeWindow last = null;
for(TimeWindow tw : timeWindows){
if(tw.getStart() <= potentialLatestArrivalTimeAtCurrAct && tw.getEnd() >= potentialLatestArrivalTimeAtCurrAct){
return potentialLatestArrivalTimeAtCurrAct;
}
else if(tw.getStart() > potentialLatestArrivalTimeAtCurrAct){
if(last == null){
return potentialLatestArrivalTimeAtCurrAct;
}
else return last.getEnd();
}
last = tw;
}
return last.getEnd();
}
private double getActivityStartTime(List<TimeWindow> timeWindows, double arrivalTime) {
TimeWindow last = null;
for(int i=timeWindows.size()-1; i >= 0; i--){
TimeWindow tw = timeWindows.get(i);
if(tw.getStart() <= arrivalTime && tw.getEnd() >= arrivalTime){
return arrivalTime;
}
else if(arrivalTime > tw.getEnd()){
if(last != null) return last.getStart();
else return arrivalTime;
}
last = tw;
}
return Math.max(arrivalTime,last.getStart());
}
@Test
public void singleTWshouldWork(){
TimeWindow tw = TimeWindow.newInstance(2,10);
Assert.assertEquals(tw,getNextTimeWindow(11, Arrays.asList(tw)));
}
@Test
public void multipleTWshouldWork(){
TimeWindow tw = TimeWindow.newInstance(2,10);
TimeWindow tw1 = TimeWindow.newInstance(20,30);
Assert.assertEquals(tw1,getNextTimeWindow(19,Arrays.asList(tw,tw1)));
}
@Test
public void multipleTW2shouldWork(){
TimeWindow tw = TimeWindow.newInstance(2,10);
TimeWindow tw1 = TimeWindow.newInstance(20,30);
TimeWindow tw2 = TimeWindow.newInstance(40,50);
Assert.assertEquals(tw2,getNextTimeWindow(31,Arrays.asList(tw,tw1,tw2)));
}
private TimeWindow getNextTimeWindow(double actArrTime, Collection<TimeWindow> timeWindows) {
for(TimeWindow tw : timeWindows){
if(actArrTime >= tw.getStart() && actArrTime <= tw.getEnd()) return tw;
else if(actArrTime < tw.getStart()){
return tw;
}
}
return null;
}
}

View file

@ -1,107 +0,0 @@
/*******************************************************************************
* Copyright (c) 2014 Stefan Schroeder.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3.0 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*
* Contributors:
* Stefan Schroeder - initial API and implementation
******************************************************************************/
package jsprit.core.algorithm.state;
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.VehicleRoutingTransportCosts;
import jsprit.core.problem.driver.Driver;
import jsprit.core.problem.job.Delivery;
import jsprit.core.problem.job.Job;
import jsprit.core.problem.job.Pickup;
import jsprit.core.problem.solution.route.ReverseRouteActivityVisitor;
import jsprit.core.problem.solution.route.VehicleRoute;
import jsprit.core.problem.solution.route.activity.TimeWindow;
import jsprit.core.problem.vehicle.Vehicle;
import jsprit.core.problem.vehicle.VehicleImpl;
import jsprit.core.problem.vehicle.VehicleType;
import jsprit.core.util.CostFactory;
import org.junit.Before;
import org.junit.Test;
import java.util.List;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class UpdatePracticalTimeWindowTest {
private VehicleRoutingTransportCosts routingCosts;
private ReverseRouteActivityVisitor reverseActivityVisitor;
private StateManager stateManager;
private VehicleRoute route;
@Before
public void doBefore() {
routingCosts = CostFactory.createManhattanCosts();
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));
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();
Pickup pickup2 = (Pickup) Pickup.Builder.newInstance("pick2").setLocation(Location.newInstance("20,0")).setTimeWindow(TimeWindow.newInstance(20, 50)).build();
Vehicle vehicle = VehicleImpl.Builder.newInstance("v").setStartLocation(Location.newInstance("0,0")).setType(mock(VehicleType.class)).build();
VehicleRoutingProblem.Builder vrpBuilder = VehicleRoutingProblem.Builder.newInstance();
final VehicleRoutingProblem vrp = vrpBuilder.addJob(pickup).addJob(pickup2).addJob(delivery).build();
route = VehicleRoute.Builder.newInstance(vehicle, mock(Driver.class)).setJobActivityFactory(new JobActivityFactory() {
@Override
public List<AbstractActivity> createActivities(Job job) {
return vrp.copyAndGetActivities(job);
}
})
.addService(pickup).addService(delivery).addService(pickup2).build();
reverseActivityVisitor.visit(route);
}
@Test
public void whenVehicleRouteHasPickupAndDeliveryAndPickup_latestStartTimeOfAct3MustBeCorrect() {
assertEquals(50., route.getActivities().get(2).getTheoreticalLatestOperationStartTime(), 0.01);
assertEquals(50., stateManager.getActivityState(route.getActivities().get(2), InternalStates.LATEST_OPERATION_START_TIME, Double.class), 0.01);
}
@Test
public void whenVehicleRouteHasPickupAndDeliveryAndPickup_latestStartTimeOfAct2MustBeCorrect() {
assertEquals(40., route.getActivities().get(1).getTheoreticalLatestOperationStartTime(), 0.01);
assertEquals(30., stateManager.getActivityState(route.getActivities().get(1), InternalStates.LATEST_OPERATION_START_TIME, Double.class), 0.01);
}
@Test
public void whenVehicleRouteHasPickupAndDeliveryAndPickup_latestStartTimeOfAct1MustBeCorrect() {
assertEquals(30., route.getActivities().get(0).getTheoreticalLatestOperationStartTime(), 0.01);
assertEquals(10., stateManager.getActivityState(route.getActivities().get(0), InternalStates.LATEST_OPERATION_START_TIME, Double.class), 0.01);
}
}

View file

@ -8,6 +8,7 @@ import jsprit.core.problem.cost.VehicleRoutingTransportCosts;
import jsprit.core.problem.job.Job;
import jsprit.core.problem.job.Service;
import jsprit.core.problem.solution.route.VehicleRoute;
import jsprit.core.problem.solution.route.activity.TimeWindow;
import jsprit.core.problem.vehicle.FiniteFleetManagerFactory;
import jsprit.core.problem.vehicle.Vehicle;
import jsprit.core.problem.vehicle.VehicleFleetManager;
@ -192,7 +193,7 @@ public class UpdateVehicleDependentTimeWindowTest {
.setRoutingCost(routingCosts).build();
VehicleRoute route = VehicleRoute.Builder.newInstance(vehicle).setJobActivityFactory(vrp.getJobActivityFactory())
.addService(service).addService(service2).build();
.addService(service).addService(service2, TimeWindow.newInstance(70,80)).build();
StateManager stateManager = new StateManager(vrp);
UpdateVehicleDependentPracticalTimeWindows updater = new UpdateVehicleDependentPracticalTimeWindows(stateManager,routingCosts);

View file

@ -90,7 +90,9 @@ public class SolutionAnalyserTest {
Service s3 = Service.Builder.newInstance("s3")
.setTimeWindow(TimeWindow.newInstance(10, 20))
.setLocation(TestUtils.loc(Coordinate.newInstance(10, 1))).addSizeDimension(0, 2).build();
Service s4 = Service.Builder.newInstance("s4").setLocation(TestUtils.loc(Coordinate.newInstance(10, 10))).addSizeDimension(0, 3).build();
Shipment shipment2 = Shipment.Builder.newInstance("ship2").setPickupLocation(TestUtils.loc(Coordinate.newInstance(15, 2)))
.setPickupServiceTime(20.).setDeliveryServiceTime(20.)
.setDeliveryLocation(TestUtils.loc(Coordinate.newInstance(16, 5))).addSizeDimension(0, 10).build();
@ -120,12 +122,12 @@ public class SolutionAnalyserTest {
.setLatestArrival(150.)
.build();
Pickup s1 = (Pickup) Pickup.Builder.newInstance("s1")
Pickup s1 = Pickup.Builder.newInstance("s1")
.setTimeWindow(TimeWindow.newInstance(10, 20))
.setLocation(Location.newInstance(-10, 1))
.addSizeDimension(0, 10)
.build();
Delivery s2 = (Delivery) Delivery.Builder.newInstance("s2")
Delivery s2 = Delivery.Builder.newInstance("s2")
.setLocation(Location.newInstance(-10, 10))
.setTimeWindow(TimeWindow.newInstance(10, 20))
.addSizeDimension(0, 20)
@ -137,12 +139,12 @@ public class SolutionAnalyserTest {
.setPickupTimeWindow(TimeWindow.newInstance(10, 20)).setDeliveryTimeWindow(TimeWindow.newInstance(10, 20))
.build();
Pickup s3 = (Pickup) Pickup.Builder.newInstance("s3")
Pickup s3 = Pickup.Builder.newInstance("s3")
.setTimeWindow(TimeWindow.newInstance(10, 20))
.setLocation(TestUtils.loc(Coordinate.newInstance(10, 1)))
.addSizeDimension(0, 10)
.build();
Delivery s4 = (Delivery) Delivery.Builder.newInstance("s4").setLocation(Location.newInstance(10, 10))
Delivery s4 = Delivery.Builder.newInstance("s4").setLocation(Location.newInstance(10, 10))
.addSizeDimension(0, 20)
.setTimeWindow(TimeWindow.newInstance(10, 20))
.build();

View file

@ -23,7 +23,9 @@ import org.junit.Test;
import java.util.HashSet;
import java.util.Set;
import static org.hamcrest.core.Is.is;
import static org.junit.Assert.*;
import static org.junit.internal.matchers.IsCollectionContaining.hasItem;
public class ServiceTest {
@ -152,6 +154,27 @@ public class ServiceTest {
assertEquals(2.0, s.getTimeWindow().getEnd(), 0.01);
}
@Test
public void whenAddingSeveralTimeWindows_itShouldBeSetCorrectly(){
TimeWindow tw1 = TimeWindow.newInstance(1.0, 2.0);
TimeWindow tw2 = TimeWindow.newInstance(3.0, 5.0);
Service s = Service.Builder.newInstance("s").setLocation(Location.newInstance("loc"))
.addTimeWindow(tw1)
.addTimeWindow(tw2)
.build();
assertEquals(2, s.getTimeWindows().size());
assertThat(s.getTimeWindows(),hasItem(is(tw1)));
assertThat(s.getTimeWindows(),hasItem(is(tw2)));
}
@Test
public void whenAddingTimeWindow_itShouldBeSetCorrectly(){
Service s = Service.Builder.newInstance("s").setLocation(Location.newInstance("loc"))
.addTimeWindow(TimeWindow.newInstance(1.0, 2.0)).build();
assertEquals(1.0, s.getTimeWindow().getStart(), 0.01);
assertEquals(2.0, s.getTimeWindow().getEnd(), 0.01);
}
@Test
public void whenAddingSkills_theyShouldBeAddedCorrectly() {
Service s = Service.Builder.newInstance("s").setLocation(Location.newInstance("loc"))
@ -189,7 +212,7 @@ public class ServiceTest {
Service s = Service.Builder.newInstance("s").setLocation(Location.newInstance("loc"))
.addTimeWindow(TimeWindow.newInstance(0., 10.)).addTimeWindow(TimeWindow.newInstance(20., 30.))
.setName("name").build();
assertEquals(2,s.getTimeWindows(0.).size());
assertEquals(2,s.getTimeWindows().size());
}
@Test(expected = IllegalStateException.class)

View file

@ -22,7 +22,9 @@ import jsprit.core.util.Coordinate;
import jsprit.core.util.TestUtils;
import org.junit.Test;
import static org.hamcrest.core.Is.is;
import static org.junit.Assert.*;
import static org.junit.internal.matchers.IsCollectionContaining.hasItem;
public class ShipmentTest {
@ -223,6 +225,80 @@ public class ShipmentTest {
assertEquals(2.0, s.getDeliveryTimeWindow().getEnd(), 0.01);
}
@Test
public void whenUsingAddDeliveryTimeWindow_itShouldBeDoneCorrectly() {
Shipment s = Shipment.Builder.newInstance("s").addDeliveryTimeWindow(TimeWindow.newInstance(1, 2))
.setDeliveryLocation(TestUtils.loc("delLoc")).setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()).build();
assertEquals(1.0, s.getDeliveryTimeWindow().getStart(), 0.01);
assertEquals(2.0, s.getDeliveryTimeWindow().getEnd(), 0.01);
}
@Test
public void whenUsingAddDeliveryTimeWindow2_itShouldBeDoneCorrectly() {
Shipment s = Shipment.Builder.newInstance("s").addDeliveryTimeWindow(1, 2)
.setDeliveryLocation(TestUtils.loc("delLoc")).setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()).build();
assertEquals(1.0, s.getDeliveryTimeWindow().getStart(), 0.01);
assertEquals(2.0, s.getDeliveryTimeWindow().getEnd(), 0.01);
}
@Test
public void whenAddingMultipleDeliveryTimeWindows_itShouldBeDoneCorrectly() {
TimeWindow tw1 = TimeWindow.newInstance(1,2);
TimeWindow tw2 = TimeWindow.newInstance(4,5);
Shipment s = Shipment.Builder.newInstance("s").addDeliveryTimeWindow(tw1).addDeliveryTimeWindow(tw2)
.setDeliveryLocation(TestUtils.loc("delLoc")).setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()).build();
assertEquals(s.getDeliveryTimeWindows().size(),2);
assertThat(s.getDeliveryTimeWindows(),hasItem(is(tw1)));
assertThat(s.getDeliveryTimeWindows(),hasItem(is(tw2)));
}
@Test(expected = IllegalStateException.class)
public void whenAddingMultipleOverlappingDeliveryTimeWindows_itShouldThrowException() {
Shipment s = Shipment.Builder.newInstance("s").addDeliveryTimeWindow(1, 3).addDeliveryTimeWindow(2,5)
.setDeliveryLocation(TestUtils.loc("delLoc")).setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()).build();
assertEquals(1.0, s.getDeliveryTimeWindow().getStart(), 0.01);
assertEquals(2.0, s.getDeliveryTimeWindow().getEnd(), 0.01);
}
@Test
public void whenUsingAddPickupTimeWindow_itShouldBeDoneCorrectly() {
Shipment s = Shipment.Builder.newInstance("s").addPickupTimeWindow(TimeWindow.newInstance(1, 2))
.setDeliveryLocation(TestUtils.loc("delLoc")).setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()).build();
assertEquals(1.0, s.getPickupTimeWindow().getStart(), 0.01);
assertEquals(2.0, s.getPickupTimeWindow().getEnd(), 0.01);
}
@Test
public void whenUsingAddPickupTimeWindow2_itShouldBeDoneCorrectly() {
Shipment s = Shipment.Builder.newInstance("s").addPickupTimeWindow(1, 2)
.setDeliveryLocation(TestUtils.loc("delLoc")).setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()).build();
assertEquals(1.0, s.getPickupTimeWindow().getStart(), 0.01);
assertEquals(2.0, s.getPickupTimeWindow().getEnd(), 0.01);
}
@Test
public void whenAddingMultiplePickupTimeWindows_itShouldBeDoneCorrectly() {
TimeWindow tw1 = TimeWindow.newInstance(1,2);
TimeWindow tw2 = TimeWindow.newInstance(4,5);
Shipment s = Shipment.Builder.newInstance("s").addPickupTimeWindow(tw1).addPickupTimeWindow(tw2)
.setDeliveryLocation(TestUtils.loc("delLoc")).setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()).build();
assertEquals(s.getPickupTimeWindows().size(),2);
assertThat(s.getPickupTimeWindows(), hasItem(is(tw1)));
assertThat(s.getPickupTimeWindows(), hasItem(is(tw2)));
}
@Test(expected = IllegalStateException.class)
public void whenAddingMultipleOverlappingPickupTimeWindows_itShouldThrowException() {
Shipment s = Shipment.Builder.newInstance("s").addPickupTimeWindow(1, 3).addPickupTimeWindow(2,5)
.setDeliveryLocation(TestUtils.loc("delLoc")).setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()).build();
assertEquals(1.0, s.getPickupTimeWindow().getStart(), 0.01);
assertEquals(2.0, s.getPickupTimeWindow().getEnd(), 0.01);
}
@Test(expected = IllegalArgumentException.class)
public void whenShipmentHasNegativeCapacityVal_throwIllegalStateExpception() {
@SuppressWarnings("unused")

View file

@ -20,6 +20,7 @@ import jsprit.core.problem.Capacity;
import jsprit.core.problem.Location;
import jsprit.core.problem.driver.Driver;
import jsprit.core.problem.job.Shipment;
import jsprit.core.problem.solution.route.activity.TimeWindow;
import jsprit.core.problem.vehicle.Vehicle;
import jsprit.core.problem.vehicle.VehicleImpl;
import org.junit.Test;
@ -42,6 +43,7 @@ public class VehicleRouteBuilderTest {
public void whenPickupIsAddedTwice_throwsException() {
Shipment s = mock(Shipment.class);
when(s.getSize()).thenReturn(Capacity.Builder.newInstance().build());
when(s.getPickupTimeWindow()).thenReturn(TimeWindow.newInstance(0.,10.));
VehicleRoute.Builder builder = VehicleRoute.Builder.newInstance(mock(Vehicle.class), mock(Driver.class));
builder.addPickup(s);
builder.addPickup(s);
@ -52,6 +54,8 @@ public class VehicleRouteBuilderTest {
Shipment s = mock(Shipment.class);
Capacity capacity = Capacity.Builder.newInstance().build();
when(s.getSize()).thenReturn(capacity);
when(s.getPickupTimeWindow()).thenReturn(TimeWindow.newInstance(0.,10.));
when(s.getDeliveryTimeWindow()).thenReturn(TimeWindow.newInstance(0.,10.));
VehicleRoute.Builder builder = VehicleRoute.Builder.newInstance(mock(Vehicle.class), mock(Driver.class));
builder.addPickup(s);
builder.addDelivery(s);
@ -65,6 +69,10 @@ public class VehicleRouteBuilderTest {
Shipment s2 = mock(Shipment.class);
when(s2.getSize()).thenReturn(capacity);
when(s.getSize()).thenReturn(capacity);
when(s2.getPickupTimeWindow()).thenReturn(TimeWindow.newInstance(0.,10.));
when(s2.getDeliveryTimeWindow()).thenReturn(TimeWindow.newInstance(0.,10.));
when(s.getPickupTimeWindow()).thenReturn(TimeWindow.newInstance(0.,10.));
when(s.getDeliveryTimeWindow()).thenReturn(TimeWindow.newInstance(0.,10.));
VehicleRoute.Builder builder = VehicleRoute.Builder.newInstance(mock(Vehicle.class), mock(Driver.class));
builder.addPickup(s);
builder.addPickup(s2);
@ -79,6 +87,10 @@ public class VehicleRouteBuilderTest {
Capacity capacity = Capacity.Builder.newInstance().build();
when(s.getSize()).thenReturn(capacity);
when(s2.getSize()).thenReturn(capacity);
when(s2.getPickupTimeWindow()).thenReturn(TimeWindow.newInstance(0.,10.));
when(s2.getDeliveryTimeWindow()).thenReturn(TimeWindow.newInstance(0.,10.));
when(s.getPickupTimeWindow()).thenReturn(TimeWindow.newInstance(0.,10.));
when(s.getDeliveryTimeWindow()).thenReturn(TimeWindow.newInstance(0.,10.));
VehicleRoute.Builder builder = VehicleRoute.Builder.newInstance(mock(Vehicle.class), mock(Driver.class));
builder.addPickup(s);
builder.addPickup(s2);
@ -95,6 +107,10 @@ public class VehicleRouteBuilderTest {
Capacity capacity = Capacity.Builder.newInstance().build();
when(s.getSize()).thenReturn(capacity);
when(s2.getSize()).thenReturn(capacity);
when(s2.getPickupTimeWindow()).thenReturn(TimeWindow.newInstance(0.,10.));
when(s2.getDeliveryTimeWindow()).thenReturn(TimeWindow.newInstance(0.,10.));
when(s.getPickupTimeWindow()).thenReturn(TimeWindow.newInstance(0.,10.));
when(s.getDeliveryTimeWindow()).thenReturn(TimeWindow.newInstance(0.,10.));
Vehicle vehicle = VehicleImpl.Builder.newInstance("v").setStartLocation(Location.newInstance("vehLoc")).setEndLocation(Location.newInstance("vehLoc"))
.build();
@ -115,6 +131,10 @@ public class VehicleRouteBuilderTest {
when(s.getSize()).thenReturn(capacity);
when(s2.getSize()).thenReturn(capacity);
when(s2.getDeliveryLocation()).thenReturn(loc("delLoc"));
when(s.getPickupTimeWindow()).thenReturn(TimeWindow.newInstance(0.,10.));
when(s.getDeliveryTimeWindow()).thenReturn(TimeWindow.newInstance(0.,10.));
when(s2.getPickupTimeWindow()).thenReturn(TimeWindow.newInstance(0.,10.));
when(s2.getDeliveryTimeWindow()).thenReturn(TimeWindow.newInstance(0.,10.));
Vehicle vehicle = mock(Vehicle.class);
when(vehicle.isReturnToDepot()).thenReturn(false);
when(vehicle.getStartLocation()).thenReturn(loc("vehLoc"));
@ -139,6 +159,10 @@ public class VehicleRouteBuilderTest {
when(s.getSize()).thenReturn(capacity);
when(s2.getSize()).thenReturn(capacity);
when(s2.getDeliveryLocation()).thenReturn(Location.Builder.newInstance().setId("delLoc").build());
when(s.getPickupTimeWindow()).thenReturn(TimeWindow.newInstance(0.,10.));
when(s.getDeliveryTimeWindow()).thenReturn(TimeWindow.newInstance(0.,10.));
when(s2.getPickupTimeWindow()).thenReturn(TimeWindow.newInstance(0.,10.));
when(s2.getDeliveryTimeWindow()).thenReturn(TimeWindow.newInstance(0.,10.));
Vehicle vehicle = mock(Vehicle.class);
when(vehicle.isReturnToDepot()).thenReturn(false);
when(vehicle.getStartLocation()).thenReturn(Location.Builder.newInstance().setId("vehLoc").build());
@ -162,6 +186,10 @@ public class VehicleRouteBuilderTest {
when(s.getSize()).thenReturn(capacity);
when(s2.getSize()).thenReturn(capacity);
when(s2.getDeliveryLocation()).thenReturn(Location.Builder.newInstance().setId("delLoc").build());
when(s2.getPickupTimeWindow()).thenReturn(TimeWindow.newInstance(0.,10.));
when(s2.getDeliveryTimeWindow()).thenReturn(TimeWindow.newInstance(0.,10.));
when(s.getPickupTimeWindow()).thenReturn(TimeWindow.newInstance(0.,10.));
when(s.getDeliveryTimeWindow()).thenReturn(TimeWindow.newInstance(0.,10.));
Vehicle vehicle = mock(Vehicle.class);
when(vehicle.isReturnToDepot()).thenReturn(false);
when(vehicle.getStartLocation()).thenReturn(Location.Builder.newInstance().setId("vehLoc").build());

View file

@ -33,9 +33,11 @@ public class BreakActivityTest {
@Before
public void doBefore() {
service = (Break) Break.Builder.newInstance("service")
service = Break.Builder.newInstance("service")
.setTimeWindow(TimeWindow.newInstance(1., 2.)).setServiceTime(3).build();
serviceActivity = BreakActivity.newInstance(service);
serviceActivity.setTheoreticalEarliestOperationStartTime(service.getTimeWindow().getStart());
serviceActivity.setTheoreticalLatestOperationStartTime(service.getTimeWindow().getEnd());
}
@Test

View file

@ -32,10 +32,12 @@ public class DeliverServiceTest {
@Before
public void doBefore() {
service = (Delivery) Delivery.Builder.newInstance("service").setLocation(Location.newInstance("loc")).
service = Delivery.Builder.newInstance("service").setLocation(Location.newInstance("loc")).
setTimeWindow(TimeWindow.newInstance(1., 2.)).
addSizeDimension(0, 10).addSizeDimension(1, 100).addSizeDimension(2, 1000).build();
deliver = new DeliverService(service);
deliver.setTheoreticalEarliestOperationStartTime(service.getTimeWindow().getStart());
deliver.setTheoreticalLatestOperationStartTime(service.getTimeWindow().getEnd());
}
@Test

View file

@ -36,6 +36,8 @@ public class DeliverShipmentTest {
.setDeliveryTimeWindow(TimeWindow.newInstance(3., 4.))
.addSizeDimension(0, 10).addSizeDimension(1, 100).addSizeDimension(2, 1000).build();
deliver = new DeliverShipment(shipment);
deliver.setTheoreticalEarliestOperationStartTime(shipment.getDeliveryTimeWindow().getStart());
deliver.setTheoreticalLatestOperationStartTime(shipment.getDeliveryTimeWindow().getEnd());
}
@Test

View file

@ -36,6 +36,8 @@ public class PickupServiceTest {
setTimeWindow(TimeWindow.newInstance(1., 2.)).
addSizeDimension(0, 10).addSizeDimension(1, 100).addSizeDimension(2, 1000).build();
pickup = new PickupService(service);
pickup.setTheoreticalEarliestOperationStartTime(service.getTimeWindow().getStart());
pickup.setTheoreticalLatestOperationStartTime(service.getTimeWindow().getEnd());
}
@Test

View file

@ -36,6 +36,8 @@ public class PickupShipmentTest {
.setDeliveryTimeWindow(TimeWindow.newInstance(3., 4.))
.addSizeDimension(0, 10).addSizeDimension(1, 100).addSizeDimension(2, 1000).build();
pickup = new PickupShipment(shipment);
pickup.setTheoreticalEarliestOperationStartTime(shipment.getPickupTimeWindow().getStart());
pickup.setTheoreticalLatestOperationStartTime(shipment.getPickupTimeWindow().getEnd());
}
@Test

View file

@ -36,6 +36,8 @@ public class ServiceActivityTest {
setTimeWindow(TimeWindow.newInstance(1., 2.)).
addSizeDimension(0, 10).addSizeDimension(1, 100).addSizeDimension(2, 1000).build();
serviceActivity = ServiceActivity.newInstance(service);
serviceActivity.setTheoreticalEarliestOperationStartTime(service.getTimeWindow().getStart());
serviceActivity.setTheoreticalLatestOperationStartTime(service.getTimeWindow().getEnd());
}
@Test

View file

@ -2,9 +2,24 @@
<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>INFINITE</fleetSize>
<fleetSize>FINITE</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>
@ -33,58 +48,16 @@
<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>