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 static final String PROBLEM = "vrp";
public static final String SOLUTION = "solution";
public static final String SERVICES = "services";
public static final String FLEET = "fleet_size";
@ -164,4 +168,6 @@ public class JsonConstants {
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.util.Coordinate;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
@ -70,18 +69,18 @@ public class VrpJsonReader {
parse(root);
}
private void parse(JsonNode root) {
setFleetSize(root);
parse_and_map_vehicle_types(root);
parse_vehicles(root);
parse_services(root);
public void parse(JsonNode problemRoot) {
setFleetSize(problemRoot);
parse_and_map_vehicle_types(problemRoot);
parse_vehicles(problemRoot);
parse_services(problemRoot);
}
private JsonNode buildTree_and_getRoot_fromContent(String jsonContent){
JsonNode node = null;
try {
ObjectMapper objectMapper = new ObjectMapper();
node = objectMapper.readTree(jsonContent);
node = objectMapper.readTree(jsonContent).path(JsonConstants.PROBLEM);
} catch (IOException e) {
e.printStackTrace();
System.exit(1);
@ -93,12 +92,7 @@ public class VrpJsonReader {
JsonNode node = null;
try {
ObjectMapper objectMapper = new ObjectMapper();
String jsonContent = "";
BufferedReader reader = new BufferedReader(new FileReader(jsonFile));
String line;
while((line = reader.readLine()) != null) jsonContent += line;
reader.close();
node = objectMapper.readTree(jsonContent);
node = objectMapper.readTree(new FileReader(jsonFile)).path(JsonConstants.PROBLEM);
} catch (IOException e) {
e.printStackTrace();
System.exit(1);

View file

@ -39,10 +39,7 @@ import jsprit.core.problem.vehicle.VehicleTypeImpl;
import jsprit.core.util.Coordinate;
import jsprit.core.util.Solutions;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.StringWriter;
import java.io.*;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
@ -82,11 +79,8 @@ public class VrpJsonWriter {
return stringWriter.toString();
}
public void write(File jsonFile){
public void addTo(JsonGenerator jsonGenerator){
try {
JsonGenerator jsonGenerator = new JsonFactory().createGenerator(new FileOutputStream(jsonFile), JsonEncoding.UTF8);
if(solution == null) writeProblem(jsonGenerator);
else writeSolution(jsonGenerator);
} catch (IOException e) {
@ -95,17 +89,41 @@ public class VrpJsonWriter {
}
}
private void writeSolution(JsonGenerator jsonGenerator) throws IOException {
public void write(Writer writer){
try {
JsonGenerator jsonGenerator = new JsonFactory().createGenerator(writer);
jsonGenerator.setPrettyPrinter(new DefaultPrettyPrinter());
jsonGenerator.writeStartObject();
writeSolution_(jsonGenerator);
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) {
public void write(File jsonFile){
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.FIXED_COSTS,solutionAnalyzer.getFixedCosts());
jsonGenerator.writeNumberField(JsonConstants.Solution.VARIABLE_COSTS, solutionAnalyzer.getVariableTransportCosts());
@ -142,6 +160,7 @@ public class VrpJsonWriter {
jsonGenerator.writeString(j.getId());
}
jsonGenerator.writeEndArray();
jsonGenerator.writeEndObject();
} catch (IOException e) {
e.printStackTrace();
@ -150,15 +169,12 @@ public class VrpJsonWriter {
}
private void writeProblem(JsonGenerator jsonGenerator) throws IOException {
jsonGenerator.setPrettyPrinter(new DefaultPrettyPrinter());
jsonGenerator.writeStartObject();
jsonGenerator.writeStringField(JsonConstants.FLEET,vrp.getFleetSize().toString());
jsonGenerator.writeObjectFieldStart(JsonConstants.PROBLEM);
jsonGenerator.writeStringField(JsonConstants.FLEET, vrp.getFleetSize().toString());
writeVehicles(jsonGenerator);
writeVehicleTypes(jsonGenerator);
writeServices(jsonGenerator);
jsonGenerator.writeEndObject();
jsonGenerator.flush();
jsonGenerator.close();
}
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))
.addSizeDimension(0, 20).addSizeDimension(1, 40)
.setServiceTime(1.)
@ -311,19 +327,32 @@ public class VrpJsonWriter {
// System.out.println(new VrpJsonWriter(vrp).toString());
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();
VehicleRoutingAlgorithm vra = new GreedySchrimpfFactory().createAlgorithm(vrp_);
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() {
@Override
public double getDistance(String fromLocationId, String toLocationId) {
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"));
}
}