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:
parent
3f9e217e6c
commit
8e3977e78f
15 changed files with 237 additions and 66 deletions
|
|
@ -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);
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
@ -112,7 +115,7 @@ public class ServiceInsertionAndLoadConstraintsTest {
|
|||
public void whenInsertingServiceWhileNoCapIsAvailable_itMustReturnTheCorrectInsertionIndex(){
|
||||
Delivery delivery = (Delivery) Delivery.Builder.newInstance("del").addSizeDimension(0, 41).setLocationId("10,10").build();
|
||||
Pickup pickup = (Pickup) Pickup.Builder.newInstance("pick").addSizeDimension(0, 15).setLocationId("0,10").build();
|
||||
|
||||
|
||||
VehicleType type = VehicleTypeImpl.Builder.newInstance("t").addCapacityDimension(0, 50).setCostPerDistance(1).build();
|
||||
Vehicle vehicle = VehicleImpl.Builder.newInstance("v").setStartLocationId("0,0").setType(type).build();
|
||||
|
||||
|
|
@ -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);
|
||||
inserter.insertJob(delivery, new InsertionData(0,0,0,vehicle,null), route);
|
||||
|
||||
{
|
||||
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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
@ -125,7 +132,14 @@ public class ShipmentInsertionCalculatorTest {
|
|||
VehicleRoute route = VehicleRoute.emptyRoute();
|
||||
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,7 +170,15 @@ public class ShipmentInsertionCalculatorTest {
|
|||
}
|
||||
|
||||
});
|
||||
InsertionData iData = insertionCalculator.getInsertionData(route, shipment2, vehicle, 0.0, null, Double.MAX_VALUE);
|
||||
|
||||
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);
|
||||
|
||||
}
|
||||
|
|
@ -174,7 +196,14 @@ public class ShipmentInsertionCalculatorTest {
|
|||
Inserter inserter = new Inserter(new InsertionListeners(),vehicleRoutingProblem );
|
||||
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());
|
||||
|
|
@ -192,8 +221,16 @@ public class ShipmentInsertionCalculatorTest {
|
|||
Inserter inserter = new Inserter(new InsertionListeners(), vehicleRoutingProblem);
|
||||
inserter.insertJob(shipment, new InsertionData(0,0,0,vehicle,null), route);
|
||||
inserter.insertJob(shipment2, new InsertionData(0,1,2,vehicle,null),route);
|
||||
|
||||
InsertionData iData = insertionCalculator.getInsertionData(route, shipment3, vehicle, 0.0, null, Double.MAX_VALUE);
|
||||
|
||||
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());
|
||||
assertEquals(1,iData.getDeliveryInsertionIndex());
|
||||
|
|
@ -215,10 +252,8 @@ 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 stateManager = new StateManager(vrp);
|
||||
stateManager.updateLoadStates();
|
||||
stateManager.informInsertionStarts(Arrays.asList(route), null);
|
||||
|
||||
|
|
@ -228,8 +263,14 @@ 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,7 +310,15 @@ 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();
|
||||
InsertionData iData = switcher.getInsertionData(route, service, vehicle, 0, DriverImpl.noDriver(), Double.MAX_VALUE);
|
||||
|
||||
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);
|
||||
|
||||
assertEquals(3, iData.getDeliveryInsertionIndex());
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
}
|
||||
|
||||
public TourActivity getActivityMock(String id, double earliestOperationStart, double currCost){
|
||||
TourActivity act = mock(TourActivity.class);
|
||||
when(act.getLocationId()).thenReturn(id);
|
||||
return act;
|
||||
serviceInsertion.setJobActivityFactory(new JobActivityFactory() {
|
||||
@Override
|
||||
public List<AbstractActivity> createActivities(Job job) {
|
||||
return vrp.copyAndGetActivities(job);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
})
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue