public static void main(String[] args) { VehicleRoutingProblem.Builder vrpBuilder = VehicleRoutingProblem.Builder.newInstance(); /* * A solomonReader reads solomon-instance files, and stores the required information in the builder. */ new VrpXMLReader(vrpBuilder).read("input/stackoverflow/vrpnc1-jsprit.xml"); /* * Finally, the problem can be built. By default, transportCosts are crowFlyDistances (as usually used for vrp-instances). */ VehicleRoutingProblem vrp = vrpBuilder.build(); final StateManager stateManager = new StateManager(vrp.getTransportCosts()); ConstraintManager constraintManager = new ConstraintManager(vrp, stateManager); VehicleRoutingAlgorithmBuilder vraBuilder = new VehicleRoutingAlgorithmBuilder(vrp, "input/stackoverflow/rr_ta.xml"); vraBuilder.setStateAndConstraintManager(stateManager, constraintManager); vraBuilder.addDefaultCostCalculators(); VehicleRoutingAlgorithm vra = vraBuilder.build(); vra.addListener(new AlgorithmSearchProgressChartListener("output/search")); // Collection<VehicleRoutingProblemSolution> solutions = vra.searchSolutions(); SolutionPrinter.print(vrp, Solutions.bestOf(solutions), Print.VERBOSE); new Plotter(vrp, Solutions.bestOf(solutions)) .setLabel(Label.ID) .plot("output/jsprit_vrpnc1_noConstraints", "jsprit: noConstraints"); }
@Override public void informAlgorithmStarts( VehicleRoutingProblem problem, VehicleRoutingAlgorithm algorithm, Collection<VehicleRoutingProblemSolution> solutions) { logger.info("prepare schrimpfAcceptanceFunction, i.e. determine initial threshold"); double now = System.currentTimeMillis(); /* * randomWalk to determine standardDev */ final double[] results = new double[nOfRandomWalks]; URL resource = Resource.getAsURL("randomWalk.xml"); AlgorithmConfig algorithmConfig = new AlgorithmConfig(); new AlgorithmConfigXmlReader(algorithmConfig).read(resource); VehicleRoutingAlgorithm vra = VehicleRoutingAlgorithms.createAlgorithm(problem, algorithmConfig); vra.setMaxIterations(nOfRandomWalks); vra.getAlgorithmListeners() .addListener( new IterationEndsListener() { @Override public void informIterationEnds( int iteration, VehicleRoutingProblem problem, Collection<VehicleRoutingProblemSolution> solutions) { double result = Solutions.bestOf(solutions).getCost(); // logger.info("result="+result); results[iteration - 1] = result; } }); vra.searchSolutions(); StandardDeviation dev = new StandardDeviation(); double standardDeviation = dev.evaluate(results); double initialThreshold = standardDeviation / 2; schrimpfAcceptance.setInitialThreshold(initialThreshold); logger.info("took " + ((System.currentTimeMillis() - now) / 1000.0) + " seconds"); logger.debug("initial threshold: " + initialThreshold); logger.info("---------------------------------------------------------------------"); }
public static void main(String[] args) { VehicleRoutingProblem.Builder vrpBuilder = VehicleRoutingProblem.Builder.newInstance(); new SolomonReader(vrpBuilder).read("input/C101_solomon.txt"); VehicleRoutingProblem vrp = vrpBuilder.build(); // y >= 50 skill1 otherwise skill2 // two vehicles: v1 - skill1 #5; v2 - skill2 #6 Vehicle solomonVehicle = vrp.getVehicles().iterator().next(); VehicleType newType = solomonVehicle.getType(); VehicleRoutingProblem.Builder skillProblemBuilder = VehicleRoutingProblem.Builder.newInstance(); for (int i = 0; i < 5; i++) { VehicleImpl skill1Vehicle = VehicleImpl.Builder.newInstance("skill1_vehicle_" + i) .addSkill("skill1") .setStartLocation( Location.Builder.newInstance() .setId(solomonVehicle.getStartLocation().getId()) .setCoordinate(solomonVehicle.getStartLocation().getCoordinate()) .build()) .setEarliestStart(solomonVehicle.getEarliestDeparture()) .setType(newType) .build(); VehicleImpl skill2Vehicle = VehicleImpl.Builder.newInstance("skill2_vehicle_" + i) .addSkill("skill2") .setStartLocation( Location.Builder.newInstance() .setId(solomonVehicle.getStartLocation().getId()) .setCoordinate(solomonVehicle.getStartLocation().getCoordinate()) .build()) .setEarliestStart(solomonVehicle.getEarliestDeparture()) .setType(newType) .build(); skillProblemBuilder.addVehicle(skill1Vehicle).addVehicle(skill2Vehicle); } for (Job job : vrp.getJobs().values()) { Service service = (Service) job; Service.Builder skillServiceBuilder; if (service.getLocation().getCoordinate().getY() < 50.) { skillServiceBuilder = Service.Builder.newInstance(service.getId() + "_skill2") .setServiceTime(service.getServiceDuration()) .setLocation( Location.Builder.newInstance() .setId(service.getLocation().getId()) .setCoordinate(service.getLocation().getCoordinate()) .build()) .setTimeWindow(service.getTimeWindow()) .addSizeDimension(0, service.getSize().get(0)); skillServiceBuilder.addRequiredSkill("skill2"); } else { skillServiceBuilder = Service.Builder.newInstance(service.getId() + "_skill1") .setServiceTime(service.getServiceDuration()) .setLocation( Location.Builder.newInstance() .setId(service.getLocation().getId()) .setCoordinate(service.getLocation().getCoordinate()) .build()) .setTimeWindow(service.getTimeWindow()) .addSizeDimension(0, service.getSize().get(0)); skillServiceBuilder.addRequiredSkill("skill1"); } skillProblemBuilder.addJob(skillServiceBuilder.build()); } skillProblemBuilder.setFleetSize(VehicleRoutingProblem.FleetSize.FINITE); VehicleRoutingProblem skillProblem = skillProblemBuilder.build(); VehicleRoutingAlgorithmBuilder vraBuilder = new VehicleRoutingAlgorithmBuilder(skillProblem, "input/algorithmConfig_solomon.xml"); vraBuilder.addCoreConstraints(); vraBuilder.addDefaultCostCalculators(); StateManager stateManager = new StateManager(skillProblem); stateManager.updateSkillStates(); ConstraintManager constraintManager = new ConstraintManager(skillProblem, stateManager); constraintManager.addSkillsConstraint(); VehicleRoutingAlgorithm vra = Jsprit.Builder.newInstance(skillProblem) .setStateAndConstraintManager(stateManager, constraintManager) .buildAlgorithm(); Collection<VehicleRoutingProblemSolution> solutions = vra.searchSolutions(); VehicleRoutingProblemSolution solution = Solutions.bestOf(solutions); SolutionPrinter.print(skillProblem, solution, SolutionPrinter.Print.VERBOSE); new Plotter(skillProblem, solution).plot("output/skill_solution", "solomon_with_skills"); new VrpXMLWriter(skillProblem, solutions).write("output/solomon_with_skills"); }
public static void main(String[] args) throws IOException { Config config = new Config(); config.addCoreModules(); Scenario scenario = ScenarioUtils.createScenario(config); new MatsimNetworkReader(scenario).readFile("sensitivity/network.xml"); BufferedWriter writer = new BufferedWriter( new FileWriter(new File("sensitivity/output/lcpas-with-two-types-and-two-tolls.txt"))); writer.write("lcpa\trun\tcomptime\trelations\n"); List<LCPAFactory> factories = new ArrayList<LCPAFactory>(); factories.add(new LCPAFactory("dijstra", LCPAFactories.getFastDijkstraFactory())); factories.add(new LCPAFactory("astar-eucl", LCPAFactories.getFastAStarEuclideanFactory())); factories.add(new LCPAFactory("astar-landm", LCPAFactories.getFastAStarLandmarksFactory())); for (LCPAFactory f : factories) { for (int run = 0; run < 10; run++) { StopRouting stopRouting = new StopRouting(); VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance(); new VrpXMLReader(builder).read("sensitivity/vrp_tight_tw_with_two_types.xml"); NetworkBasedTransportCosts.Builder costBuilder = NetworkBasedTransportCosts.Builder.newInstance(scenario.getNetwork()); addVehicleTypeSpecificCosts(costBuilder, builder.getAddedVehicles()); costBuilder.setThreadSafeLeastCostPathCalculatorFactory(f.factory); // create roadPricing Calc VehicleTypeDependentRoadPricingCalculator roadPricing = new VehicleTypeDependentRoadPricingCalculator(); // define and add a roadPricingSchema RoadPricingSchemeImpl cordonToll = new RoadPricingSchemeImpl(); new RoadPricingReaderXMLv1(cordonToll).parse("sensitivity/cordonToll20.xml"); roadPricing.addPricingScheme("type1", cordonToll); RoadPricingSchemeImpl distanceToll = new RoadPricingSchemeImpl(); new RoadPricingReaderXMLv1(distanceToll).parse("sensitivity/distanceToll1.xml"); roadPricing.addPricingScheme("type2", distanceToll); // finally add roadpricingcalc to netBasedTransportCosts costBuilder.setRoadPricingCalculator(roadPricing); NetworkBasedTransportCosts routingCosts = costBuilder.build(); routingCosts.getInternalListeners().add(stopRouting); builder.setRoutingCost(routingCosts); VehicleRoutingProblem vrp = builder.build(); VehicleRoutingAlgorithm vra = VehicleRoutingAlgorithms.readAndCreateAlgorithm(vrp, "sensitivity/algorithm.xml"); StopAlgoCompTime compTimeStopper = new StopAlgoCompTime(); vra.getAlgorithmListeners().addListener(compTimeStopper, Priority.HIGH); Collection<VehicleRoutingProblemSolution> solutions = vra.searchSolutions(); SolutionPrinter.print(Solutions.bestOf(solutions)); printLowerBoundOfNuVehicles(vrp, 40); long time = 0; for (StopWatch w : stopRouting.getRouterStopWatches().values()) { time += w.getTime(); } writer.write( f.name + "\t" + run + "\t" + time + "\t" + routingCosts.ttMemorizedCounter.getCounter() + "\n"); System.out.println("routingTime: " + time); System.out.println("compTime: " + compTimeStopper.stopWatch.toString()); } } writer.close(); }