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

refine test

This commit is contained in:
Stefan Schroeder 2013-11-12 17:42:17 +01:00
parent 91e49681e1
commit a7f2131cab
2 changed files with 34482 additions and 1641 deletions

View file

@ -60,7 +60,7 @@ public class BuildPDVRPWithShipmentsAlgoFromScratchTest {
public void setup(){
VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance();
new VrpXMLReader(builder).read("src/test/resources/C101_solomon_pd.xml");
new VrpXMLReader(builder).read("src/test/resources/pdp.xml");
// VehicleType type = VehicleTypeImpl.Builder.newInstance("t", 2).setCostPerDistance(1.0).build();
// Vehicle v = VehicleImpl.Builder.newInstance("v").setLocationCoord(Coordinate.newInstance(-1, -1)).setType(type).build();
//
@ -82,23 +82,34 @@ public class BuildPDVRPWithShipmentsAlgoFromScratchTest {
constraintManager.addLoadConstraint();
constraintManager.addConstraint(new HardPickupAndDeliveryShipmentActivityLevelConstraint(stateManager,true));
ActivityInsertionCostsCalculator marginalCalculus = new LocalActivityInsertionCostsCalculator(vrp.getTransportCosts(), vrp.getActivityCosts());
ShipmentInsertionCalculator shipmentInsertion = new ShipmentInsertionCalculator(vrp.getTransportCosts(), marginalCalculus, constraintManager, constraintManager);
ServiceInsertionCalculator serviceInsertion = new ServiceInsertionCalculator(vrp.getTransportCosts(), marginalCalculus, constraintManager, constraintManager);
JobCalculatorSwitcher switcher = new JobCalculatorSwitcher();
switcher.put(Shipment.class, shipmentInsertion);
switcher.put(Service.class, serviceInsertion);
VehicleFleetManager fleetManager = new InfiniteFleetManagerFactory(vrp.getVehicles()).createFleetManager();
JobInsertionCostsCalculator finalServiceInsertion = new VehicleTypeDependentJobInsertionCalculator(fleetManager, switcher);
BestInsertion bestInsertion = new BestInsertion(finalServiceInsertion);
int nuOfThreads = 10;
executorService = Executors.newFixedThreadPool(nuOfThreads);
BestInsertionBuilder bestIBuilder = new BestInsertionBuilder(vrp, fleetManager, stateManager);
bestIBuilder.setConstraintManager(constraintManager);
bestIBuilder.setConcurrentMode(executorService, nuOfThreads);
InsertionStrategy bestInsertion = bestIBuilder.build();
// bestIBuilder.
// ActivityInsertionCostsCalculator marginalCalculus = new LocalActivityInsertionCostsCalculator(vrp.getTransportCosts(), vrp.getActivityCosts());
//
// ShipmentInsertionCalculator shipmentInsertion = new ShipmentInsertionCalculator(vrp.getTransportCosts(), marginalCalculus, constraintManager, constraintManager);
//
// ServiceInsertionCalculator serviceInsertion = new ServiceInsertionCalculator(vrp.getTransportCosts(), marginalCalculus, constraintManager, constraintManager);
//
// JobCalculatorSwitcher switcher = new JobCalculatorSwitcher();
// switcher.put(Shipment.class, shipmentInsertion);
// switcher.put(Service.class, serviceInsertion);
//
//
// JobInsertionCostsCalculator finalServiceInsertion = new VehicleTypeDependentJobInsertionCalculator(fleetManager, switcher);
//
// BestInsertion bestInsertion = new BestInsertion(finalServiceInsertion);
executorService = Executors.newFixedThreadPool(2);;
// BestInsertionConc bestInsertion = new BestInsertionConc(finalServiceInsertion, executorService, 2);
RuinRadial radial = new RuinRadial(vrp, 0.3, new AvgJobDistance(vrp.getTransportCosts()));
@ -128,55 +139,55 @@ public class BuildPDVRPWithShipmentsAlgoFromScratchTest {
strategyManager.addStrategy(radialStrategy, 0.5);
strategyManager.addStrategy(randomStrategy, 0.5);
vra = new VehicleRoutingAlgorithm(vrp, strategyManager);
vra = new VehicleRoutingAlgorithmFactoryImpl(strategyManager, stateManager, fleetManager).createAlgorithm(vrp);
vra.getAlgorithmListeners().addListener(stateManager);
// vra.getAlgorithmListeners().addListener(stateManager);
final RouteActivityVisitor iterateForward = new RouteActivityVisitor();
// final RouteActivityVisitor iterateForward = new RouteActivityVisitor();
iterateForward.addActivityVisitor(new UpdateActivityTimes(vrp.getTransportCosts()));
iterateForward.addActivityVisitor(new UpdateVariableCosts(vrp.getActivityCosts(), vrp.getTransportCosts(), stateManager));
// iterateForward.addActivityVisitor(new UpdateActivityTimes(vrp.getTransportCosts()));
// iterateForward.addActivityVisitor(new UpdateVariableCosts(vrp.getActivityCosts(), vrp.getTransportCosts(), stateManager));
//
// iterateForward.addActivityVisitor(new UpdateOccuredDeliveries(stateManager));
// iterateForward.addActivityVisitor(new UpdateLoads(stateManager));
//
// final ReverseRouteActivityVisitor iterateBackward = new ReverseRouteActivityVisitor();
// iterateBackward.addActivityVisitor(new TimeWindowUpdater(stateManager, vrp.getTransportCosts()));
// iterateBackward.addActivityVisitor(new UpdateFuturePickups(stateManager));
//
// JobInsertedListener updateWhenJobHasBeenInserted = new JobInsertedListener() {
//
// @Override
// public void informJobInserted(Job job2insert, VehicleRoute inRoute, double additionalCosts, double additionalTime) {
// iterateForward.visit(inRoute);
// iterateBackward.visit(inRoute);
// }
//
// };
//
// InsertionStartsListener updateRoutesWhenInsertionStarts = new InsertionStartsListener() {
//
// @Override
// public void informInsertionStarts(Collection<VehicleRoute> vehicleRoutes, Collection<Job> unassignedJobs) {
// for(VehicleRoute route : vehicleRoutes){
// iterateForward.visit(route);
// iterateBackward.visit(route);
// }
//
// }
// };
iterateForward.addActivityVisitor(new UpdateOccuredDeliveries(stateManager));
iterateForward.addActivityVisitor(new UpdateLoads(stateManager));
// vra.getSearchStrategyManager().addSearchStrategyModuleListener(new RemoveEmptyVehicles(fleetManager));
final ReverseRouteActivityVisitor iterateBackward = new ReverseRouteActivityVisitor();
iterateBackward.addActivityVisitor(new TimeWindowUpdater(stateManager, vrp.getTransportCosts()));
iterateBackward.addActivityVisitor(new UpdateFuturePickups(stateManager));
JobInsertedListener updateWhenJobHasBeenInserted = new JobInsertedListener() {
@Override
public void informJobInserted(Job job2insert, VehicleRoute inRoute, double additionalCosts, double additionalTime) {
iterateForward.visit(inRoute);
iterateBackward.visit(inRoute);
}
};
InsertionStartsListener updateRoutesWhenInsertionStarts = new InsertionStartsListener() {
@Override
public void informInsertionStarts(Collection<VehicleRoute> vehicleRoutes, Collection<Job> unassignedJobs) {
for(VehicleRoute route : vehicleRoutes){
iterateForward.visit(route);
iterateBackward.visit(route);
}
}
};
vra.getSearchStrategyManager().addSearchStrategyModuleListener(new RemoveEmptyVehicles(fleetManager));
bestInsertion.addListener(new UpdateLoads(stateManager));
bestInsertion.addListener(updateWhenJobHasBeenInserted);
bestInsertion.addListener(updateRoutesWhenInsertionStarts);
// bestInsertion.addListener(new UpdateLoads(stateManager));
// bestInsertion.addListener(updateWhenJobHasBeenInserted);
// bestInsertion.addListener(updateRoutesWhenInsertionStarts);
VehicleRoutingProblemSolution iniSolution = new InsertionInitialSolutionFactory(bestInsertion, solutionCostCalculator).createSolution(vrp);
// System.out.println("ini: costs="+iniSolution.getCost()+";#routes="+iniSolution.getRoutes().size());
vra.addInitialSolution(iniSolution);
vra.setNuOfIterations(1000);
vra.setNuOfIterations(100);
// vra.setPrematureBreak(500);
}

File diff suppressed because it is too large Load diff