mirror of
https://github.com/graphhopper/jsprit.git
synced 2020-01-24 07:45:05 +01:00
make JsonWriter write vehicles
This commit is contained in:
parent
b1eb836ec3
commit
93dc0f69e6
2 changed files with 144 additions and 26 deletions
|
|
@ -1,3 +1,20 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (C) 2014 Stefan Schroeder
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 3.0 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
package jsprit.core.problem.io;
|
package jsprit.core.problem.io;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -5,6 +22,12 @@ package jsprit.core.problem.io;
|
||||||
*/
|
*/
|
||||||
public class JsonConstants {
|
public class JsonConstants {
|
||||||
|
|
||||||
|
public static final String SERVICES = "services";
|
||||||
|
|
||||||
|
public static final String FLEET = "fleet_size";
|
||||||
|
|
||||||
|
public static final String VEHICLES = "vehicles";
|
||||||
|
|
||||||
public static class Address {
|
public static class Address {
|
||||||
|
|
||||||
public static String ID = "id";
|
public static String ID = "id";
|
||||||
|
|
@ -42,4 +65,13 @@ public class JsonConstants {
|
||||||
public static final String TIME_WINDOW = "time_window";
|
public static final String TIME_WINDOW = "time_window";
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class Vehicle {
|
||||||
|
|
||||||
|
public static final String ID = "id";
|
||||||
|
|
||||||
|
public static final String START_ADDRESS = "start_address";
|
||||||
|
|
||||||
|
public static final String END_ADDRESS = "end_address";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,31 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (C) 2014 Stefan Schroeder
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 3.0 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
package jsprit.core.problem.io;
|
package jsprit.core.problem.io;
|
||||||
|
|
||||||
import com.fasterxml.jackson.core.JsonFactory;
|
import com.fasterxml.jackson.core.JsonFactory;
|
||||||
import com.fasterxml.jackson.core.JsonGenerator;
|
import com.fasterxml.jackson.core.JsonGenerator;
|
||||||
import com.fasterxml.jackson.core.util.DefaultPrettyPrinter;
|
import com.fasterxml.jackson.core.util.DefaultPrettyPrinter;
|
||||||
|
import jsprit.core.problem.VehicleRoutingProblem;
|
||||||
|
import jsprit.core.problem.job.Job;
|
||||||
import jsprit.core.problem.job.Service;
|
import jsprit.core.problem.job.Service;
|
||||||
import jsprit.core.problem.solution.route.activity.TimeWindow;
|
import jsprit.core.problem.solution.route.activity.TimeWindow;
|
||||||
|
import jsprit.core.problem.vehicle.Vehicle;
|
||||||
|
import jsprit.core.problem.vehicle.VehicleImpl;
|
||||||
import jsprit.core.util.Coordinate;
|
import jsprit.core.util.Coordinate;
|
||||||
|
|
||||||
import java.io.FileOutputStream;
|
import java.io.FileOutputStream;
|
||||||
|
|
@ -15,10 +36,10 @@ import java.io.IOException;
|
||||||
*/
|
*/
|
||||||
public class VrpJsonWriter {
|
public class VrpJsonWriter {
|
||||||
|
|
||||||
private Service service;
|
private final VehicleRoutingProblem vrp;
|
||||||
|
|
||||||
public VrpJsonWriter(Service service) {
|
public VrpJsonWriter(VehicleRoutingProblem vrp) {
|
||||||
this.service = service;
|
this.vrp = vrp;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void write(String filename){
|
public void write(String filename){
|
||||||
|
|
@ -26,31 +47,14 @@ public class VrpJsonWriter {
|
||||||
JsonGenerator jsonGenerator = new JsonFactory().createGenerator(new FileOutputStream(filename));
|
JsonGenerator jsonGenerator = new JsonFactory().createGenerator(new FileOutputStream(filename));
|
||||||
jsonGenerator.setPrettyPrinter(new DefaultPrettyPrinter());
|
jsonGenerator.setPrettyPrinter(new DefaultPrettyPrinter());
|
||||||
jsonGenerator.writeStartObject();
|
jsonGenerator.writeStartObject();
|
||||||
jsonGenerator.writeStringField(JsonConstants.Job.ID,service.getId());
|
|
||||||
jsonGenerator.writeStringField(JsonConstants.Job.NAME,service.getName());
|
|
||||||
jsonGenerator.writeObjectFieldStart(JsonConstants.Job.ADDRESS);
|
|
||||||
jsonGenerator.writeStringField(JsonConstants.Address.ID, service.getLocationId());
|
|
||||||
jsonGenerator.writeNumberField(JsonConstants.Address.LON, service.getCoord().getX());
|
|
||||||
jsonGenerator.writeNumberField(JsonConstants.Address.LAT,service.getCoord().getY());
|
|
||||||
jsonGenerator.writeEndObject();
|
|
||||||
jsonGenerator.writeNumberField(JsonConstants.Job.SERVICE_DURATION, service.getServiceDuration());
|
|
||||||
|
|
||||||
jsonGenerator.writeObjectFieldStart(JsonConstants.Job.TIME_WINDOW);
|
jsonGenerator.writeStringField(JsonConstants.FLEET,vrp.getFleetSize().toString());
|
||||||
jsonGenerator.writeNumberField(JsonConstants.TimeWindow.START,service.getTimeWindow().getStart());
|
writeVehicles(jsonGenerator);
|
||||||
jsonGenerator.writeNumberField(JsonConstants.TimeWindow.END,service.getTimeWindow().getEnd());
|
// writeVehicleTypes(jsonGenerator);
|
||||||
jsonGenerator.writeEndObject();
|
writeServices(jsonGenerator);
|
||||||
|
|
||||||
|
|
||||||
jsonGenerator.writeArrayFieldStart(JsonConstants.Job.SIZE);
|
|
||||||
for(int i=0;i<service.getSize().getNuOfDimensions();i++){
|
|
||||||
jsonGenerator.writeNumber(service.getSize().get(i));
|
|
||||||
}
|
|
||||||
jsonGenerator.writeEndArray();
|
|
||||||
|
|
||||||
jsonGenerator.writeArrayFieldStart(JsonConstants.Job.SKILLS);
|
|
||||||
for(String skill : service.getRequiredSkills().values()){
|
|
||||||
jsonGenerator.writeString(skill);
|
|
||||||
}
|
|
||||||
jsonGenerator.writeEndArray();
|
|
||||||
|
|
||||||
jsonGenerator.writeEndObject();
|
jsonGenerator.writeEndObject();
|
||||||
|
|
||||||
|
|
@ -62,6 +66,76 @@ public class VrpJsonWriter {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void writeVehicles(JsonGenerator jsonGenerator) {
|
||||||
|
try {
|
||||||
|
jsonGenerator.writeArrayFieldStart(JsonConstants.VEHICLES);
|
||||||
|
for(Vehicle vehicle : vrp.getVehicles()){
|
||||||
|
jsonGenerator.writeStartObject();
|
||||||
|
jsonGenerator.writeStringField(JsonConstants.Vehicle.ID,vehicle.getId());
|
||||||
|
jsonGenerator.writeObjectFieldStart(JsonConstants.Vehicle.START_ADDRESS);
|
||||||
|
jsonGenerator.writeStringField(JsonConstants.Address.ID, vehicle.getStartLocationId());
|
||||||
|
jsonGenerator.writeNumberField(JsonConstants.Address.LON, vehicle.getStartLocationCoordinate().getX());
|
||||||
|
jsonGenerator.writeNumberField(JsonConstants.Address.LAT,vehicle.getStartLocationCoordinate().getY());
|
||||||
|
jsonGenerator.writeEndObject();
|
||||||
|
if(!(vehicle.getStartLocationCoordinate().equals(vehicle.getEndLocationCoordinate())
|
||||||
|
&& vehicle.getStartLocationId().equals(vehicle.getEndLocationId()))){
|
||||||
|
jsonGenerator.writeObjectFieldStart(JsonConstants.Vehicle.END_ADDRESS);
|
||||||
|
jsonGenerator.writeStringField(JsonConstants.Address.ID, vehicle.getEndLocationId());
|
||||||
|
jsonGenerator.writeNumberField(JsonConstants.Address.LON, vehicle.getEndLocationCoordinate().getX());
|
||||||
|
jsonGenerator.writeNumberField(JsonConstants.Address.LAT,vehicle.getEndLocationCoordinate().getY());
|
||||||
|
jsonGenerator.writeEndObject();
|
||||||
|
}
|
||||||
|
|
||||||
|
jsonGenerator.writeEndObject();
|
||||||
|
}
|
||||||
|
jsonGenerator.writeEndArray();
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void writeServices(JsonGenerator jsonGenerator) {
|
||||||
|
try {
|
||||||
|
jsonGenerator.writeArrayFieldStart(JsonConstants.SERVICES);
|
||||||
|
for(Job job : vrp.getJobs().values()){
|
||||||
|
if(!(job instanceof Service)) continue;
|
||||||
|
Service service = (Service)job;
|
||||||
|
jsonGenerator.writeStartObject();
|
||||||
|
jsonGenerator.writeStringField(JsonConstants.Job.ID,service.getId());
|
||||||
|
jsonGenerator.writeStringField(JsonConstants.Job.NAME,service.getName());
|
||||||
|
jsonGenerator.writeObjectFieldStart(JsonConstants.Job.ADDRESS);
|
||||||
|
jsonGenerator.writeStringField(JsonConstants.Address.ID, service.getLocationId());
|
||||||
|
jsonGenerator.writeNumberField(JsonConstants.Address.LON, service.getCoord().getX());
|
||||||
|
jsonGenerator.writeNumberField(JsonConstants.Address.LAT,service.getCoord().getY());
|
||||||
|
jsonGenerator.writeEndObject();
|
||||||
|
jsonGenerator.writeNumberField(JsonConstants.Job.SERVICE_DURATION, service.getServiceDuration());
|
||||||
|
|
||||||
|
jsonGenerator.writeObjectFieldStart(JsonConstants.Job.TIME_WINDOW);
|
||||||
|
jsonGenerator.writeNumberField(JsonConstants.TimeWindow.START,service.getTimeWindow().getStart());
|
||||||
|
jsonGenerator.writeNumberField(JsonConstants.TimeWindow.END,service.getTimeWindow().getEnd());
|
||||||
|
jsonGenerator.writeEndObject();
|
||||||
|
|
||||||
|
jsonGenerator.writeArrayFieldStart(JsonConstants.Job.SIZE);
|
||||||
|
for(int i=0;i<service.getSize().getNuOfDimensions();i++){
|
||||||
|
jsonGenerator.writeNumber(service.getSize().get(i));
|
||||||
|
}
|
||||||
|
jsonGenerator.writeEndArray();
|
||||||
|
|
||||||
|
jsonGenerator.writeArrayFieldStart(JsonConstants.Job.SKILLS);
|
||||||
|
for(String skill : service.getRequiredSkills().values()){
|
||||||
|
jsonGenerator.writeString(skill);
|
||||||
|
}
|
||||||
|
jsonGenerator.writeEndArray();
|
||||||
|
jsonGenerator.writeEndObject();
|
||||||
|
}
|
||||||
|
jsonGenerator.writeEndArray();
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
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)
|
||||||
|
|
@ -69,6 +143,18 @@ public class VrpJsonWriter {
|
||||||
.setTimeWindow(TimeWindow.newInstance(10, 20))
|
.setTimeWindow(TimeWindow.newInstance(10, 20))
|
||||||
.addRequiredSkill("drilling-machine")
|
.addRequiredSkill("drilling-machine")
|
||||||
.addRequiredSkill("screw-driver").build();
|
.addRequiredSkill("screw-driver").build();
|
||||||
new VrpJsonWriter(service).write("output/jsonwriter.json");
|
Service service2 = Service.Builder.newInstance("s2").setLocationId("s2_loc").setCoord(Coordinate.newInstance(40, 10))
|
||||||
|
.addSizeDimension(0, 20).addSizeDimension(1, 40)
|
||||||
|
.setServiceTime(100.)
|
||||||
|
.setTimeWindow(TimeWindow.newInstance(10, 20))
|
||||||
|
.addRequiredSkill("screw-driver").build();
|
||||||
|
VehicleImpl v1 = VehicleImpl.Builder.newInstance("v1").setStartLocationId("startLoc").setStartLocationCoordinate(Coordinate.newInstance(0,0))
|
||||||
|
.setEndLocationId("endLoc").setEndLocationCoordinate(Coordinate.newInstance(12, 12)).build();
|
||||||
|
|
||||||
|
VehicleImpl v2 = VehicleImpl.Builder.newInstance("v2").setStartLocationId("startLoc").setStartLocationCoordinate(Coordinate.newInstance(0,0))
|
||||||
|
.build();
|
||||||
|
VehicleRoutingProblem vrp = VehicleRoutingProblem.Builder.newInstance().addJob(service).addJob(service2)
|
||||||
|
.addVehicle(v1).addVehicle(v2).build();
|
||||||
|
new VrpJsonWriter(vrp).write("output/vrp.json");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue