From be00d30fde703205007d7078fe7402f5dd2957d4 Mon Sep 17 00:00:00 2001 From: Stefan Schroeder <4sschroeder@gmail.com> Date: Wed, 11 Dec 2013 12:14:44 +0100 Subject: [PATCH] add shipment view --- .../analysis/toolbox/GraphStreamViewer.java | 57 +++++++++++++++++-- .../jsprit/examples/BicycleMessenger.java | 28 ++++----- ...SimpleEnRoutePickupAndDeliveryExample.java | 3 + 3 files changed, 70 insertions(+), 18 deletions(-) diff --git a/jsprit-analysis/src/main/java/jsprit/analysis/toolbox/GraphStreamViewer.java b/jsprit-analysis/src/main/java/jsprit/analysis/toolbox/GraphStreamViewer.java index 50fb2b71..b239a8d7 100644 --- a/jsprit-analysis/src/main/java/jsprit/analysis/toolbox/GraphStreamViewer.java +++ b/jsprit-analysis/src/main/java/jsprit/analysis/toolbox/GraphStreamViewer.java @@ -10,9 +10,10 @@ import jsprit.core.problem.solution.route.activity.TourActivity; import jsprit.core.problem.solution.route.activity.TourActivity.JobActivity; import jsprit.core.problem.vehicle.Vehicle; +import org.graphstream.graph.Edge; import org.graphstream.graph.Graph; import org.graphstream.graph.Node; -import org.graphstream.graph.implementations.DefaultGraph; +import org.graphstream.graph.implementations.MultiGraph; import org.graphstream.ui.swingViewer.Viewer; public class GraphStreamViewer { @@ -41,7 +42,7 @@ public class GraphStreamViewer { " arrow-size: 6px,3px;" + "}" + "edge.shipment {" + - " fill-color: blue;" + + " fill-color: grey;" + " arrow-size: 6px,3px;" + "}" ; @@ -51,7 +52,15 @@ public class GraphStreamViewer { private Label label = Label.NO_LABEL; private boolean renderShipments = false; private boolean enableAutoDisplay = false; + private BoundingBox boundingBox; + /** + * @param boundingBox the boundingBox to set + */ + public void setBoundingBox(BoundingBox boundingBox) { + this.boundingBox = boundingBox; + } + private VehicleRoutingProblem vrp; private VehicleRoutingProblemSolution solution; @@ -86,7 +95,7 @@ public class GraphStreamViewer { private static void display(View view){ System.setProperty("org.graphstream.ui.renderer", "org.graphstream.ui.j2dviewer.J2DGraphRenderer"); - Graph g = new DefaultGraph("g"); + Graph g = new MultiGraph("g"); g.addAttribute("ui.quality"); g.addAttribute("ui.antialias"); g.addAttribute("ui.stylesheet", styleSheet); @@ -94,6 +103,7 @@ public class GraphStreamViewer { Viewer viewer = g.display(); if(!view.enableAutoDisplay) viewer.disableAutoLayout(); + for(Vehicle vehicle : view.vrp.getVehicles()){ renderVehicle(g,vehicle,view.label); sleep(view.renderDelay); @@ -117,6 +127,19 @@ public class GraphStreamViewer { routeId++; } } + + if(view.boundingBox != null){ +//// viewer.getDefaultView().getCamera().setViewPercent(0.5); +// System.out.println("metric="+viewer.getDefaultView().getCamera().getMetrics()); +//// viewer.getDefaultView().getCamera().setViewCenter(15000, 50000, 0); +//// viewer.getDefaultView().getCamera().setViewPercent(0.5); +// viewer.getDefaultView().getCamera().setBounds(10000,40000, 0, 20000, 60000, 0); +// System.out.println("metric="+viewer.getDefaultView().getCamera().getMetrics()); +//// viewer.getDefaultView().se +// viewer.getDefaultView().display(viewer.getGraphicGraph(), true); +//// viewer.getDefaultView().getCamera().setViewPercent(0.5); +// + } } @@ -141,7 +164,9 @@ public class GraphStreamViewer { n2.setAttribute("ui.class", "delivery"); if(renderShipments){ - + Edge s = g.addEdge(shipment.getId(), makeId(shipment.getId(),shipment.getPickupLocation()), + makeId(shipment.getId(),shipment.getDeliveryLocation()), true); + s.addAttribute("ui.class", "shipment"); } } @@ -221,6 +246,22 @@ public class GraphStreamViewer { NO_LABEL, ID } + private static class BoundingBox { + final double minX; + final double minY; + final double maxX; + final double maxY; + + public BoundingBox(double minX, double minY, double maxX, double maxY) { + super(); + this.minX = minX; + this.minY = minY; + this.maxX = maxX; + this.maxY = maxY; + } + + } + private Label label = Label.NO_LABEL; private long renderDelay_in_ms = 0; @@ -228,6 +269,8 @@ public class GraphStreamViewer { private boolean enableAutoLayout = false; private boolean renderShipments = false; + + private BoundingBox boundingBox; private VehicleRoutingProblem vrp; @@ -263,6 +306,11 @@ public class GraphStreamViewer { this.renderShipments = renderShipments; return this; } + +// public GraphStreamViewer setBoundingBox(double minX, double minY, double maxX, double maxY){ +// boundingBox = new BoundingBox(minX,minY,maxX,maxY); +// return this; +// } public void display(){ View view = new View(vrp,solution); @@ -270,6 +318,7 @@ public class GraphStreamViewer { view.setLabel(label); view.setRenderDelay(renderDelay_in_ms); view.setRenderShipments(renderShipments); + view.setBoundingBox(boundingBox); display(view); } diff --git a/jsprit-examples/src/main/java/jsprit/examples/BicycleMessenger.java b/jsprit-examples/src/main/java/jsprit/examples/BicycleMessenger.java index b4f0d9df..ab07d7ea 100644 --- a/jsprit-examples/src/main/java/jsprit/examples/BicycleMessenger.java +++ b/jsprit-examples/src/main/java/jsprit/examples/BicycleMessenger.java @@ -240,32 +240,32 @@ public class BicycleMessenger { //if you want, terminate it after 1000 iterations with no change // algorithm.setPrematureAlgorithmTermination(new IterationWithoutImprovementTermination(1000)); algorithm.addListener(new AlgorithmSearchProgressChartListener("output/progress.png")); - algorithm.setNuOfIterations(2000); + algorithm.setNuOfIterations(200); Collection solutions = algorithm.searchSolutions(); //this is just to ensure that solution meet the above constraints validateSolution(Solutions.bestOf(solutions), bicycleMessengerProblem, nearestMessengers); - //you may want to plot the problem - Plotter plotter = new Plotter(bicycleMessengerProblem); -// plotter.setBoundingBox(10000, 47500, 20000, 67500); - plotter.plotShipments(true); - plotter.plot("output/bicycleMessengerProblem.png", "bicycleMessenger"); - - //and the problem as well as the solution - Plotter plotter1 = new Plotter(bicycleMessengerProblem, Solutions.bestOf(solutions)); - plotter1.plotShipments(true); - plotter1.setShowFirstActivity(true); -// plotter1.setBoundingBox(5000, 45500, 25000, 66500); - plotter1.plot("output/bicycleMessengerSolution.png", "bicycleMessenger"); +// //you may want to plot the problem +// Plotter plotter = new Plotter(bicycleMessengerProblem); +//// plotter.setBoundingBox(10000, 47500, 20000, 67500); +// plotter.plotShipments(true); +// plotter.plot("output/bicycleMessengerProblem.png", "bicycleMessenger"); +// +// //and the problem as well as the solution +// Plotter plotter1 = new Plotter(bicycleMessengerProblem, Solutions.bestOf(solutions)); +// plotter1.plotShipments(true); +// plotter1.setShowFirstActivity(true); +//// plotter1.setBoundingBox(5000, 45500, 25000, 66500); +// plotter1.plot("output/bicycleMessengerSolution.png", "bicycleMessenger"); //and write out your solution in xml new VrpXMLWriter(bicycleMessengerProblem, solutions).write("output/bicycleMessenger.xml"); SolutionPrinter.print(bicycleMessengerProblem, Solutions.bestOf(solutions), Print.VERBOSE); - GraphStreamViewer.display(bicycleMessengerProblem, Solutions.bestOf(solutions), 100); + new GraphStreamViewer(bicycleMessengerProblem, Solutions.bestOf(solutions)).setRenderDelay(50).setRenderShipments(true).display(); } diff --git a/jsprit-examples/src/main/java/jsprit/examples/SimpleEnRoutePickupAndDeliveryExample.java b/jsprit-examples/src/main/java/jsprit/examples/SimpleEnRoutePickupAndDeliveryExample.java index ac871415..80655904 100644 --- a/jsprit-examples/src/main/java/jsprit/examples/SimpleEnRoutePickupAndDeliveryExample.java +++ b/jsprit-examples/src/main/java/jsprit/examples/SimpleEnRoutePickupAndDeliveryExample.java @@ -20,6 +20,7 @@ import java.io.File; import java.util.Arrays; import java.util.Collection; +import jsprit.analysis.toolbox.GraphStreamViewer; import jsprit.analysis.toolbox.Plotter; import jsprit.analysis.toolbox.SolutionPrinter; import jsprit.core.algorithm.VehicleRoutingAlgorithm; @@ -126,6 +127,8 @@ public class SimpleEnRoutePickupAndDeliveryExample { solutionPlotter.plotShipments(true); solutionPlotter.plot("output/simpleEnRoutePickupAndDeliveryExample_solution.png", "en-route pickup and delivery"); + new GraphStreamViewer(problem).setRenderShipments(true).display(); + } }