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

refine json stuff to easily add additional json objects

This commit is contained in:
oblonski 2014-12-03 18:28:00 +01:00
parent 1585912486
commit 6d9a7ffb1b
3 changed files with 66 additions and 37 deletions

View file

@ -22,6 +22,10 @@ package jsprit.core.problem.io;
*/ */
public class JsonConstants { public class JsonConstants {
public static final String PROBLEM = "vrp";
public static final String SOLUTION = "solution";
public static final String SERVICES = "services"; public static final String SERVICES = "services";
public static final String FLEET = "fleet_size"; public static final String FLEET = "fleet_size";
@ -164,4 +168,6 @@ public class JsonConstants {
public static final String TIME = "time_dependent_costs"; public static final String TIME = "time_dependent_costs";
} }
} }
} }

View file

@ -32,7 +32,6 @@ import jsprit.core.problem.vehicle.VehicleType;
import jsprit.core.problem.vehicle.VehicleTypeImpl; import jsprit.core.problem.vehicle.VehicleTypeImpl;
import jsprit.core.util.Coordinate; import jsprit.core.util.Coordinate;
import java.io.BufferedReader;
import java.io.File; import java.io.File;
import java.io.FileReader; import java.io.FileReader;
import java.io.IOException; import java.io.IOException;
@ -70,18 +69,18 @@ public class VrpJsonReader {
parse(root); parse(root);
} }
private void parse(JsonNode root) { public void parse(JsonNode problemRoot) {
setFleetSize(root); setFleetSize(problemRoot);
parse_and_map_vehicle_types(root); parse_and_map_vehicle_types(problemRoot);
parse_vehicles(root); parse_vehicles(problemRoot);
parse_services(root); parse_services(problemRoot);
} }
private JsonNode buildTree_and_getRoot_fromContent(String jsonContent){ private JsonNode buildTree_and_getRoot_fromContent(String jsonContent){
JsonNode node = null; JsonNode node = null;
try { try {
ObjectMapper objectMapper = new ObjectMapper(); ObjectMapper objectMapper = new ObjectMapper();
node = objectMapper.readTree(jsonContent); node = objectMapper.readTree(jsonContent).path(JsonConstants.PROBLEM);
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
System.exit(1); System.exit(1);
@ -93,12 +92,7 @@ public class VrpJsonReader {
JsonNode node = null; JsonNode node = null;
try { try {
ObjectMapper objectMapper = new ObjectMapper(); ObjectMapper objectMapper = new ObjectMapper();
String jsonContent = ""; node = objectMapper.readTree(new FileReader(jsonFile)).path(JsonConstants.PROBLEM);
BufferedReader reader = new BufferedReader(new FileReader(jsonFile));
String line;
while((line = reader.readLine()) != null) jsonContent += line;
reader.close();
node = objectMapper.readTree(jsonContent);
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
System.exit(1); System.exit(1);

View file

@ -39,10 +39,7 @@ import jsprit.core.problem.vehicle.VehicleTypeImpl;
import jsprit.core.util.Coordinate; import jsprit.core.util.Coordinate;
import jsprit.core.util.Solutions; import jsprit.core.util.Solutions;
import java.io.File; import java.io.*;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.StringWriter;
import java.util.Collection; import java.util.Collection;
import java.util.HashSet; import java.util.HashSet;
import java.util.Set; import java.util.Set;
@ -82,11 +79,8 @@ public class VrpJsonWriter {
return stringWriter.toString(); return stringWriter.toString();
} }
public void addTo(JsonGenerator jsonGenerator){
public void write(File jsonFile){
try { try {
JsonGenerator jsonGenerator = new JsonFactory().createGenerator(new FileOutputStream(jsonFile), JsonEncoding.UTF8);
if(solution == null) writeProblem(jsonGenerator); if(solution == null) writeProblem(jsonGenerator);
else writeSolution(jsonGenerator); else writeSolution(jsonGenerator);
} catch (IOException e) { } catch (IOException e) {
@ -95,17 +89,41 @@ public class VrpJsonWriter {
} }
} }
private void writeSolution(JsonGenerator jsonGenerator) throws IOException { public void write(Writer writer){
jsonGenerator.setPrettyPrinter(new DefaultPrettyPrinter()); try {
jsonGenerator.writeStartObject(); JsonGenerator jsonGenerator = new JsonFactory().createGenerator(writer);
writeSolution_(jsonGenerator); jsonGenerator.setPrettyPrinter(new DefaultPrettyPrinter());
jsonGenerator.writeEndObject(); jsonGenerator.writeStartObject();
jsonGenerator.flush(); if(solution == null) writeProblem(jsonGenerator);
jsonGenerator.close(); else writeSolution(jsonGenerator);
jsonGenerator.writeEndObject();
jsonGenerator.flush();
jsonGenerator.close();
} catch (IOException e) {
e.printStackTrace();
System.exit(1);
}
} }
private void writeSolution_(JsonGenerator jsonGenerator) { public void write(File jsonFile){
try { try {
JsonGenerator jsonGenerator = new JsonFactory().createGenerator(new FileOutputStream(jsonFile), JsonEncoding.UTF8);
jsonGenerator.setPrettyPrinter(new DefaultPrettyPrinter());
jsonGenerator.writeStartObject();
if(solution == null) writeProblem(jsonGenerator);
else writeSolution(jsonGenerator);
jsonGenerator.writeEndObject();
jsonGenerator.flush();
jsonGenerator.close();
} catch (IOException e) {
e.printStackTrace();
System.exit(1);
}
}
private void writeSolution(JsonGenerator jsonGenerator) {
try {
jsonGenerator.writeObjectFieldStart(JsonConstants.SOLUTION);
jsonGenerator.writeNumberField(JsonConstants.Solution.COSTS,solution.getCost()); jsonGenerator.writeNumberField(JsonConstants.Solution.COSTS,solution.getCost());
jsonGenerator.writeNumberField(JsonConstants.Solution.FIXED_COSTS,solutionAnalyzer.getFixedCosts()); jsonGenerator.writeNumberField(JsonConstants.Solution.FIXED_COSTS,solutionAnalyzer.getFixedCosts());
jsonGenerator.writeNumberField(JsonConstants.Solution.VARIABLE_COSTS, solutionAnalyzer.getVariableTransportCosts()); jsonGenerator.writeNumberField(JsonConstants.Solution.VARIABLE_COSTS, solutionAnalyzer.getVariableTransportCosts());
@ -142,6 +160,7 @@ public class VrpJsonWriter {
jsonGenerator.writeString(j.getId()); jsonGenerator.writeString(j.getId());
} }
jsonGenerator.writeEndArray(); jsonGenerator.writeEndArray();
jsonGenerator.writeEndObject();
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
@ -150,15 +169,12 @@ public class VrpJsonWriter {
} }
private void writeProblem(JsonGenerator jsonGenerator) throws IOException { private void writeProblem(JsonGenerator jsonGenerator) throws IOException {
jsonGenerator.setPrettyPrinter(new DefaultPrettyPrinter()); jsonGenerator.writeObjectFieldStart(JsonConstants.PROBLEM);
jsonGenerator.writeStartObject(); jsonGenerator.writeStringField(JsonConstants.FLEET, vrp.getFleetSize().toString());
jsonGenerator.writeStringField(JsonConstants.FLEET,vrp.getFleetSize().toString());
writeVehicles(jsonGenerator); writeVehicles(jsonGenerator);
writeVehicleTypes(jsonGenerator); writeVehicleTypes(jsonGenerator);
writeServices(jsonGenerator); writeServices(jsonGenerator);
jsonGenerator.writeEndObject(); jsonGenerator.writeEndObject();
jsonGenerator.flush();
jsonGenerator.close();
} }
private void writeVehicleTypes(JsonGenerator jsonGenerator) { private void writeVehicleTypes(JsonGenerator jsonGenerator) {
@ -275,7 +291,7 @@ public class VrpJsonWriter {
} }
public static void main(String[] args) { public static void main(String[] args) throws IOException {
Service service = Service.Builder.newInstance("s1").setLocationId("s1_loc").setCoord(Coordinate.newInstance(40, 10)) Service service = Service.Builder.newInstance("s1").setLocationId("s1_loc").setCoord(Coordinate.newInstance(40, 10))
.addSizeDimension(0, 20).addSizeDimension(1, 40) .addSizeDimension(0, 20).addSizeDimension(1, 40)
.setServiceTime(1.) .setServiceTime(1.)
@ -311,19 +327,32 @@ public class VrpJsonWriter {
// System.out.println(new VrpJsonWriter(vrp).toString()); // System.out.println(new VrpJsonWriter(vrp).toString());
VehicleRoutingProblem.Builder vrpBuilder_ = VehicleRoutingProblem.Builder.newInstance(); VehicleRoutingProblem.Builder vrpBuilder_ = VehicleRoutingProblem.Builder.newInstance();
new VrpJsonReader(vrpBuilder_).read("output/vpr.json"); new VrpJsonReader(vrpBuilder_).read(new File("output/vrp.json"));
VehicleRoutingProblem vrp_ = vrpBuilder_.build(); VehicleRoutingProblem vrp_ = vrpBuilder_.build();
VehicleRoutingAlgorithm vra = new GreedySchrimpfFactory().createAlgorithm(vrp_); VehicleRoutingAlgorithm vra = new GreedySchrimpfFactory().createAlgorithm(vrp_);
VehicleRoutingProblemSolution solutions = Solutions.bestOf(vra.searchSolutions()); VehicleRoutingProblemSolution solutions = Solutions.bestOf(vra.searchSolutions());
FileWriter fileWriter = new FileWriter(new File("output/vrp-solution.json"));
JsonGenerator jsonGenerator = new JsonFactory().createGenerator(fileWriter);
jsonGenerator.setPrettyPrinter(new DefaultPrettyPrinter());
jsonGenerator.writeStartObject();
jsonGenerator.writeObjectFieldStart("meta-info");
jsonGenerator.writeStringField("distance-unit", "m");
jsonGenerator.writeStringField("time-unit","sec");
jsonGenerator.writeEndObject();
new VrpJsonWriter(vrp,solutions,new SolutionAnalyser.DistanceCalculator() { new VrpJsonWriter(vrp,solutions,new SolutionAnalyser.DistanceCalculator() {
@Override @Override
public double getDistance(String fromLocationId, String toLocationId) { public double getDistance(String fromLocationId, String toLocationId) {
return vrp.getTransportCosts().getTransportCost(fromLocationId,toLocationId,0.,null,null); return vrp.getTransportCosts().getTransportCost(fromLocationId,toLocationId,0.,null,null);
} }
}).write(new File("output/vrp-solution.json")); }).addTo(jsonGenerator);
jsonGenerator.writeEndObject();
jsonGenerator.flush();
jsonGenerator.close();
fileWriter.close();
// .write(new File("output/vrp-solution.json"));
} }
} }