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 @@
+