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

make JsonWriter write vehicleTypes

This commit is contained in:
oblonski 2014-11-04 12:09:02 +01:00
parent 93dc0f69e6
commit 8ce3c4c2da
2 changed files with 84 additions and 4 deletions

View file

@ -28,6 +28,8 @@ public class JsonConstants {
public static final String VEHICLES = "vehicles"; public static final String VEHICLES = "vehicles";
public static final String VEHICLE_TYPES = "vehicle_types";
public static class Address { public static class Address {
public static String ID = "id"; public static String ID = "id";
@ -73,5 +75,28 @@ public class JsonConstants {
public static final String START_ADDRESS = "start_address"; public static final String START_ADDRESS = "start_address";
public static final String END_ADDRESS = "end_address"; public static final String END_ADDRESS = "end_address";
public static final String EARLIEST_START = "earliest_start";
public static final String LATEST_END = "latest_end";
public static final String SKILLS = "skills";
public static final String CAPACITY = "capacity";
public static final String TYPE_ID = "type_id";
public static class Type {
public static final String ID = "id";
public static final String CAPACITY = "capacity";
public static final String FIXED_COSTS = "fixed_costs";
public static final String DISTANCE = "distance_dependent_costs";
public static final String TIME = "time_dependent_costs";
}
} }
} }

View file

@ -26,10 +26,15 @@ 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.Vehicle;
import jsprit.core.problem.vehicle.VehicleImpl; import jsprit.core.problem.vehicle.VehicleImpl;
import jsprit.core.problem.vehicle.VehicleType;
import jsprit.core.problem.vehicle.VehicleTypeImpl;
import jsprit.core.util.Coordinate; import jsprit.core.util.Coordinate;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
/** /**
* Created by stefan on 03.11.14. * Created by stefan on 03.11.14.
@ -50,7 +55,7 @@ public class VrpJsonWriter {
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);
@ -66,6 +71,39 @@ public class VrpJsonWriter {
} }
} }
private void writeVehicleTypes(JsonGenerator jsonGenerator) {
try {
jsonGenerator.writeArrayFieldStart(JsonConstants.VEHICLE_TYPES);
Collection<VehicleType> types = getTypes(vrp.getVehicles());
for(VehicleType type : types){
jsonGenerator.writeStartObject();
jsonGenerator.writeStringField(JsonConstants.Vehicle.Type.ID, type.getTypeId());
jsonGenerator.writeArrayFieldStart(JsonConstants.Vehicle.Type.CAPACITY);
for(int i=0;i<type.getCapacityDimensions().getNuOfDimensions();i++){
jsonGenerator.writeNumber(type.getCapacityDimensions().get(i));
}
jsonGenerator.writeEndArray();
jsonGenerator.writeNumberField(JsonConstants.Vehicle.Type.FIXED_COSTS, type.getVehicleCostParams().fix);
jsonGenerator.writeNumberField(JsonConstants.Vehicle.Type.DISTANCE, type.getVehicleCostParams().perDistanceUnit);
jsonGenerator.writeNumberField(JsonConstants.Vehicle.Type.TIME, type.getVehicleCostParams().perTimeUnit);
jsonGenerator.writeEndObject();
}
jsonGenerator.writeEndArray();
} catch (IOException e) {
e.printStackTrace();
}
}
private Collection<VehicleType> getTypes(Collection<Vehicle> vehicles) {
Set<VehicleType> types = new HashSet<VehicleType>();
for(Vehicle v : vehicles) types.add(v.getType());
return types;
}
private void writeVehicles(JsonGenerator jsonGenerator) { private void writeVehicles(JsonGenerator jsonGenerator) {
try { try {
jsonGenerator.writeArrayFieldStart(JsonConstants.VEHICLES); jsonGenerator.writeArrayFieldStart(JsonConstants.VEHICLES);
@ -85,7 +123,16 @@ public class VrpJsonWriter {
jsonGenerator.writeNumberField(JsonConstants.Address.LAT,vehicle.getEndLocationCoordinate().getY()); jsonGenerator.writeNumberField(JsonConstants.Address.LAT,vehicle.getEndLocationCoordinate().getY());
jsonGenerator.writeEndObject(); jsonGenerator.writeEndObject();
} }
jsonGenerator.writeNumberField(JsonConstants.Vehicle.EARLIEST_START,vehicle.getEarliestDeparture());
jsonGenerator.writeNumberField(JsonConstants.Vehicle.LATEST_END,vehicle.getLatestArrival());
jsonGenerator.writeStringField(JsonConstants.Vehicle.TYPE_ID,vehicle.getType().getTypeId());
jsonGenerator.writeArrayFieldStart(JsonConstants.Vehicle.SKILLS);
for(String skill : vehicle.getSkills().values()){
jsonGenerator.writeString(skill);
}
jsonGenerator.writeEndArray();
jsonGenerator.writeEndObject(); jsonGenerator.writeEndObject();
} }
jsonGenerator.writeEndArray(); jsonGenerator.writeEndArray();
@ -148,11 +195,19 @@ public class VrpJsonWriter {
.setServiceTime(100.) .setServiceTime(100.)
.setTimeWindow(TimeWindow.newInstance(10, 20)) .setTimeWindow(TimeWindow.newInstance(10, 20))
.addRequiredSkill("screw-driver").build(); .addRequiredSkill("screw-driver").build();
VehicleType type = VehicleTypeImpl.Builder.newInstance("small").addCapacityDimension(0,10).addCapacityDimension(2,400)
.setCostPerTime(20.).build();
VehicleType type2 = VehicleTypeImpl.Builder.newInstance("medium").addCapacityDimension(0,1000).addCapacityDimension(2,4000)
.setCostPerTime(200.).setFixedCost(1000.).build();
VehicleImpl v1 = VehicleImpl.Builder.newInstance("v1").setStartLocationId("startLoc").setStartLocationCoordinate(Coordinate.newInstance(0, 0)) VehicleImpl v1 = VehicleImpl.Builder.newInstance("v1").setStartLocationId("startLoc").setStartLocationCoordinate(Coordinate.newInstance(0, 0))
.setEndLocationId("endLoc").setEndLocationCoordinate(Coordinate.newInstance(12, 12)).build(); .setEndLocationId("endLoc").setEndLocationCoordinate(Coordinate.newInstance(12, 12))
.addSkill("screw-driver")
.setType(type)
.build();
VehicleImpl v2 = VehicleImpl.Builder.newInstance("v2").setStartLocationId("startLoc").setStartLocationCoordinate(Coordinate.newInstance(0,0)) VehicleImpl v2 = VehicleImpl.Builder.newInstance("v2").setStartLocationId("startLoc").setStartLocationCoordinate(Coordinate.newInstance(0,0))
.build(); .setType(type2).build();
VehicleRoutingProblem vrp = VehicleRoutingProblem.Builder.newInstance().addJob(service).addJob(service2) VehicleRoutingProblem vrp = VehicleRoutingProblem.Builder.newInstance().addJob(service).addJob(service2)
.addVehicle(v1).addVehicle(v2).build(); .addVehicle(v1).addVehicle(v2).build();
new VrpJsonWriter(vrp).write("output/vrp.json"); new VrpJsonWriter(vrp).write("output/vrp.json");