From 9d1bbc2e8495925ac0ed695930638a0650bce8fd Mon Sep 17 00:00:00 2001
From: oblonski <4sschroeder@gmail.com>
Date: Wed, 15 Jan 2014 09:00:55 -0500
Subject: [PATCH] add example for VRP with heterogeneous fleet as well as an
example of how to benchmark it
---
.../algorithmConfig_considerFixedCosts.xml | 75 ++++++++++++
jsprit-examples/input/cn_14mix.txt | 67 ++++++++++
.../jsprit/examples/HVRPBenchmarkExample.java | 59 +++++++++
.../{VRPHEExample.java => HVRPExample.java} | 2 +-
.../main/java/jsprit/examples/VFMExample.java | 114 ------------------
5 files changed, 202 insertions(+), 115 deletions(-)
create mode 100755 jsprit-examples/input/algorithmConfig_considerFixedCosts.xml
create mode 100644 jsprit-examples/input/cn_14mix.txt
create mode 100644 jsprit-examples/src/main/java/jsprit/examples/HVRPBenchmarkExample.java
rename jsprit-examples/src/main/java/jsprit/examples/{VRPHEExample.java => HVRPExample.java} (99%)
delete mode 100644 jsprit-examples/src/main/java/jsprit/examples/VFMExample.java
diff --git a/jsprit-examples/input/algorithmConfig_considerFixedCosts.xml b/jsprit-examples/input/algorithmConfig_considerFixedCosts.xml
new file mode 100755
index 00000000..a6684739
--- /dev/null
+++ b/jsprit-examples/input/algorithmConfig_considerFixedCosts.xml
@@ -0,0 +1,75 @@
+
+
+
+
+ 2000
+
+
+
+ true
+
+
+
+
+ 1
+
+
+
+
+ 0.05
+ 20
+
+
+
+
+
+ 0.5
+
+
+
+
+
+ 0.5
+
+
+
+
+
+
+
+
+
+ 0.3
+
+
+
+
+
+ 0.5
+
+
+
+
+
+
+
diff --git a/jsprit-examples/input/cn_14mix.txt b/jsprit-examples/input/cn_14mix.txt
new file mode 100644
index 00000000..a0689d17
--- /dev/null
+++ b/jsprit-examples/input/cn_14mix.txt
@@ -0,0 +1,67 @@
+50
+ 0 40 40 0
+ 1 22 22 18
+ 2 36 26 26
+ 3 21 45 11
+ 4 45 35 30
+ 5 55 20 21
+ 6 33 34 19
+ 7 50 50 15
+ 8 55 45 16
+ 9 26 59 29
+ 10 40 66 26
+ 11 55 65 37
+ 12 35 51 16
+ 13 62 35 12
+ 14 62 57 31
+ 15 62 24 8
+ 16 21 36 19
+ 17 33 44 20
+ 18 9 56 13
+ 19 62 48 15
+ 20 66 14 22
+ 21 44 13 28
+ 22 26 13 12
+ 23 11 28 6
+ 24 7 43 27
+ 25 17 64 14
+ 26 41 46 18
+ 27 55 34 17
+ 28 35 16 29
+ 29 52 26 13
+ 30 43 26 22
+ 31 31 76 25
+ 32 22 53 28
+ 33 26 29 27
+ 34 50 40 19
+ 35 55 50 10
+ 36 54 10 12
+ 37 60 15 14
+ 38 47 66 24
+ 39 30 60 16
+ 40 30 50 33
+ 41 12 17 15
+ 42 15 14 11
+ 43 16 19 18
+ 44 21 48 17
+ 45 50 30 21
+ 46 51 42 27
+ 47 50 15 19
+ 48 48 21 20
+ 49 12 38 5
+ 50 15 56 22
+//Vehicles characteristics: volume, fixed cost, variable cost, number available
+v 1 120 1000 1.0 4
+v 2 160 1500 1.1 2
+v 3 300 3500 1.4 1
+
+160
+8 300 0 10000 625.679906 + 7*1000 + 1500 =
+ 7 26 7 35 19 8 46 34 10530637
+ 4 10 38 11 14 10794953
+ 8 33 1 43 42 41 23 49 16 10916479
+ 6 48 47 36 21 28 22 10931709
+ 7 27 13 15 20 37 5 29 10832981
+ 6 44 32 50 18 24 3 10862722
+ 5 6 2 30 45 4 10469680
+ 7 12 39 31 25 9 40 17 15917639
diff --git a/jsprit-examples/src/main/java/jsprit/examples/HVRPBenchmarkExample.java b/jsprit-examples/src/main/java/jsprit/examples/HVRPBenchmarkExample.java
new file mode 100644
index 00000000..8dcfa816
--- /dev/null
+++ b/jsprit-examples/src/main/java/jsprit/examples/HVRPBenchmarkExample.java
@@ -0,0 +1,59 @@
+package jsprit.examples;
+
+import java.util.Collection;
+
+import jsprit.analysis.toolbox.AlgorithmSearchProgressChartListener;
+import jsprit.analysis.toolbox.GraphStreamViewer;
+import jsprit.analysis.toolbox.Plotter;
+import jsprit.analysis.toolbox.SolutionPrinter;
+import jsprit.analysis.toolbox.SolutionPrinter.Print;
+import jsprit.core.algorithm.VehicleRoutingAlgorithm;
+import jsprit.core.algorithm.io.VehicleRoutingAlgorithms;
+import jsprit.core.problem.VehicleRoutingProblem;
+import jsprit.core.problem.solution.VehicleRoutingProblemSolution;
+import jsprit.core.problem.solution.route.VehicleRoute;
+import jsprit.core.util.Solutions;
+import jsprit.instance.reader.VrphGoldenReader;
+import jsprit.instance.reader.VrphGoldenReader.VrphType;
+
+/**
+ * Shows how to benchmark the algorithm on different classical HVRP and FSM instances.
+ *
+ *
These instances are from Golden and Taillard and copied from http://mistic.heig-vd.ch/taillard/problemes.dir/vrp.dir/vrp.html.
+ *
+ *
You can find best results of different problems, instances and authors here:
+ *
http://www2.ic.uff.br/~satoru/conteudo/artigos/PAPER%20PUCA-JHeuristics-2011.pdf
+ *
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.100.2331&rep=rep1&type=pdf
+ *
+ * @author schroeder
+ *
+ */
+public class HVRPBenchmarkExample {
+
+ public static void main(String[] args) {
+ VehicleRoutingProblem.Builder vrpBuilder = VehicleRoutingProblem.Builder.newInstance();
+ //read modified Golden-instance, you can find all relevant instances in jsprit-instances/instances/vrph
+ //you can build various problems, see VrphType doc for more details
+ new VrphGoldenReader(vrpBuilder, VrphType.HVRPFD).read("input/cn_14mix.txt");
+ vrpBuilder.addPenaltyVehicles(10.0);
+ VehicleRoutingProblem vrp = vrpBuilder.build();
+
+ VehicleRoutingAlgorithm vra = VehicleRoutingAlgorithms.readAndCreateAlgorithm(vrp, "input/algorithmConfig_considerFixedCosts.xml");
+ vra.setNuOfIterations(10000);
+// vra.setPrematureAlgorithmTermination(new IterationWithoutImprovementTermination(500));
+ vra.addListener(new AlgorithmSearchProgressChartListener("output/progress.png"));
+ Collection solutions = vra.searchSolutions();
+
+ VehicleRoutingProblemSolution best = Solutions.bestOf(solutions);
+
+ SolutionPrinter.print(vrp, best, Print.VERBOSE);
+
+
+ Plotter plotter = new Plotter(vrp,best);
+ plotter.plot("output/cn14.png", "cn14");
+
+ new GraphStreamViewer(vrp, best).setRenderDelay(100).display();
+ }
+
+
+}
diff --git a/jsprit-examples/src/main/java/jsprit/examples/VRPHEExample.java b/jsprit-examples/src/main/java/jsprit/examples/HVRPExample.java
similarity index 99%
rename from jsprit-examples/src/main/java/jsprit/examples/VRPHEExample.java
rename to jsprit-examples/src/main/java/jsprit/examples/HVRPExample.java
index 929309f3..3702d2be 100644
--- a/jsprit-examples/src/main/java/jsprit/examples/VRPHEExample.java
+++ b/jsprit-examples/src/main/java/jsprit/examples/HVRPExample.java
@@ -48,7 +48,7 @@ import jsprit.core.util.Solutions;
* @author schroeder
*
*/
-public class VRPHEExample {
+public class HVRPExample {
public static void main(String[] args) {
diff --git a/jsprit-examples/src/main/java/jsprit/examples/VFMExample.java b/jsprit-examples/src/main/java/jsprit/examples/VFMExample.java
deleted file mode 100644
index f304fd03..00000000
--- a/jsprit-examples/src/main/java/jsprit/examples/VFMExample.java
+++ /dev/null
@@ -1,114 +0,0 @@
-package jsprit.examples;
-
-import java.util.Collection;
-
-import jsprit.analysis.toolbox.GraphStreamViewer;
-import jsprit.analysis.toolbox.SolutionPrinter;
-import jsprit.analysis.toolbox.SolutionPrinter.Print;
-import jsprit.core.algorithm.VehicleRoutingAlgorithm;
-import jsprit.core.algorithm.io.VehicleRoutingAlgorithms;
-import jsprit.core.problem.VehicleRoutingProblem;
-import jsprit.core.problem.VehicleRoutingProblem.FleetSize;
-import jsprit.core.problem.job.Service;
-import jsprit.core.problem.solution.VehicleRoutingProblemSolution;
-import jsprit.core.problem.vehicle.VehicleImpl;
-import jsprit.core.problem.vehicle.VehicleType;
-import jsprit.core.problem.vehicle.VehicleTypeImpl;
-import jsprit.core.util.Coordinate;
-import jsprit.core.util.Solutions;
-
-/**
- * customers (id,x,y,demand)
- * 1 22 22 18
- * 2 36 26 26
- * 3 21 45 11
- * 4 45 35 30
- * 5 55 20 21
- * 6 33 34 19
- * 7 50 50 15
- * 8 55 45 16
- * 9 26 59 29
- * 10 40 66 26
- * 11 55 65 37
- * 12 35 51 16
- * 13 62 35 12
- * 14 62 57 31
- * 15 62 24 8
- * 16 21 36 19
- * 17 33 44 20
- * 18 9 56 13
- * 19 62 48 15
- * 20 66 14 22
- *
- * vehicles (id,cap,fixed costs, perDistance, #vehicles) at location (40,40)
- * 1 120 1000 1.0 2
- * 2 160 1500 1.1 1
- * 3 300 3500 1.4 1
- *
- * @author schroeder
- *
- */
-public class VFMExample {
-
-
- public static void main(String[] args) {
-
- VehicleRoutingProblem.Builder vrpBuilder = VehicleRoutingProblem.Builder.newInstance();
-
- //add customers
- vrpBuilder.addJob(Service.Builder.newInstance("1", 18).setCoord(Coordinate.newInstance(22, 22)).build());
- vrpBuilder.addJob(Service.Builder.newInstance("2", 26).setCoord(Coordinate.newInstance(36, 26)).build());
- vrpBuilder.addJob(Service.Builder.newInstance("3", 11).setCoord(Coordinate.newInstance(21, 45)).build());
- vrpBuilder.addJob(Service.Builder.newInstance("4", 30).setCoord(Coordinate.newInstance(45, 35)).build());
- vrpBuilder.addJob(Service.Builder.newInstance("5", 21).setCoord(Coordinate.newInstance(55, 20)).build());
- vrpBuilder.addJob(Service.Builder.newInstance("6", 19).setCoord(Coordinate.newInstance(33, 34)).build());
- vrpBuilder.addJob(Service.Builder.newInstance("7", 15).setCoord(Coordinate.newInstance(50, 50)).build());
- vrpBuilder.addJob(Service.Builder.newInstance("8", 16).setCoord(Coordinate.newInstance(55, 45)).build());
- vrpBuilder.addJob(Service.Builder.newInstance("9", 29).setCoord(Coordinate.newInstance(26, 59)).build());
- vrpBuilder.addJob(Service.Builder.newInstance("10", 26).setCoord(Coordinate.newInstance(40, 66)).build());
- vrpBuilder.addJob(Service.Builder.newInstance("11", 37).setCoord(Coordinate.newInstance(55, 56)).build());
- vrpBuilder.addJob(Service.Builder.newInstance("12", 16).setCoord(Coordinate.newInstance(35, 51)).build());
- vrpBuilder.addJob(Service.Builder.newInstance("13", 12).setCoord(Coordinate.newInstance(62, 35)).build());
- vrpBuilder.addJob(Service.Builder.newInstance("14", 31).setCoord(Coordinate.newInstance(62, 57)).build());
- vrpBuilder.addJob(Service.Builder.newInstance("15", 8).setCoord(Coordinate.newInstance(62, 24)).build());
- vrpBuilder.addJob(Service.Builder.newInstance("16", 19).setCoord(Coordinate.newInstance(21, 36)).build());
- vrpBuilder.addJob(Service.Builder.newInstance("17", 20).setCoord(Coordinate.newInstance(33, 44)).build());
- vrpBuilder.addJob(Service.Builder.newInstance("18", 13).setCoord(Coordinate.newInstance(9, 56)).build());
- vrpBuilder.addJob(Service.Builder.newInstance("19", 15).setCoord(Coordinate.newInstance(62, 48)).build());
- vrpBuilder.addJob(Service.Builder.newInstance("20", 22).setCoord(Coordinate.newInstance(66, 14)).build());
-
-
- //add vehicle - finite fleet
- //fixed costs only (and equal variable costs)
- //vehicle type1
- VehicleType type1 = VehicleTypeImpl.Builder.newInstance("type_1", 120).setCostPerDistance(1.0).setFixedCost(1000).build();
- VehicleImpl vehicle1 = VehicleImpl.Builder.newInstance("1_1").setLocationCoord(Coordinate.newInstance(40, 40)).setType(type1).build();
- vrpBuilder.addVehicle(vehicle1);
- //vehicle type2
- VehicleType type2 = VehicleTypeImpl.Builder.newInstance("type_2", 160).setCostPerDistance(1.0).setFixedCost(1500).build();
- VehicleImpl vehicle2 = VehicleImpl.Builder.newInstance("2_1").setLocationCoord(Coordinate.newInstance(40, 40)).setType(type2).build();
- vrpBuilder.addVehicle(vehicle2);
- //vehicle type3
- VehicleType type3 = VehicleTypeImpl.Builder.newInstance("type_3", 300).setCostPerDistance(1.0).setFixedCost(3500).build();
- VehicleImpl vehicle3 = VehicleImpl.Builder.newInstance("3_1").setLocationCoord(Coordinate.newInstance(40, 40)).setType(type3).build();
- vrpBuilder.addVehicle(vehicle3);
-
- //set fleetsize finite - which actually the default value, thus it does not need to be set
- vrpBuilder.setFleetSize(FleetSize.INFINITE);
-
- //build problem
- VehicleRoutingProblem vrp = vrpBuilder.build();
-
- VehicleRoutingAlgorithm vra = VehicleRoutingAlgorithms.readAndCreateAlgorithm(vrp, "input/algorithmConfigWithSchrimpfAcceptance.xml");
- Collection solutions = vra.searchSolutions();
-
- VehicleRoutingProblemSolution best = Solutions.bestOf(solutions);
-
- SolutionPrinter.print(vrp, best, Print.VERBOSE);
-
- new GraphStreamViewer(vrp, best).setRenderDelay(100).display();
-
- }
-
-}
-