From 8dd1e72b8ce39e167f43b5561d7729a06dd474d9 Mon Sep 17 00:00:00 2001 From: Stefan Schroeder <4sschroeder@gmail.com> Date: Mon, 10 Jun 2013 07:57:28 +0200 Subject: [PATCH] add SimpleExample described in jsprit-wiki/Example --- jsprit-examples/.gitignore | 2 +- .../examples/BuildYourOwnProblemExample.java | 32 -------- .../src/main/java/examples/SimpleExample.java | 80 +++++++++++++++++++ 3 files changed, 81 insertions(+), 33 deletions(-) delete mode 100644 jsprit-examples/src/main/java/examples/BuildYourOwnProblemExample.java create mode 100644 jsprit-examples/src/main/java/examples/SimpleExample.java diff --git a/jsprit-examples/.gitignore b/jsprit-examples/.gitignore index d82d78f6..247584bb 100644 --- a/jsprit-examples/.gitignore +++ b/jsprit-examples/.gitignore @@ -1,4 +1,4 @@ -/output +/output/* /bin /target .DS_Store diff --git a/jsprit-examples/src/main/java/examples/BuildYourOwnProblemExample.java b/jsprit-examples/src/main/java/examples/BuildYourOwnProblemExample.java deleted file mode 100644 index 4b79cef2..00000000 --- a/jsprit-examples/src/main/java/examples/BuildYourOwnProblemExample.java +++ /dev/null @@ -1,32 +0,0 @@ -/******************************************************************************* - * Copyright (C) 2013 Stefan Schroeder - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * Contributors: - * Stefan Schroeder - initial API and implementation - ******************************************************************************/ -package examples; - -import basics.Service; - -public class BuildYourOwnProblemExample { - - public static void main(String[] args) { - - - } - -} diff --git a/jsprit-examples/src/main/java/examples/SimpleExample.java b/jsprit-examples/src/main/java/examples/SimpleExample.java new file mode 100644 index 00000000..a378987c --- /dev/null +++ b/jsprit-examples/src/main/java/examples/SimpleExample.java @@ -0,0 +1,80 @@ +package examples; + +import java.util.Collection; + +import util.Coordinate; +import util.Solutions; +import algorithms.SchrimpfFactory; +import analysis.SolutionPlotter; +import analysis.SolutionPrinter; +import analysis.SolutionPrinter.Print; +import basics.Service; +import basics.VehicleRoutingAlgorithm; +import basics.VehicleRoutingProblem; +import basics.VehicleRoutingProblemSolution; +import basics.io.VrpXMLWriter; +import basics.route.Vehicle; +import basics.route.VehicleImpl; +import basics.route.VehicleImpl.VehicleBuilder; +import basics.route.VehicleImpl.VehicleType; + +public class SimpleExample { + + public static void main(String[] args) { + + /* + * get a vehicle type-builder and build a type with the typeId "vehicleType" and a capacity of 2 + */ + VehicleType.Builder vehicleTypeBuilder = VehicleImpl.VehicleType.Builder.newInstance("vehicleType", 2); + VehicleType vehicleType = vehicleTypeBuilder.build(); + + /* + * get a vehicle-builder and build a vehicle located at (10,10) with type "vehicleType" + */ + VehicleBuilder vehicleBuilder = VehicleImpl.VehicleBuilder.newInstance("vehicle"); + vehicleBuilder.setLocationCoord(Coordinate.newInstance(10, 10)); + vehicleBuilder.setType(vehicleType); + Vehicle vehicle = vehicleBuilder.build(); + + /* + * build services at the required locations, each with a capacity-demand of 1. + */ + Service service1 = Service.Builder.newInstance("1", 1).setCoord(Coordinate.newInstance(5, 7)).build(); + Service service2 = Service.Builder.newInstance("2", 1).setCoord(Coordinate.newInstance(5, 13)).build(); + + Service service3 = Service.Builder.newInstance("3", 1).setCoord(Coordinate.newInstance(15, 7)).build(); + Service service4 = Service.Builder.newInstance("4", 1).setCoord(Coordinate.newInstance(15, 13)).build(); + + + VehicleRoutingProblem.Builder vrpBuilder = VehicleRoutingProblem.Builder.newInstance(); + vrpBuilder.addVehicle(vehicle); + vrpBuilder.addService(service1).addService(service2).addService(service3).addService(service4); + + VehicleRoutingProblem problem = vrpBuilder.build(); + + /* + * get the algorithm out-of-the-box. + */ + VehicleRoutingAlgorithm algorithm = new SchrimpfFactory().createAlgorithm(problem); + + /* + * and search a solution + */ + Collection solutions = algorithm.searchSolutions(); + + /* + * get the best + */ + VehicleRoutingProblemSolution bestSolution = Solutions.getBest(solutions); + + new VrpXMLWriter(problem, solutions).write("output/problem-with-solution.xml"); + + SolutionPrinter.print(bestSolution,Print.VERBOSE); + + /* + * plot + */ + SolutionPlotter.plotSolutionAsPNG(problem, bestSolution, "output/solution.png", "solution"); + } + +}