From bec373ba9416bff88795ec3c9062fc1ed5aede13 Mon Sep 17 00:00:00 2001 From: oblonski <4sschroeder@gmail.com> Date: Wed, 5 Nov 2014 13:54:00 +0100 Subject: [PATCH] add json stuff --- .../jsprit/core/problem/io/JsonConstants.java | 50 +++++++++++++++++ .../jsprit/core/problem/io/VrpJsonWriter.java | 53 +++++++++++++++++-- 2 files changed, 100 insertions(+), 3 deletions(-) diff --git a/jsprit-core/src/main/java/jsprit/core/problem/io/JsonConstants.java b/jsprit-core/src/main/java/jsprit/core/problem/io/JsonConstants.java index 3b3fa301..2204e538 100644 --- a/jsprit-core/src/main/java/jsprit/core/problem/io/JsonConstants.java +++ b/jsprit-core/src/main/java/jsprit/core/problem/io/JsonConstants.java @@ -30,6 +30,56 @@ public class JsonConstants { public static final String VEHICLE_TYPES = "vehicle_types"; + public static class Solution { + + public static final String COSTS = "costs"; + + public static final String DISTANCE = "distance"; + + public static final String TIME = "time"; + + public static final String ROUTES = "routes"; + + public static final String NO_ROUTES = "no_routes"; + + public static final String NO_UNASSIGNED = "no_unassigned_jobs"; + + public static final String FIXED_COSTS = "fixed_costs"; + + public static final String VARIABLE_COSTS = "variable_costs"; + + public static class Route { + + public static final String COSTS = "costs"; + + public static final String DISTANCE = "distance"; + + public static final String TIME = "time"; + + public static final String VEHICLE_ID = "vehicle_id"; + + public static final String START_TIME = "start_time"; + + public static final String END_TIME = "end_time"; + + public static final String ACTIVITY = "act"; + + public static class Activity { + + public static final String TYPE = "type"; + + public static final String SERVICE_ID = "job_id"; + + public static final String ARR_TIME = "arr_time"; + + public static final String END_TIME = "end_time"; + + } + + } + + } + public static class Address { public static String ID = "id"; diff --git a/jsprit-core/src/main/java/jsprit/core/problem/io/VrpJsonWriter.java b/jsprit-core/src/main/java/jsprit/core/problem/io/VrpJsonWriter.java index 453a5c19..8b4dba43 100644 --- a/jsprit-core/src/main/java/jsprit/core/problem/io/VrpJsonWriter.java +++ b/jsprit-core/src/main/java/jsprit/core/problem/io/VrpJsonWriter.java @@ -21,9 +21,12 @@ import com.fasterxml.jackson.core.JsonEncoding; import com.fasterxml.jackson.core.JsonFactory; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.util.DefaultPrettyPrinter; +import jsprit.core.analysis.SolutionAnalyser; import jsprit.core.problem.VehicleRoutingProblem; import jsprit.core.problem.job.Job; import jsprit.core.problem.job.Service; +import jsprit.core.problem.solution.VehicleRoutingProblemSolution; +import jsprit.core.problem.solution.route.VehicleRoute; import jsprit.core.problem.solution.route.activity.TimeWindow; import jsprit.core.problem.vehicle.Vehicle; import jsprit.core.problem.vehicle.VehicleImpl; @@ -46,15 +49,27 @@ public class VrpJsonWriter { private final VehicleRoutingProblem vrp; + private final VehicleRoutingProblemSolution solution; + + private SolutionAnalyser solutionAnalyzer; + public VrpJsonWriter(VehicleRoutingProblem vrp) { this.vrp = vrp; + this.solution = null; + } + + public VrpJsonWriter(VehicleRoutingProblem vrp, VehicleRoutingProblemSolution solution, SolutionAnalyser.DistanceCalculator distanceCalculator){ + this.vrp = vrp; + this.solution = solution; + this.solutionAnalyzer = new SolutionAnalyser(vrp,solution,distanceCalculator); } public String toString(){ StringWriter stringWriter = new StringWriter(); try { JsonGenerator jsonGenerator = new JsonFactory().createGenerator(stringWriter); - write(jsonGenerator); + if(solution == null) writeProblem(jsonGenerator); + else writeSolution(jsonGenerator); } catch (IOException e) { e.printStackTrace(); System.exit(1); @@ -62,17 +77,49 @@ public class VrpJsonWriter { return stringWriter.toString(); } + + public void write(File jsonFile){ try { JsonGenerator jsonGenerator = new JsonFactory().createGenerator(new FileOutputStream(jsonFile), JsonEncoding.UTF8); - write(jsonGenerator); + if(solution == null) writeProblem(jsonGenerator); + else writeSolution(jsonGenerator); } catch (IOException e) { e.printStackTrace(); System.exit(1); } } - private void write(JsonGenerator jsonGenerator) throws IOException { + private void writeSolution(JsonGenerator jsonGenerator) throws IOException { + jsonGenerator.setPrettyPrinter(new DefaultPrettyPrinter()); + jsonGenerator.writeStartObject(); + writeSolution_(jsonGenerator); + jsonGenerator.writeEndObject(); + jsonGenerator.flush(); + jsonGenerator.close(); + } + + private void writeSolution_(JsonGenerator jsonGenerator) { + try { + jsonGenerator.writeNumberField(JsonConstants.Solution.COSTS,solution.getCost()); + jsonGenerator.writeNumberField(JsonConstants.Solution.FIXED_COSTS,solutionAnalyzer.getFixedCosts()); + jsonGenerator.writeNumberField(JsonConstants.Solution.VARIABLE_COSTS, solutionAnalyzer.getVariableTransportCosts()); + jsonGenerator.writeNumberField(JsonConstants.Solution.DISTANCE,solutionAnalyzer.getDistance()); + jsonGenerator.writeNumberField(JsonConstants.Solution.TIME, solutionAnalyzer.getTransportTime()); + jsonGenerator.writeNumberField(JsonConstants.Solution.NO_ROUTES,solution.getRoutes().size()); + jsonGenerator.writeNumberField(JsonConstants.Solution.NO_UNASSIGNED,solution.getUnassignedJobs().size()); + jsonGenerator.writeArrayFieldStart(JsonConstants.Solution.ROUTES); + for(VehicleRoute route : solution.getRoutes()){ +// jsonGenerator.writeNumberField(JsonConstants.Solution.FIXED_COSTS,solutionAnalyzer.getCosgetCo(route)); + } + jsonGenerator.writeEndArray(); + } catch (IOException e) { + e.printStackTrace(); + } + + } + + private void writeProblem(JsonGenerator jsonGenerator) throws IOException { jsonGenerator.setPrettyPrinter(new DefaultPrettyPrinter()); jsonGenerator.writeStartObject(); jsonGenerator.writeStringField(JsonConstants.FLEET,vrp.getFleetSize().toString());