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 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";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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){
|
||||||
|
try {
|
||||||
|
JsonGenerator jsonGenerator = new JsonFactory().createGenerator(writer);
|
||||||
jsonGenerator.setPrettyPrinter(new DefaultPrettyPrinter());
|
jsonGenerator.setPrettyPrinter(new DefaultPrettyPrinter());
|
||||||
jsonGenerator.writeStartObject();
|
jsonGenerator.writeStartObject();
|
||||||
writeSolution_(jsonGenerator);
|
if(solution == null) writeProblem(jsonGenerator);
|
||||||
|
else writeSolution(jsonGenerator);
|
||||||
jsonGenerator.writeEndObject();
|
jsonGenerator.writeEndObject();
|
||||||
jsonGenerator.flush();
|
jsonGenerator.flush();
|
||||||
jsonGenerator.close();
|
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"));
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue