mirror of
https://github.com/graphhopper/jsprit.git
synced 2020-01-24 07:45:05 +01:00
add json stuff
This commit is contained in:
parent
bec373ba94
commit
d923859768
2 changed files with 51 additions and 13 deletions
|
|
@ -64,6 +64,12 @@ public class JsonConstants {
|
||||||
|
|
||||||
public static final String ACTIVITY = "act";
|
public static final String ACTIVITY = "act";
|
||||||
|
|
||||||
|
public static final String FIXED_COSTS = "fixed_costs";
|
||||||
|
|
||||||
|
public static final String VARIABLE_COSTS = "variable_costs";
|
||||||
|
|
||||||
|
public static final String NO_ACTIVITIES = "no_activities";
|
||||||
|
|
||||||
public static class Activity {
|
public static class Activity {
|
||||||
|
|
||||||
public static final String TYPE = "type";
|
public static final String TYPE = "type";
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,8 @@ import com.fasterxml.jackson.core.JsonEncoding;
|
||||||
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.algorithm.VehicleRoutingAlgorithm;
|
||||||
|
import jsprit.core.algorithm.box.GreedySchrimpfFactory;
|
||||||
import jsprit.core.analysis.SolutionAnalyser;
|
import jsprit.core.analysis.SolutionAnalyser;
|
||||||
import jsprit.core.problem.VehicleRoutingProblem;
|
import jsprit.core.problem.VehicleRoutingProblem;
|
||||||
import jsprit.core.problem.job.Job;
|
import jsprit.core.problem.job.Job;
|
||||||
|
|
@ -28,11 +30,13 @@ import jsprit.core.problem.job.Service;
|
||||||
import jsprit.core.problem.solution.VehicleRoutingProblemSolution;
|
import jsprit.core.problem.solution.VehicleRoutingProblemSolution;
|
||||||
import jsprit.core.problem.solution.route.VehicleRoute;
|
import jsprit.core.problem.solution.route.VehicleRoute;
|
||||||
import jsprit.core.problem.solution.route.activity.TimeWindow;
|
import jsprit.core.problem.solution.route.activity.TimeWindow;
|
||||||
|
import jsprit.core.problem.solution.route.activity.TourActivity;
|
||||||
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.VehicleType;
|
||||||
import jsprit.core.problem.vehicle.VehicleTypeImpl;
|
import jsprit.core.problem.vehicle.VehicleTypeImpl;
|
||||||
import jsprit.core.util.Coordinate;
|
import jsprit.core.util.Coordinate;
|
||||||
|
import jsprit.core.util.Solutions;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileOutputStream;
|
import java.io.FileOutputStream;
|
||||||
|
|
@ -110,7 +114,22 @@ public class VrpJsonWriter {
|
||||||
jsonGenerator.writeNumberField(JsonConstants.Solution.NO_UNASSIGNED,solution.getUnassignedJobs().size());
|
jsonGenerator.writeNumberField(JsonConstants.Solution.NO_UNASSIGNED,solution.getUnassignedJobs().size());
|
||||||
jsonGenerator.writeArrayFieldStart(JsonConstants.Solution.ROUTES);
|
jsonGenerator.writeArrayFieldStart(JsonConstants.Solution.ROUTES);
|
||||||
for(VehicleRoute route : solution.getRoutes()){
|
for(VehicleRoute route : solution.getRoutes()){
|
||||||
// jsonGenerator.writeNumberField(JsonConstants.Solution.FIXED_COSTS,solutionAnalyzer.getCosgetCo(route));
|
jsonGenerator.writeNumberField(JsonConstants.Solution.Route.FIXED_COSTS,solutionAnalyzer.getFixedCosts(route));
|
||||||
|
jsonGenerator.writeNumberField(JsonConstants.Solution.Route.VARIABLE_COSTS,solutionAnalyzer.getVariableTransportCosts(route));
|
||||||
|
jsonGenerator.writeNumberField(JsonConstants.Solution.Route.NO_ACTIVITIES,route.getActivities().size());
|
||||||
|
jsonGenerator.writeNumberField(JsonConstants.Solution.Route.START_TIME,route.getStart().getEndTime());
|
||||||
|
for(TourActivity act : route.getActivities()) {
|
||||||
|
jsonGenerator.writeObjectFieldStart(JsonConstants.Solution.Route.ACTIVITY);
|
||||||
|
jsonGenerator.writeStringField(JsonConstants.Solution.Route.Activity.TYPE,act.getName());
|
||||||
|
if(act instanceof TourActivity.JobActivity){
|
||||||
|
jsonGenerator.writeStringField(JsonConstants.Solution.Route.Activity.SERVICE_ID,((TourActivity.JobActivity) act).getJob().getId());
|
||||||
|
}
|
||||||
|
else throw new IllegalStateException("act of class " + act.getClass().toString() + " not supported.");
|
||||||
|
jsonGenerator.writeNumberField(JsonConstants.Solution.Route.Activity.ARR_TIME, act.getArrTime());
|
||||||
|
jsonGenerator.writeNumberField(JsonConstants.Solution.Route.Activity.END_TIME,act.getEndTime());
|
||||||
|
jsonGenerator.writeEndObject();
|
||||||
|
}
|
||||||
|
jsonGenerator.writeNumberField(JsonConstants.Solution.Route.END_TIME, route.getEnd().getArrTime());
|
||||||
}
|
}
|
||||||
jsonGenerator.writeEndArray();
|
jsonGenerator.writeEndArray();
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
|
|
@ -248,19 +267,18 @@ public class VrpJsonWriter {
|
||||||
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)
|
||||||
.setServiceTime(100.)
|
.setServiceTime(1.)
|
||||||
.setTimeWindow(TimeWindow.newInstance(10, 20))
|
.addRequiredSkill("joo")
|
||||||
.addRequiredSkill("drilling-machine")
|
.build();
|
||||||
.addRequiredSkill("screw-driver").build();
|
|
||||||
Service service2 = Service.Builder.newInstance("s2").setLocationId("s2_loc").setCoord(Coordinate.newInstance(40, 10))
|
Service service2 = Service.Builder.newInstance("s2").setLocationId("s2_loc").setCoord(Coordinate.newInstance(40, 10))
|
||||||
.addSizeDimension(0, 20).addSizeDimension(1, 40)
|
.addSizeDimension(0, 10).addSizeDimension(1, 30)
|
||||||
.setServiceTime(100.)
|
.setServiceTime(2.)
|
||||||
.setTimeWindow(TimeWindow.newInstance(10, 20))
|
.setTimeWindow(TimeWindow.newInstance(10, 200))
|
||||||
.addRequiredSkill("screw-driver").build();
|
.addRequiredSkill("screw-driver").build();
|
||||||
VehicleType type = VehicleTypeImpl.Builder.newInstance("small").addCapacityDimension(0,10).addCapacityDimension(2,400)
|
VehicleType type = VehicleTypeImpl.Builder.newInstance("small").addCapacityDimension(0,100).addCapacityDimension(1,400)
|
||||||
.setCostPerTime(20.).build();
|
.setCostPerTime(20.).build();
|
||||||
|
|
||||||
VehicleType type2 = VehicleTypeImpl.Builder.newInstance("medium").addCapacityDimension(0,1000).addCapacityDimension(2,4000)
|
VehicleType type2 = VehicleTypeImpl.Builder.newInstance("medium").addCapacityDimension(0,1000).addCapacityDimension(1,4000)
|
||||||
.setCostPerTime(200.).setFixedCost(1000.).build();
|
.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))
|
.setEndLocationId("endLoc").setEndLocationCoordinate(Coordinate.newInstance(12, 12))
|
||||||
|
|
@ -272,10 +290,24 @@ public class VrpJsonWriter {
|
||||||
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))
|
||||||
.setType(type2)
|
.setType(type2)
|
||||||
.setReturnToDepot(false)
|
.setReturnToDepot(false)
|
||||||
|
.addSkill("joo")
|
||||||
.build();
|
.build();
|
||||||
VehicleRoutingProblem vrp = VehicleRoutingProblem.Builder.newInstance().addJob(service).addJob(service2)
|
|
||||||
|
final VehicleRoutingProblem vrp = VehicleRoutingProblem.Builder.newInstance().addJob(service).addJob(service2)
|
||||||
.addVehicle(v1).addVehicle(v2).build();
|
.addVehicle(v1).addVehicle(v2).build();
|
||||||
// new VrpJsonWriter(vrp).write(new File("output/vrp.json"));
|
new VrpJsonWriter(vrp).write(new File("output/vrp.json"));
|
||||||
System.out.println(new VrpJsonWriter(vrp).toString());
|
// System.out.println(new VrpJsonWriter(vrp).toString());
|
||||||
|
|
||||||
|
VehicleRoutingAlgorithm vra = new GreedySchrimpfFactory().createAlgorithm(vrp);
|
||||||
|
VehicleRoutingProblemSolution solutions = Solutions.bestOf(vra.searchSolutions());
|
||||||
|
|
||||||
|
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"));
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue