From c47204278143d1aed40b394ff93665aad6050da0 Mon Sep 17 00:00:00 2001 From: oblonski <4sschroeder@gmail.com> Date: Wed, 10 Dec 2014 11:33:08 +0100 Subject: [PATCH] illustrate RegretInsertion --- .../algorithmConfig_greedyWithRegret.xml | 66 +++++++++++ .../SolomonWithRegretInsertionExample.java | 111 ++++++++++++++++++ 2 files changed, 177 insertions(+) create mode 100755 jsprit-examples/input/algorithmConfig_greedyWithRegret.xml create mode 100644 jsprit-examples/src/main/java/jsprit/examples/SolomonWithRegretInsertionExample.java diff --git a/jsprit-examples/input/algorithmConfig_greedyWithRegret.xml b/jsprit-examples/input/algorithmConfig_greedyWithRegret.xml new file mode 100755 index 00000000..42abefcc --- /dev/null +++ b/jsprit-examples/input/algorithmConfig_greedyWithRegret.xml @@ -0,0 +1,66 @@ + + + + + + + 2000 + + + + + + + + + 1 + + + + + + + + + 0.5 + + + + + 0.5 + + + + + + + + + 0.3 + + + + + 0.5 + + + + + + diff --git a/jsprit-examples/src/main/java/jsprit/examples/SolomonWithRegretInsertionExample.java b/jsprit-examples/src/main/java/jsprit/examples/SolomonWithRegretInsertionExample.java new file mode 100644 index 00000000..11890a68 --- /dev/null +++ b/jsprit-examples/src/main/java/jsprit/examples/SolomonWithRegretInsertionExample.java @@ -0,0 +1,111 @@ +/******************************************************************************* + * 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 . + ******************************************************************************/ +package jsprit.examples; + +import jsprit.analysis.toolbox.AlgorithmEventsRecorder; +import jsprit.analysis.toolbox.AlgorithmEventsViewer; +import jsprit.analysis.toolbox.GraphStreamViewer; +import jsprit.analysis.toolbox.GraphStreamViewer.Label; +import jsprit.analysis.toolbox.Plotter; +import jsprit.core.algorithm.VehicleRoutingAlgorithm; +import jsprit.core.algorithm.io.VehicleRoutingAlgorithms; +import jsprit.core.algorithm.selector.SelectBest; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.solution.VehicleRoutingProblemSolution; +import jsprit.core.reporting.SolutionPrinter; +import jsprit.instance.reader.SolomonReader; +import jsprit.util.Examples; + +import java.io.File; +import java.util.Collection; + + +public class SolomonWithRegretInsertionExample { + + public static void main(String[] args) { + /* + * some preparation - create output folder + */ + Examples.createOutputFolder(); + + /* + * Build the problem. + * + * But define a problem-builder first. + */ + VehicleRoutingProblem.Builder vrpBuilder = VehicleRoutingProblem.Builder.newInstance(); + + /* + * A solomonReader reads solomon-instance files, and stores the required information in the builder. + */ + new SolomonReader(vrpBuilder).read("input/C101_solomon.txt"); + + + /* + * Finally, the problem can be built. By default, transportCosts are crowFlyDistances (as usually used for vrp-instances). + */ + VehicleRoutingProblem vrp = vrpBuilder.build(); + + new Plotter(vrp).plot("output/solomon_C101.png", "C101"); + + /* + * Define the required vehicle-routing algorithms to solve the above problem. + * + * The algorithm can be defined and configured in an xml-file. + */ + VehicleRoutingAlgorithm vra = VehicleRoutingAlgorithms.readAndCreateAlgorithm(vrp, 2, "input/algorithmConfig_greedyWithRegret.xml"); + vra.setMaxIterations(50); + + AlgorithmEventsRecorder eventsRecorder = new AlgorithmEventsRecorder(vrp,new File("output/events.dgs.gz")); + eventsRecorder.setRecordingRange(0,50); + vra.addListener(eventsRecorder); + + /* + * Solve the problem. + * + * + */ + Collection solutions = vra.searchSolutions(); + + /* + * Retrieve best solution. + */ + VehicleRoutingProblemSolution solution = new SelectBest().selectSolution(solutions); + + + /* + * print solution + */ + SolutionPrinter.print(vrp, solution, SolutionPrinter.Print.VERBOSE); + + /* + * Plot solution. + */ + Plotter plotter = new Plotter(vrp,solution); +// plotter.setBoundingBox(30, 0, 50, 20); + plotter.plot("output/solomon_C101_solution.png", "C101"); + + new GraphStreamViewer(vrp,solution).labelWith(Label.ID).setRenderDelay(100).display(); + + AlgorithmEventsViewer viewer = new AlgorithmEventsViewer(); + viewer.setRuinDelay(16); + viewer.setRecreationDelay(8); + viewer.display("output/events.dgs.gz"); + + } + +}