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 0429873a..d47b9e1f 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 @@ -441,10 +441,15 @@ public class VrpXMLReader{ String penalty = typeConfig.getString("[@type]"); if(penalty != null){ if(penalty.equals("penalty")){ - type = new PenaltyVehicleType(type); + String penaltyFactor = typeConfig.getString("[@penaltyFactor]"); + if(penaltyFactor != null){ + type = new PenaltyVehicleType(type,Double.parseDouble(penaltyFactor)); + } + else type = new PenaltyVehicleType(type); id = id + "_penalty"; } } + types.put(id, type); } 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 3416f15b..d4ac23e2 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 @@ -248,6 +248,7 @@ public class VrpXMLWriter { for(VehicleType type : vrp.getTypes()){ if(type instanceof PenaltyVehicleType){ xmlConfig.setProperty(typePathString + "("+typeCounter+")[@type]", "penalty"); + xmlConfig.setProperty(typePathString + "("+typeCounter+")[@penaltyFactor]", ((PenaltyVehicleType)type).getPenaltyFactor()); } xmlConfig.setProperty(typePathString + "("+typeCounter+").id", type.getTypeId()); xmlConfig.setProperty(typePathString + "("+typeCounter+").capacity", type.getCapacity()); diff --git a/jsprit-core/src/main/resources/vrp_xml_schema.xsd b/jsprit-core/src/main/resources/vrp_xml_schema.xsd index f631f2f4..0b64fe56 100644 --- a/jsprit-core/src/main/resources/vrp_xml_schema.xsd +++ b/jsprit-core/src/main/resources/vrp_xml_schema.xsd @@ -82,6 +82,7 @@ +