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:
parent
1585912486
commit
6d9a7ffb1b
3 changed files with 66 additions and 37 deletions
|
|
@ -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";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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.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"));
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue