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

rename core.problem.JobActivityFactory.createActivity to .createActivities

This commit is contained in:
oblonski 2014-07-23 23:12:13 +02:00
parent 3f9e217e6c
commit 8e3977e78f
15 changed files with 237 additions and 66 deletions

View file

@ -5,10 +5,10 @@ import jsprit.core.problem.job.Job;
import java.util.List;
/**
* Created by schroeder on 14.07.14.
* JobActivityFactory that creates the activities to the specified job.
*/
public interface JobActivityFactory {
public List<AbstractActivity> createActivity(Job job);
public List<AbstractActivity> createActivities(Job job);
}

View file

@ -128,7 +128,7 @@ public class VehicleRoute {
private JobActivityFactory jobActivityFactory = new JobActivityFactory() {
@Override
public List<AbstractActivity> createActivity(Job job) {
public List<AbstractActivity> createActivities(Job job) {
List<AbstractActivity> acts = new ArrayList<AbstractActivity>();
if(job instanceof Service){
acts.add(serviceActivityFactory.createActivity((Service) job));
@ -241,7 +241,7 @@ public class VehicleRoute {
*/
@Deprecated
public Builder addService(Service service, double arrTime, double endTime){
List<AbstractActivity> acts = jobActivityFactory.createActivity(service);
List<AbstractActivity> acts = jobActivityFactory.createActivities(service);
TourActivity act = acts.get(0);
act.setArrTime(arrTime);
act.setEndTime(endTime);
@ -272,7 +272,7 @@ public class VehicleRoute {
@Deprecated
public Builder addPickup(Shipment shipment, double arrTime, double endTime){
if(openShipments.contains(shipment)) throw new IllegalStateException("shipment has already been added. cannot add it twice.");
List<AbstractActivity> acts = jobActivityFactory.createActivity(shipment);
List<AbstractActivity> acts = jobActivityFactory.createActivities(shipment);
TourActivity act = acts.get(0);
act.setArrTime(arrTime);
act.setEndTime(endTime);

View file

@ -54,11 +54,11 @@ public class BuildPDVRPWithShipmentsAlgoFromScratch_IT {
final StateManager stateManager = new StateManager(vrp);
stateManager.updateLoadStates();
stateManager.updateTimeWindowStates();
// stateManager.updateTimeWindowStates();
stateManager.addStateUpdater(new UpdateVariableCosts(vrp.getActivityCosts(), vrp.getTransportCosts(), stateManager));
ConstraintManager constraintManager = new ConstraintManager(vrp,stateManager);
constraintManager.addTimeWindowConstraint();
// constraintManager.addTimeWindowConstraint();
constraintManager.addLoadConstraint();
VehicleFleetManager fleetManager = new InfiniteFleetManagerFactory(vrp.getVehicles()).createFleetManager();

View file

@ -21,6 +21,7 @@ package jsprit.core.algorithm.recreate;
import jsprit.core.algorithm.recreate.listener.InsertionListeners;
import jsprit.core.algorithm.state.StateManager;
import jsprit.core.problem.AbstractActivity;
import jsprit.core.problem.JobActivityFactory;
import jsprit.core.problem.VehicleRoutingProblem;
import jsprit.core.problem.constraint.ConstraintManager;
import jsprit.core.problem.constraint.HardActivityStateLevelConstraint;
@ -30,11 +31,13 @@ import jsprit.core.problem.cost.VehicleRoutingTransportCosts;
import jsprit.core.problem.driver.Driver;
import jsprit.core.problem.driver.DriverImpl;
import jsprit.core.problem.job.Delivery;
import jsprit.core.problem.job.Job;
import jsprit.core.problem.job.Pickup;
import jsprit.core.problem.job.Shipment;
import jsprit.core.problem.misc.JobInsertionContext;
import jsprit.core.problem.solution.route.VehicleRoute;
import jsprit.core.problem.solution.route.activity.DeliverService;
import jsprit.core.problem.solution.route.activity.PickupService;
import jsprit.core.problem.solution.route.activity.TourActivity;
import jsprit.core.problem.solution.route.state.RouteAndActivityStateGetter;
import jsprit.core.problem.vehicle.Vehicle;
@ -120,11 +123,25 @@ public class ServiceInsertionAndLoadConstraintsTest {
route.setVehicleAndDepartureTime(vehicle, 0.0);
Inserter inserter = new Inserter(new InsertionListeners(), vehicleRoutingProblem);
{
List<AbstractActivity> acts = new ArrayList<AbstractActivity>();
acts.add(new DeliverService(delivery));
when(vehicleRoutingProblem.copyAndGetActivities(delivery)).thenReturn(acts);
}
{
List<AbstractActivity> acts = new ArrayList<AbstractActivity>();
acts.add(new PickupService(pickup));
when(vehicleRoutingProblem.copyAndGetActivities(pickup)).thenReturn(acts);
}
inserter.insertJob(delivery, new InsertionData(0,0,0,vehicle,null), route);
JobActivityFactory activityFactory = new JobActivityFactory() {
@Override
public List<AbstractActivity> createActivities(Job job) {
return vehicleRoutingProblem.copyAndGetActivities(job);
}
};
VehicleRoutingProblem vrp = mock(VehicleRoutingProblem.class);
StateManager stateManager = new StateManager(vrp);
@ -139,7 +156,10 @@ public class ServiceInsertionAndLoadConstraintsTest {
JobCalculatorSwitcher switcher = new JobCalculatorSwitcher();
ServiceInsertionCalculator serviceInsertionCalc = new ServiceInsertionCalculator(routingCosts, activityInsertionCostsCalculator, constraintManager);
serviceInsertionCalc.setJobActivityFactory(activityFactory);
ShipmentInsertionCalculator insertionCalculator = new ShipmentInsertionCalculator(routingCosts, activityInsertionCostsCalculator, constraintManager);
insertionCalculator.setJobActivityFactory(activityFactory);
switcher.put(Pickup.class, serviceInsertionCalc);
switcher.put(Delivery.class, serviceInsertionCalc);
switcher.put(Shipment.class, insertionCalculator);

View file

@ -21,6 +21,7 @@ package jsprit.core.algorithm.recreate;
import jsprit.core.algorithm.recreate.listener.InsertionListeners;
import jsprit.core.algorithm.state.StateManager;
import jsprit.core.problem.AbstractActivity;
import jsprit.core.problem.JobActivityFactory;
import jsprit.core.problem.VehicleRoutingProblem;
import jsprit.core.problem.constraint.*;
import jsprit.core.problem.constraint.ConstraintManager.Priority;
@ -34,6 +35,7 @@ import jsprit.core.problem.job.Shipment;
import jsprit.core.problem.misc.JobInsertionContext;
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.TourActivity;
import jsprit.core.problem.solution.route.state.RouteAndActivityStateGetter;
@ -113,7 +115,12 @@ public class ShipmentInsertionCalculatorTest {
public void whenCalculatingInsertionCostsOfShipment_itShouldReturnCorrectCostValue(){
Shipment shipment = Shipment.Builder.newInstance("s").addSizeDimension(0, 1).setPickupLocation("0,10").setDeliveryLocation("10,0").build();
VehicleRoute route = VehicleRoute.emptyRoute();
JobActivityFactory activityFactory = mock(JobActivityFactory.class);
List<AbstractActivity> activities = new ArrayList<AbstractActivity>();
activities.add(new PickupShipment(shipment));
activities.add(new DeliverShipment(shipment));
when(activityFactory.createActivities(shipment)).thenReturn(activities);
insertionCalculator.setJobActivityFactory(activityFactory);
InsertionData iData = insertionCalculator.getInsertionData(route, shipment, vehicle, 0.0, null, Double.MAX_VALUE);
assertEquals(40.0,iData.getInsertionCost(),0.05);
}
@ -126,6 +133,13 @@ public class ShipmentInsertionCalculatorTest {
when(vehicleRoutingProblem.copyAndGetActivities(shipment)).thenReturn(getTourActivities(shipment));
new Inserter(new InsertionListeners(), vehicleRoutingProblem).insertJob(shipment, new InsertionData(0,0,0,vehicle,null), route);
JobActivityFactory activityFactory = mock(JobActivityFactory.class);
List<AbstractActivity> activities = new ArrayList<AbstractActivity>();
activities.add(new PickupShipment(shipment2));
activities.add(new DeliverShipment(shipment2));
when(activityFactory.createActivities(shipment2)).thenReturn(activities);
insertionCalculator.setJobActivityFactory(activityFactory);
InsertionData iData = insertionCalculator.getInsertionData(route, shipment2, vehicle, 0.0, null, Double.MAX_VALUE);
assertEquals(0.0,iData.getInsertionCost(),0.05);
assertEquals(1,iData.getPickupInsertionIndex());
@ -156,6 +170,14 @@ public class ShipmentInsertionCalculatorTest {
}
});
JobActivityFactory activityFactory = mock(JobActivityFactory.class);
List<AbstractActivity> activities = new ArrayList<AbstractActivity>();
activities.add(new PickupShipment(shipment2));
activities.add(new DeliverShipment(shipment2));
when(activityFactory.createActivities(shipment2)).thenReturn(activities);
insertionCalculator.setJobActivityFactory(activityFactory);
InsertionData iData = insertionCalculator.getInsertionData(route, shipment2, vehicle, 0.0, null, Double.MAX_VALUE);
assertEquals(InsertionData.createEmptyInsertionData(),iData);
@ -175,6 +197,13 @@ public class ShipmentInsertionCalculatorTest {
inserter.insertJob(shipment, new InsertionData(0,0,0,vehicle,null), route);
inserter.insertJob(shipment2, new InsertionData(0,1,2,vehicle,null),route);
JobActivityFactory activityFactory = mock(JobActivityFactory.class);
List<AbstractActivity> activities = new ArrayList<AbstractActivity>();
activities.add(new PickupShipment(shipment3));
activities.add(new DeliverShipment(shipment3));
when(activityFactory.createActivities(shipment3)).thenReturn(activities);
insertionCalculator.setJobActivityFactory(activityFactory);
InsertionData iData = insertionCalculator.getInsertionData(route, shipment3, vehicle, 0.0, null, Double.MAX_VALUE);
assertEquals(0.0,iData.getInsertionCost(),0.05);
assertEquals(0,iData.getPickupInsertionIndex());
@ -193,6 +222,14 @@ public class ShipmentInsertionCalculatorTest {
inserter.insertJob(shipment, new InsertionData(0,0,0,vehicle,null), route);
inserter.insertJob(shipment2, new InsertionData(0,1,2,vehicle,null),route);
JobActivityFactory activityFactory = mock(JobActivityFactory.class);
List<AbstractActivity> activities = new ArrayList<AbstractActivity>();
activities.add(new PickupShipment(shipment3));
activities.add(new DeliverShipment(shipment3));
when(activityFactory.createActivities(shipment3)).thenReturn(activities);
insertionCalculator.setJobActivityFactory(activityFactory);
InsertionData iData = insertionCalculator.getInsertionData(route, shipment3, vehicle, 0.0, null, Double.MAX_VALUE);
assertEquals(2.0,iData.getInsertionCost(),0.05);
assertEquals(0,iData.getPickupInsertionIndex());
@ -216,8 +253,6 @@ public class ShipmentInsertionCalculatorTest {
inserter.insertJob(shipment, new InsertionData(0,0,0,vehicle,null), route);
inserter.insertJob(shipment2, new InsertionData(0,1,2,vehicle,null), route);
// VehicleRoutingProblem vrp = mock(VehicleRoutingProblem.class);
StateManager stateManager = new StateManager(vrp);
stateManager.updateLoadStates();
stateManager.informInsertionStarts(Arrays.asList(route), null);
@ -229,6 +264,12 @@ public class ShipmentInsertionCalculatorTest {
ShipmentInsertionCalculator insertionCalculator = new ShipmentInsertionCalculator(routingCosts, activityInsertionCostsCalculator,
constraintManager);
JobActivityFactory activityFactory = mock(JobActivityFactory.class);
List<AbstractActivity> activities = new ArrayList<AbstractActivity>();
activities.add(new PickupShipment(shipment3));
activities.add(new DeliverShipment(shipment3));
when(activityFactory.createActivities(shipment3)).thenReturn(activities);
insertionCalculator.setJobActivityFactory(activityFactory);
InsertionData iData = insertionCalculator.getInsertionData(route, shipment3, vehicle, 0.0, DriverImpl.noDriver(), Double.MAX_VALUE);
assertTrue(iData instanceof InsertionData.NoInsertionFound);
@ -269,6 +310,14 @@ public class ShipmentInsertionCalculatorTest {
// Service service = Service.Builder.newInstance("pick", 1).setLocationId("5,5").build();
Pickup service = (Pickup)Pickup.Builder.newInstance("pick").addSizeDimension(0, 1).setLocationId("5,5").build();
JobActivityFactory activityFactory = mock(JobActivityFactory.class);
List<AbstractActivity> activities = new ArrayList<AbstractActivity>();
activities.add(new PickupService(service));
when(activityFactory.createActivities(service)).thenReturn(activities);
insertionCalculator.setJobActivityFactory(activityFactory);
serviceInsertionCalc.setJobActivityFactory(activityFactory);
InsertionData iData = switcher.getInsertionData(route, service, vehicle, 0, DriverImpl.noDriver(), Double.MAX_VALUE);
// routeActVisitor.visit(route);

View file

@ -17,6 +17,8 @@
package jsprit.core.algorithm.recreate;
import jsprit.core.algorithm.state.StateManager;
import jsprit.core.problem.AbstractActivity;
import jsprit.core.problem.JobActivityFactory;
import jsprit.core.problem.VehicleRoutingProblem;
import jsprit.core.problem.constraint.ConstraintManager;
import jsprit.core.problem.cost.AbstractForwardVehicleRoutingTransportCosts;
@ -30,7 +32,6 @@ import jsprit.core.problem.job.Service;
import jsprit.core.problem.misc.JobInsertionContext;
import jsprit.core.problem.solution.route.VehicleRoute;
import jsprit.core.problem.solution.route.activity.TimeWindow;
import jsprit.core.problem.solution.route.activity.TourActivity;
import jsprit.core.problem.vehicle.Vehicle;
import jsprit.core.problem.vehicle.VehicleImpl;
import jsprit.core.problem.vehicle.VehicleType;
@ -48,7 +49,6 @@ import java.util.*;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@ -59,9 +59,9 @@ public class TestCalculatesServiceInsertion {
VehicleRoutingTransportCosts costs;
Vehicle vehicle;
VehicleImpl vehicle;
Vehicle newVehicle;
VehicleImpl newVehicle;
private Service first;
@ -121,7 +121,7 @@ public class TestCalculatesServiceInsertion {
jobs.add(third);
jobs.add(second);
VehicleRoutingProblem vrp = VehicleRoutingProblem.Builder.newInstance().addAllJobs(jobs).addVehicle(vehicle).setRoutingCost(costs).build();
final VehicleRoutingProblem vrp = VehicleRoutingProblem.Builder.newInstance().addAllJobs(jobs).addVehicle(vehicle).setRoutingCost(costs).build();
states = new StateManager(vrp);
states.updateLoadStates();
@ -134,13 +134,12 @@ public class TestCalculatesServiceInsertion {
VehicleRoutingActivityCosts actCosts = mock(VehicleRoutingActivityCosts.class);
serviceInsertion = new ServiceInsertionCalculator(costs, new LocalActivityInsertionCostsCalculator(costs, actCosts), cManager);
serviceInsertion.setJobActivityFactory(new JobActivityFactory() {
@Override
public List<AbstractActivity> createActivities(Job job) {
return vrp.copyAndGetActivities(job);
}
public TourActivity getActivityMock(String id, double earliestOperationStart, double currCost){
TourActivity act = mock(TourActivity.class);
when(act.getLocationId()).thenReturn(id);
return act;
});
}
@Test

View file

@ -19,9 +19,7 @@ package jsprit.core.algorithm.recreate;
import jsprit.core.algorithm.ExampleActivityCostFunction;
import jsprit.core.algorithm.state.StateManager;
import jsprit.core.algorithm.state.UpdateVariableCosts;
import jsprit.core.problem.AbstractVehicle;
import jsprit.core.problem.Capacity;
import jsprit.core.problem.VehicleRoutingProblem;
import jsprit.core.problem.*;
import jsprit.core.problem.constraint.ConstraintManager;
import jsprit.core.problem.cost.AbstractForwardVehicleRoutingTransportCosts;
import jsprit.core.problem.cost.VehicleRoutingTransportCosts;
@ -46,6 +44,7 @@ import org.junit.Test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.mock;
@ -114,7 +113,7 @@ public class TestCalculatesServiceInsertionOnRouteLevel {
jobs.add(second);
jobs.add(third);
VehicleRoutingProblem vrp = VehicleRoutingProblem.Builder.newInstance().addAllJobs(jobs).addVehicle(vehicle).addVehicle(newVehicle).setRoutingCost(costs).build();
final VehicleRoutingProblem vrp = VehicleRoutingProblem.Builder.newInstance().addAllJobs(jobs).addVehicle(vehicle).addVehicle(newVehicle).setRoutingCost(costs).build();
states = new StateManager(vrp);
states.updateLoadStates();
@ -131,7 +130,12 @@ public class TestCalculatesServiceInsertionOnRouteLevel {
serviceInsertion = new ServiceInsertionOnRouteLevelCalculator(costs,activityCosts, actInsertionCostCalculator, cManager, cManager);
serviceInsertion.setNuOfActsForwardLooking(4);
serviceInsertion.setStates(states);
serviceInsertion.setJobActivityFactory(new JobActivityFactory() {
@Override
public List<AbstractActivity> createActivities(Job job) {
return vrp.copyAndGetActivities(job);
}
});
}

View file

@ -85,7 +85,7 @@ public class TestRouteLevelActivityInsertionCostEstimator {
route = VehicleRoute.Builder.newInstance(vehicle).setJobActivityFactory(new JobActivityFactory() {
@Override
public List<AbstractActivity> createActivity(Job job) {
public List<AbstractActivity> createActivities(Job job) {
return vrp.copyAndGetActivities(job);
}

View file

@ -20,6 +20,8 @@ package jsprit.core.algorithm.recreate;
import jsprit.core.algorithm.state.StateManager;
import jsprit.core.algorithm.state.UpdateVariableCosts;
import jsprit.core.problem.AbstractActivity;
import jsprit.core.problem.JobActivityFactory;
import jsprit.core.problem.VehicleRoutingProblem;
import jsprit.core.problem.constraint.ConstraintManager;
import jsprit.core.problem.cost.VehicleRoutingActivityCosts;
@ -28,6 +30,7 @@ import jsprit.core.problem.driver.Driver;
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.PickupService;
import jsprit.core.problem.solution.route.activity.TimeWindow;
import jsprit.core.problem.solution.route.activity.TourActivity;
import jsprit.core.problem.vehicle.Vehicle;
@ -40,10 +43,10 @@ import org.junit.Test;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
/**
* Created by schroeder on 02.07.14.
@ -60,9 +63,16 @@ public class TestRouteLevelServiceInsertionCostEstimator {
private ConstraintManager constraintManager;
private VehicleRoutingProblem vrp;
private JobActivityFactory activityFactory;
@Before
public void doBefore(){
VehicleRoutingProblem.Builder vrpBuilder = VehicleRoutingProblem.Builder.newInstance();
routingCosts = CostFactory.createEuclideanCosts();
vrpBuilder.setRoutingCost(routingCosts);
activityCosts = new VehicleRoutingActivityCosts() {
@ -72,57 +82,94 @@ public class TestRouteLevelServiceInsertionCostEstimator {
}
};
vrpBuilder.setActivityCosts(activityCosts);
Service s1 = Service.Builder.newInstance("s1").setLocationId("10,0").setTimeWindow(TimeWindow.newInstance(10.,10.)).build();
Service s2 = Service.Builder.newInstance("s2").setLocationId("20,0").setTimeWindow(TimeWindow.newInstance(20.,20.)).build();
Service s3 = Service.Builder.newInstance("s3").setLocationId("30,0").setTimeWindow(TimeWindow.newInstance(30.,30.)).build();
vrpBuilder.addJob(s1).addJob(s2).addJob(s3);
VehicleType type = VehicleTypeImpl.Builder.newInstance("type").build();
Vehicle vehicle = VehicleImpl.Builder.newInstance("vehicle").setStartLocationId("0,0").setType(type).build();
VehicleImpl vehicle = VehicleImpl.Builder.newInstance("vehicle").setStartLocationId("0,0").setType(type).build();
vrpBuilder.addVehicle(vehicle);
vrp = vrpBuilder.build();
route = VehicleRoute.Builder.newInstance(vehicle).addService(s1).addService(s2).addService(s3).build();
activityFactory = new JobActivityFactory() {
@Override
public List<AbstractActivity> createActivities(Job job) {
return vrp.copyAndGetActivities(job);
}
};
route = VehicleRoute.Builder.newInstance(vehicle).setJobActivityFactory(activityFactory).addService(s1).addService(s2).addService(s3).build();
stateManager = new StateManager(mock(VehicleRoutingProblem.class));
stateManager.addStateUpdater(new UpdateVariableCosts(activityCosts,routingCosts,stateManager));
stateManager.informInsertionStarts(Arrays.asList(route), Collections.<Job>emptyList());
VehicleRoutingProblem vrp = mock(VehicleRoutingProblem.class);
when(vrp.getTransportCosts()).thenReturn(routingCosts);
constraintManager = new ConstraintManager(vrp,stateManager);
}
@Test
public void whenNewServiceNeedToBeInserted_itShouldReturnCorrectInsertionCosts(){
Service s4 = Service.Builder.newInstance("s4").setLocationId("5,0").setTimeWindow(TimeWindow.newInstance(5.,5.)).build();
final Service s4 = Service.Builder.newInstance("s4").setLocationId("5,0").setTimeWindow(TimeWindow.newInstance(5.,5.)).build();
RouteLevelActivityInsertionCostsEstimator estimator = new RouteLevelActivityInsertionCostsEstimator(routingCosts,activityCosts,stateManager);
estimator.setForwardLooking(0);
ServiceInsertionOnRouteLevelCalculator routeInserter = new ServiceInsertionOnRouteLevelCalculator(routingCosts,
activityCosts,estimator,constraintManager,constraintManager);
routeInserter.setStates(stateManager);
routeInserter.setJobActivityFactory(new JobActivityFactory() {
@Override
public List<AbstractActivity> createActivities(Job job) {
List<AbstractActivity> acts = activityFactory.createActivities(job);
if(acts.isEmpty()){
acts.add(new PickupService(s4));
}
return acts;
}
});
InsertionData iData = routeInserter.getInsertionData(route,s4,route.getVehicle(),route.getDepartureTime(),route.getDriver(),Double.MAX_VALUE);
assertEquals(0.,iData.getInsertionCost(),0.01);
}
@Test
public void whenNewServiceNeedToBeInserted_itShouldReturnCorrectInsertionIndex(){
Service s4 = Service.Builder.newInstance("s4").setLocationId("5,0").setTimeWindow(TimeWindow.newInstance(5.,5.)).build();
final Service s4 = Service.Builder.newInstance("s4").setLocationId("5,0").setTimeWindow(TimeWindow.newInstance(5.,5.)).build();
RouteLevelActivityInsertionCostsEstimator estimator = new RouteLevelActivityInsertionCostsEstimator(routingCosts,activityCosts,stateManager);
estimator.setForwardLooking(0);
ServiceInsertionOnRouteLevelCalculator routeInserter = new ServiceInsertionOnRouteLevelCalculator(routingCosts,
final ServiceInsertionOnRouteLevelCalculator routeInserter = new ServiceInsertionOnRouteLevelCalculator(routingCosts,
activityCosts,estimator,constraintManager,constraintManager);
routeInserter.setStates(stateManager);
routeInserter.setJobActivityFactory(new JobActivityFactory() {
@Override
public List<AbstractActivity> createActivities(Job job) {
List<AbstractActivity> acts = activityFactory.createActivities(job);
if(acts.isEmpty()){
acts.add(new PickupService(s4));
}
return acts;
}
});
InsertionData iData = routeInserter.getInsertionData(route,s4,route.getVehicle(),route.getDepartureTime(),route.getDriver(),Double.MAX_VALUE);
assertEquals(0,iData.getDeliveryInsertionIndex(),0.01);
}
@Test
public void whenNewServiceWithServiceTimeNeedToBeInserted_itShouldReturnCorrectInsertionData(){
Service s4 = Service.Builder.newInstance("s4").setServiceTime(10.).setLocationId("5,0").setTimeWindow(TimeWindow.newInstance(5.,5.)).build();
final Service s4 = Service.Builder.newInstance("s4").setServiceTime(10.).setLocationId("5,0").setTimeWindow(TimeWindow.newInstance(5.,5.)).build();
RouteLevelActivityInsertionCostsEstimator estimator = new RouteLevelActivityInsertionCostsEstimator(routingCosts,activityCosts,stateManager);
estimator.setForwardLooking(0);
ServiceInsertionOnRouteLevelCalculator routeInserter = new ServiceInsertionOnRouteLevelCalculator(routingCosts,
activityCosts,estimator,constraintManager,constraintManager);
routeInserter.setStates(stateManager);
routeInserter.setJobActivityFactory(new JobActivityFactory() {
@Override
public List<AbstractActivity> createActivities(Job job) {
List<AbstractActivity> acts = activityFactory.createActivities(job);
if(acts.isEmpty()){
acts.add(new PickupService(s4));
}
return acts;
}
});
InsertionData iData = routeInserter.getInsertionData(route,s4,route.getVehicle(),route.getDepartureTime(),route.getDriver(),Double.MAX_VALUE);
assertEquals(0,iData.getDeliveryInsertionIndex(),0.01);
assertEquals(30.,iData.getInsertionCost(),0.01);
@ -131,7 +178,7 @@ public class TestRouteLevelServiceInsertionCostEstimator {
@Test
public void whenNewServiceWithServiceTimeNeedToBeInsertedAndRouteIsEmpty_itShouldReturnCorrectInsertionData(){
Service s4 = Service.Builder.newInstance("s4").setServiceTime(10.).setLocationId("5,0").setTimeWindow(TimeWindow.newInstance(5.,5.)).build();
final Service s4 = Service.Builder.newInstance("s4").setServiceTime(10.).setLocationId("5,0").setTimeWindow(TimeWindow.newInstance(5.,5.)).build();
// PickupActivity pickupService = new PickupService(s4);
VehicleRoute emptyroute = VehicleRoute.emptyRoute();
RouteLevelActivityInsertionCostsEstimator estimator = new RouteLevelActivityInsertionCostsEstimator(routingCosts,activityCosts,stateManager);
@ -139,6 +186,16 @@ public class TestRouteLevelServiceInsertionCostEstimator {
ServiceInsertionOnRouteLevelCalculator routeInserter = new ServiceInsertionOnRouteLevelCalculator(routingCosts,
activityCosts,estimator,constraintManager,constraintManager);
routeInserter.setStates(stateManager);
routeInserter.setJobActivityFactory(new JobActivityFactory() {
@Override
public List<AbstractActivity> createActivities(Job job) {
List<AbstractActivity> acts = activityFactory.createActivities(job);
if(acts.isEmpty()){
acts.add(new PickupService(s4));
}
return acts;
}
});
InsertionData iData = routeInserter.getInsertionData(emptyroute,s4,route.getVehicle(),route.getDepartureTime(),route.getDriver(),Double.MAX_VALUE);
assertEquals(0,iData.getDeliveryInsertionIndex(),0.01);
assertEquals(10.,iData.getInsertionCost(),0.01);
@ -146,7 +203,7 @@ public class TestRouteLevelServiceInsertionCostEstimator {
@Test
public void whenNewServiceWithServiceTimeAndTWNeedToBeInsertedAndRouteIsEmpty_itShouldReturnCorrectInsertionData(){
Service s4 = Service.Builder.newInstance("s4").setServiceTime(10.).setLocationId("5,0").setTimeWindow(TimeWindow.newInstance(3.,3.)).build();
final Service s4 = Service.Builder.newInstance("s4").setServiceTime(10.).setLocationId("5,0").setTimeWindow(TimeWindow.newInstance(3.,3.)).build();
// PickupActivity pickupService = new PickupService(s4);
VehicleRoute emptyroute = VehicleRoute.emptyRoute();
RouteLevelActivityInsertionCostsEstimator estimator = new RouteLevelActivityInsertionCostsEstimator(routingCosts,activityCosts,stateManager);
@ -154,6 +211,16 @@ public class TestRouteLevelServiceInsertionCostEstimator {
ServiceInsertionOnRouteLevelCalculator routeInserter = new ServiceInsertionOnRouteLevelCalculator(routingCosts,
activityCosts,estimator,constraintManager,constraintManager);
routeInserter.setStates(stateManager);
routeInserter.setJobActivityFactory(new JobActivityFactory() {
@Override
public List<AbstractActivity> createActivities(Job job) {
List<AbstractActivity> acts = activityFactory.createActivities(job);
if(acts.isEmpty()){
acts.add(new PickupService(s4));
}
return acts;
}
});
InsertionData iData = routeInserter.getInsertionData(emptyroute,s4,route.getVehicle(),route.getDepartureTime(),route.getDriver(),Double.MAX_VALUE);
assertEquals(0,iData.getDeliveryInsertionIndex(),0.01);
assertEquals(10.+2.,iData.getInsertionCost(),0.01);

View file

@ -62,7 +62,7 @@ public class LoadStateTest {
serviceRouteBuilder.setJobActivityFactory(new JobActivityFactory() {
@Override
public List<AbstractActivity> createActivity(Job job) {
public List<AbstractActivity> createActivities(Job job) {
return serviceProblem.copyAndGetActivities(job);
}
@ -72,7 +72,7 @@ public class LoadStateTest {
VehicleRoute.Builder pdRouteBuilder = VehicleRoute.Builder.newInstance(vehicle);
pdRouteBuilder.setJobActivityFactory(new JobActivityFactory() {
@Override
public List<AbstractActivity> createActivity(Job job) {
public List<AbstractActivity> createActivities(Job job) {
return pdProblem.copyAndGetActivities(job);
}
});
@ -81,7 +81,7 @@ public class LoadStateTest {
VehicleRoute.Builder shipmentRouteBuilder = VehicleRoute.Builder.newInstance(vehicle);
shipmentRouteBuilder.setJobActivityFactory(new JobActivityFactory() {
@Override
public List<AbstractActivity> createActivity(Job job) {
public List<AbstractActivity> createActivities(Job job) {
return shipmentProblem.copyAndGetActivities(job);
}
});

View file

@ -0,0 +1,32 @@
package jsprit.core.algorithm.state;
import jsprit.core.algorithm.VehicleRoutingAlgorithm;
import jsprit.core.algorithm.io.VehicleRoutingAlgorithms;
import jsprit.core.problem.VehicleRoutingProblem;
import jsprit.core.problem.io.VrpXMLReader;
import jsprit.core.problem.solution.VehicleRoutingProblemSolution;
import jsprit.core.util.Solutions;
import org.junit.Test;
import java.util.Collection;
import static org.junit.Assert.assertEquals;
/**
* Created by schroeder on 23.07.14.
*/
public class Solomon_IT {
@Test
public void itShouldFindTheBestKnownSolution(){
VehicleRoutingProblem.Builder vrpBuilder = VehicleRoutingProblem.Builder.newInstance();
new VrpXMLReader(vrpBuilder).read("src/test/resources/solomon_c101.xml");
VehicleRoutingProblem vrp = vrpBuilder.build();
VehicleRoutingAlgorithm vra = VehicleRoutingAlgorithms.readAndCreateAlgorithm(vrp,"src/test/resources/algorithmConfig.xml");
vra.setNuOfIterations(500);
Collection<VehicleRoutingProblemSolution> solutions = vra.searchSolutions();
assertEquals(828.94, Solutions.bestOf(solutions).getCost(),0.01);
}
}

View file

@ -73,7 +73,7 @@ public class UpdatePracticalTimeWindowTest {
route = VehicleRoute.Builder.newInstance(vehicle, mock(Driver.class)).setJobActivityFactory(new JobActivityFactory() {
@Override
public List<AbstractActivity> createActivity(Job job) {
public List<AbstractActivity> createActivities(Job job) {
return vrp.copyAndGetActivities(job);
}
})

View file

@ -77,7 +77,7 @@ public class UpdateVehicleDependentTimeWindowTest {
route = VehicleRoute.Builder.newInstance(vehicle).setJobActivityFactory(new JobActivityFactory() {
@Override
public List<AbstractActivity> createActivity(Job job) {
public List<AbstractActivity> createActivities(Job job) {
return vrp.copyAndGetActivities(job);
}
}).addService(service).addService(service2).addService(service3).build();

View file

@ -64,7 +64,7 @@ public class LoadConstraintTest {
serviceRouteBuilder.setJobActivityFactory(new JobActivityFactory() {
@Override
public List<AbstractActivity> createActivity(Job job) {
public List<AbstractActivity> createActivities(Job job) {
return serviceProblem.copyAndGetActivities(job);
}
@ -74,7 +74,7 @@ public class LoadConstraintTest {
VehicleRoute.Builder pdRouteBuilder = VehicleRoute.Builder.newInstance(vehicle);
pdRouteBuilder.setJobActivityFactory(new JobActivityFactory() {
@Override
public List<AbstractActivity> createActivity(Job job) {
public List<AbstractActivity> createActivities(Job job) {
return pdProblem.copyAndGetActivities(job);
}
});
@ -83,7 +83,7 @@ public class LoadConstraintTest {
VehicleRoute.Builder shipmentRouteBuilder = VehicleRoute.Builder.newInstance(vehicle);
shipmentRouteBuilder.setJobActivityFactory(new JobActivityFactory() {
@Override
public List<AbstractActivity> createActivity(Job job) {
public List<AbstractActivity> createActivities(Job job) {
return shipmentProblem.copyAndGetActivities(job);
}
});

View file

@ -82,7 +82,7 @@ public class VehicleDependentTimeWindowTest {
route = VehicleRoute.Builder.newInstance(vehicle).setJobActivityFactory(new JobActivityFactory() {
@Override
public List<AbstractActivity> createActivity(Job job) {
public List<AbstractActivity> createActivities(Job job) {
return vrp.copyAndGetActivities(job);
}