diff --git a/jsprit-core/src/main/java/jsprit/core/problem/io/VrpXMLReader.java b/jsprit-core/src/main/java/jsprit/core/problem/io/VrpXMLReader.java index 76ca436a..1284c596 100644 --- a/jsprit-core/src/main/java/jsprit/core/problem/io/VrpXMLReader.java +++ b/jsprit-core/src/main/java/jsprit/core/problem/io/VrpXMLReader.java @@ -20,10 +20,7 @@ import jsprit.core.problem.VehicleRoutingProblem; import jsprit.core.problem.VehicleRoutingProblem.FleetSize; import jsprit.core.problem.driver.Driver; import jsprit.core.problem.driver.DriverImpl; -import jsprit.core.problem.job.Delivery; -import jsprit.core.problem.job.Pickup; -import jsprit.core.problem.job.Service; -import jsprit.core.problem.job.Shipment; +import jsprit.core.problem.job.*; import jsprit.core.problem.solution.VehicleRoutingProblemSolution; import jsprit.core.problem.solution.route.VehicleRoute; import jsprit.core.problem.solution.route.activity.TimeWindow; @@ -304,7 +301,16 @@ public class VrpXMLReader{ } routes.add(routeBuilder.build()); } - VehicleRoutingProblemSolution solution = new VehicleRoutingProblemSolution(routes, cost); + VehicleRoutingProblemSolution solution = new VehicleRoutingProblemSolution(routes, cost); + List unassignedJobConfigs = solutionConfig.configurationsAt("unassignedJobs.job"); + for(HierarchicalConfiguration unassignedJobConfig : unassignedJobConfigs){ + String jobId = unassignedJobConfig.getString("[@id]"); + Job job = getShipment(jobId); + if(job == null) job = getService(jobId); + if(job == null) throw new IllegalStateException("cannot find unassignedJob with id " + jobId); + solution.getUnassignedJobs().add(job); + } + solutions.add(solution); } } diff --git a/jsprit-core/src/main/java/jsprit/core/problem/io/VrpXMLWriter.java b/jsprit-core/src/main/java/jsprit/core/problem/io/VrpXMLWriter.java index 93216615..e2cd8196 100644 --- a/jsprit-core/src/main/java/jsprit/core/problem/io/VrpXMLWriter.java +++ b/jsprit-core/src/main/java/jsprit/core/problem/io/VrpXMLWriter.java @@ -203,6 +203,11 @@ public class VrpXMLWriter { xmlConfig.setProperty(solutionPath + "(" + counter + ").routes.route(" + routeCounter + ").end", route.getEnd().getArrTime()); routeCounter++; } + int unassignedJobCounter = 0; + for(Job unassignedJob : solution.getUnassignedJobs()){ + xmlConfig.setProperty(solutionPath + "(" + counter + ").unassignedJobs.job(" + unassignedJobCounter + ")[@id]", unassignedJob.getId()); + unassignedJobCounter++; + } counter++; } } diff --git a/jsprit-core/src/main/resources/vrp_xml_schema.xsd b/jsprit-core/src/main/resources/vrp_xml_schema.xsd index 2eeefe9f..5161871b 100644 --- a/jsprit-core/src/main/resources/vrp_xml_schema.xsd +++ b/jsprit-core/src/main/resources/vrp_xml_schema.xsd @@ -281,7 +281,18 @@ - + + + + + + + + + + + +