diff --git a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/problem/Capacity.java b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/problem/Capacity.java index 0017d21a..2e278cba 100644 --- a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/problem/Capacity.java +++ b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/problem/Capacity.java @@ -309,4 +309,12 @@ public class Capacity { public int hashCode() { return Arrays.hashCode(dimensions); } + + public Capacity makeValid(Capacity capacityLimits) { + Capacity.Builder validCapacityBuilder = Capacity.Builder.newInstance(); + for (int i = 0; i < Math.max(this.getNuOfDimensions(), capacityLimits.getNuOfDimensions()); i++) { + validCapacityBuilder.addDimension(i, Math.max(0, Math.min(this.get(i), capacityLimits.get(i)))); + } + return validCapacityBuilder.build(); + } } diff --git a/jsprit-core/src/test/java/com/graphhopper/jsprit/core/problem/CapacityTest.java b/jsprit-core/src/test/java/com/graphhopper/jsprit/core/problem/CapacityTest.java index f8e5f089..0b209e70 100644 --- a/jsprit-core/src/test/java/com/graphhopper/jsprit/core/problem/CapacityTest.java +++ b/jsprit-core/src/test/java/com/graphhopper/jsprit/core/problem/CapacityTest.java @@ -383,4 +383,27 @@ public class CapacityTest { Capacity cap2 = Capacity.Builder.newInstance().addDimension(0,10).addDimension(2, 1000).addDimension(1,100).build(); Assert.assertTrue(cap1.equals(cap2)); } + + @Test + public void makeValid() { + final Capacity limits = Capacity.Builder.newInstance() + .addDimension(0, 10) + .addDimension(0, 20) + .addDimension(0, 7) + .addDimension(0, 5).build(); + + final Capacity notValidCapacity = Capacity.Builder.newInstance() + .addDimension(0, 9) + .addDimension(0, 18) + .addDimension(0, 15) + .addDimension(0, -5).build(); + + final Capacity validCapacity = Capacity.Builder.newInstance() + .addDimension(0, 9) + .addDimension(0, 18) + .addDimension(0, 7) + .addDimension(0, 0).build(); + + assertEquals(validCapacity, notValidCapacity.makeValid(limits)); + } }