1
0
Fork 0
mirror of https://github.com/graphhopper/jsprit.git synced 2020-01-24 07:45:05 +01:00

Merge branch 'master' into open-routes-with-constraints

This commit is contained in:
Stefan Schroeder 2013-11-29 17:08:22 +01:00
commit b1c2777030
2 changed files with 44 additions and 7 deletions

View file

@ -50,6 +50,7 @@ import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYItemRenderer; import org.jfree.chart.renderer.xy.XYItemRenderer;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer; import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.chart.title.LegendTitle; import org.jfree.chart.title.LegendTitle;
import org.jfree.data.Range;
import org.jfree.data.xy.XYDataItem; import org.jfree.data.xy.XYDataItem;
import org.jfree.data.xy.XYDataset; import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeries; import org.jfree.data.xy.XYSeries;
@ -59,6 +60,21 @@ import org.jfree.ui.RectangleEdge;
public class Plotter { public class Plotter {
private static class BoundingBox {
double minX;
double minY;
double maxX;
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 static class NoLocationFoundException extends Exception{ private static class NoLocationFoundException extends Exception{
/** /**
@ -87,6 +103,8 @@ public class Plotter {
private Collection<VehicleRoute> routes; private Collection<VehicleRoute> routes;
private BoundingBox boundingBox = null;
public void setShowFirstActivity(boolean show){ public void setShowFirstActivity(boolean show){
showFirstActivity = show; showFirstActivity = show;
} }
@ -95,6 +113,10 @@ public class Plotter {
this.label = label; this.label = label;
} }
public void setBoundingBox(double minX, double minY, double maxX, double maxY){
boundingBox = new BoundingBox(minX,minY,maxX,maxY);
}
public Plotter(VehicleRoutingProblem vrp) { public Plotter(VehicleRoutingProblem vrp) {
super(); super();
this.vrp = vrp; this.vrp = vrp;
@ -198,7 +220,7 @@ public class Plotter {
} }
private static XYPlot createProblemPlot(final XYSeriesCollection problem, XYSeriesCollection shipments, final Map<XYDataItem, String> labels) { private XYPlot createProblemPlot(final XYSeriesCollection problem, XYSeriesCollection shipments, final Map<XYDataItem, String> labels) {
XYPlot plot = new XYPlot(); XYPlot plot = new XYPlot();
plot.setBackgroundPaint(Color.LIGHT_GRAY); plot.setBackgroundPaint(Color.LIGHT_GRAY);
plot.setRangeGridlinePaint(Color.WHITE); plot.setRangeGridlinePaint(Color.WHITE);
@ -217,10 +239,11 @@ public class Plotter {
problemRenderer.setBaseItemLabelPaint(Color.BLACK); problemRenderer.setBaseItemLabelPaint(Color.BLACK);
NumberAxis xAxis = new NumberAxis(); NumberAxis xAxis = new NumberAxis();
xAxis.setRangeWithMargins(problem.getDomainBounds(true));
xAxis.setRangeWithMargins(getDomainRange(problem));
NumberAxis yAxis = new NumberAxis(); NumberAxis yAxis = new NumberAxis();
yAxis.setRangeWithMargins(problem.getRangeBounds(false)); yAxis.setRangeWithMargins(getRange(problem));
plot.setDataset(0, problem); plot.setDataset(0, problem);
plot.setRenderer(0, problemRenderer); plot.setRenderer(0, problemRenderer);
@ -245,6 +268,16 @@ public class Plotter {
return plot; return plot;
} }
private Range getRange(final XYSeriesCollection problem) {
if(this.boundingBox==null) return problem.getRangeBounds(false);
else return new Range(boundingBox.minY, boundingBox.maxY);
}
private Range getDomainRange(final XYSeriesCollection problem) {
if(this.boundingBox == null) return problem.getDomainBounds(true);
else return new Range(boundingBox.minX, boundingBox.maxX);
}
private XYPlot createProblemSolutionPlot(final XYSeriesCollection problem, XYSeriesCollection shipments, XYSeriesCollection solutionColl, final Map<XYDataItem, String> labels) { private XYPlot createProblemSolutionPlot(final XYSeriesCollection problem, XYSeriesCollection shipments, XYSeriesCollection solutionColl, final Map<XYDataItem, String> labels) {
XYPlot plot = new XYPlot(); XYPlot plot = new XYPlot();
plot.setBackgroundPaint(Color.LIGHT_GRAY); plot.setBackgroundPaint(Color.LIGHT_GRAY);
@ -264,10 +297,10 @@ public class Plotter {
problemRenderer.setBaseItemLabelPaint(Color.BLACK); problemRenderer.setBaseItemLabelPaint(Color.BLACK);
NumberAxis xAxis = new NumberAxis(); NumberAxis xAxis = new NumberAxis();
xAxis.setRangeWithMargins(problem.getDomainBounds(true)); xAxis.setRangeWithMargins(getDomainRange(problem));
NumberAxis yAxis = new NumberAxis(); NumberAxis yAxis = new NumberAxis();
yAxis.setRangeWithMargins(problem.getRangeBounds(true)); yAxis.setRangeWithMargins(getRange(problem));
plot.setDataset(0, problem); plot.setDataset(0, problem);
plot.setRenderer(0, problemRenderer); plot.setRenderer(0, problemRenderer);

View file

@ -19,6 +19,7 @@ package jsprit.examples;
import java.io.File; import java.io.File;
import java.util.Collection; import java.util.Collection;
import jsprit.analysis.toolbox.Plotter;
import jsprit.analysis.toolbox.SolutionPlotter; import jsprit.analysis.toolbox.SolutionPlotter;
import jsprit.analysis.toolbox.SolutionPrinter; import jsprit.analysis.toolbox.SolutionPrinter;
import jsprit.core.algorithm.VehicleRoutingAlgorithm; import jsprit.core.algorithm.VehicleRoutingAlgorithm;
@ -91,7 +92,10 @@ public class SolomonExample {
/* /*
* Plot solution. * Plot solution.
*/ */
SolutionPlotter.plotSolutionAsPNG(vrp, solution, "output/solomon_C101_solution.png","C101"); Plotter plotter = new Plotter(vrp,solution);
// plotter.setBoundingBox(30, 0, 50, 20);
plotter.plot("output/solomon_C101_solution.png", "C101");
// SolutionPlotter.plotSolutionAsPNG(vrp, solution, "output/solomon_C101_solution.png","C101");