diff --git a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/AbstractInsertionCalculator.java b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/AbstractInsertionCalculator.java index 6f3d54a4..fc82d6ad 100644 --- a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/AbstractInsertionCalculator.java +++ b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/AbstractInsertionCalculator.java @@ -21,6 +21,7 @@ package com.graphhopper.jsprit.core.algorithm.recreate; import com.graphhopper.jsprit.core.problem.constraint.ConstraintManager; import com.graphhopper.jsprit.core.problem.constraint.HardActivityConstraint; import com.graphhopper.jsprit.core.problem.constraint.HardActivityConstraint.ConstraintsStatus; +import com.graphhopper.jsprit.core.problem.constraint.HardConstraint; import com.graphhopper.jsprit.core.problem.constraint.HardRouteConstraint; import com.graphhopper.jsprit.core.problem.misc.JobInsertionContext; import com.graphhopper.jsprit.core.problem.solution.route.activity.TourActivity; @@ -45,17 +46,17 @@ abstract class AbstractInsertionCalculator implements JobInsertionCostsCalculato return null; } - ConstraintsStatus fulfilled(JobInsertionContext iFacts, TourActivity prevAct, TourActivity newAct, TourActivity nextAct, double prevActDepTime, Collection failedActivityConstraints, ConstraintManager constraintManager) { + ConstraintsStatus fulfilled(JobInsertionContext iFacts, TourActivity prevAct, TourActivity newAct, TourActivity nextAct, double prevActDepTime, Collection failedActivityConstraints, ConstraintManager constraintManager) { ConstraintsStatus notFulfilled = null; - List failed = new ArrayList<>(); + List failed = new ArrayList<>(); for (HardActivityConstraint c : constraintManager.getCriticalHardActivityConstraints()) { ConstraintsStatus status = c.fulfilled(iFacts, prevAct, newAct, nextAct, prevActDepTime); if (status.equals(ConstraintsStatus.NOT_FULFILLED_BREAK)) { - failedActivityConstraints.add(c.getClass().getSimpleName()); + failedActivityConstraints.add(c); return status; } else { if (status.equals(ConstraintsStatus.NOT_FULFILLED)) { - failed.add(c.getClass().getSimpleName()); + failed.add(c); notFulfilled = status; } } @@ -68,11 +69,11 @@ abstract class AbstractInsertionCalculator implements JobInsertionCostsCalculato for (HardActivityConstraint c : constraintManager.getHighPrioHardActivityConstraints()) { ConstraintsStatus status = c.fulfilled(iFacts, prevAct, newAct, nextAct, prevActDepTime); if (status.equals(ConstraintsStatus.NOT_FULFILLED_BREAK)) { - failedActivityConstraints.add(c.getClass().getSimpleName()); + failedActivityConstraints.add(c); return status; } else { if (status.equals(ConstraintsStatus.NOT_FULFILLED)) { - failed.add(c.getClass().getSimpleName()); + failed.add(c); notFulfilled = status; } } @@ -85,7 +86,7 @@ abstract class AbstractInsertionCalculator implements JobInsertionCostsCalculato for (HardActivityConstraint constraint : constraintManager.getLowPrioHardActivityConstraints()) { ConstraintsStatus status = constraint.fulfilled(iFacts, prevAct, newAct, nextAct, prevActDepTime); if (status.equals(ConstraintsStatus.NOT_FULFILLED_BREAK) || status.equals(ConstraintsStatus.NOT_FULFILLED)) { - failedActivityConstraints.add(constraint.getClass().getSimpleName()); + failedActivityConstraints.add(constraint); return status; } } diff --git a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/ServiceInsertionCalculator.java b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/ServiceInsertionCalculator.java index 6007decb..1ed5a68b 100644 --- a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/ServiceInsertionCalculator.java +++ b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/ServiceInsertionCalculator.java @@ -20,6 +20,7 @@ package com.graphhopper.jsprit.core.algorithm.recreate; import com.graphhopper.jsprit.core.problem.JobActivityFactory; import com.graphhopper.jsprit.core.problem.constraint.ConstraintManager; import com.graphhopper.jsprit.core.problem.constraint.HardActivityConstraint.ConstraintsStatus; +import com.graphhopper.jsprit.core.problem.constraint.HardConstraint; import com.graphhopper.jsprit.core.problem.constraint.SoftActivityConstraint; import com.graphhopper.jsprit.core.problem.constraint.SoftRouteConstraint; import com.graphhopper.jsprit.core.problem.cost.VehicleRoutingActivityCosts; @@ -108,7 +109,7 @@ final class ServiceInsertionCalculator extends AbstractInsertionCalculator { InsertionData noInsertion = checkRouteContraints(insertionContext, constraintManager); if (noInsertion != null) return noInsertion; - Collection failedActivityConstraints = new ArrayList<>(); + Collection failedActivityConstraints = new ArrayList<>(); /* check soft constraints at route level @@ -167,7 +168,9 @@ final class ServiceInsertionCalculator extends AbstractInsertionCalculator { } if(insertionIndex == InsertionData.NO_INDEX) { InsertionData emptyInsertionData = new InsertionData.NoInsertionFound(); - emptyInsertionData.getFailedConstraintNames().addAll(failedActivityConstraints); + for (HardConstraint c : failedActivityConstraints) { + emptyInsertionData.addFailedConstrainName(c.getClass().getSimpleName()); + } return emptyInsertionData; } InsertionData insertionData = new InsertionData(bestCost, InsertionData.NO_INDEX, insertionIndex, newVehicle, newDriver); diff --git a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/ShipmentInsertionCalculator.java b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/ShipmentInsertionCalculator.java index 9eb5967c..d7b3eecd 100644 --- a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/ShipmentInsertionCalculator.java +++ b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/ShipmentInsertionCalculator.java @@ -20,6 +20,7 @@ package com.graphhopper.jsprit.core.algorithm.recreate; import com.graphhopper.jsprit.core.problem.JobActivityFactory; import com.graphhopper.jsprit.core.problem.constraint.ConstraintManager; import com.graphhopper.jsprit.core.problem.constraint.HardActivityConstraint.ConstraintsStatus; +import com.graphhopper.jsprit.core.problem.constraint.HardConstraint; import com.graphhopper.jsprit.core.problem.constraint.SoftActivityConstraint; import com.graphhopper.jsprit.core.problem.constraint.SoftRouteConstraint; import com.graphhopper.jsprit.core.problem.cost.VehicleRoutingActivityCosts; @@ -128,7 +129,7 @@ final class ShipmentInsertionCalculator extends AbstractInsertionCalculator { //pickupShipmentLoop List activities = currentRoute.getTourActivities().getActivities(); - List failedActivityConstraints = new ArrayList<>(); + List failedActivityConstraints = new ArrayList<>(); while (!tourEnd) { TourActivity nextAct; if (i < activities.size()) { @@ -228,7 +229,9 @@ final class ShipmentInsertionCalculator extends AbstractInsertionCalculator { } if (pickupInsertionIndex == InsertionData.NO_INDEX) { InsertionData emptyInsertionData = new InsertionData.NoInsertionFound(); - emptyInsertionData.getFailedConstraintNames().addAll(failedActivityConstraints); + for (HardConstraint failed : failedActivityConstraints) { + emptyInsertionData.addFailedConstrainName(failed.getClass().getSimpleName()); + } return emptyInsertionData; } InsertionData insertionData = new InsertionData(bestCost, pickupInsertionIndex, deliveryInsertionIndex, newVehicle, newDriver); diff --git a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/ShipmentInsertionCalculatorFlex.java b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/ShipmentInsertionCalculatorFlex.java index b490b246..8862481a 100644 --- a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/ShipmentInsertionCalculatorFlex.java +++ b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/algorithm/recreate/ShipmentInsertionCalculatorFlex.java @@ -20,6 +20,7 @@ package com.graphhopper.jsprit.core.algorithm.recreate; import com.graphhopper.jsprit.core.problem.JobActivityFactory; import com.graphhopper.jsprit.core.problem.constraint.ConstraintManager; import com.graphhopper.jsprit.core.problem.constraint.HardActivityConstraint.ConstraintsStatus; +import com.graphhopper.jsprit.core.problem.constraint.HardConstraint; import com.graphhopper.jsprit.core.problem.constraint.SoftActivityConstraint; import com.graphhopper.jsprit.core.problem.constraint.SoftRouteConstraint; import com.graphhopper.jsprit.core.problem.cost.VehicleRoutingActivityCosts; @@ -146,7 +147,7 @@ public final class ShipmentInsertionCalculatorFlex extends AbstractInsertionCalc //pickupShipmentLoop List activities = currentRoute.getTourActivities().getActivities(); - List failedActivityConstraints = new ArrayList<>(); + List failedActivityConstraints = new ArrayList<>(); while (!tourEnd) { TourActivity nextAct; if (i < activities.size()) { @@ -252,7 +253,9 @@ public final class ShipmentInsertionCalculatorFlex extends AbstractInsertionCalc if (pickupInsertionIndex == InsertionData.NO_INDEX) { InsertionData emptyInsertionData = new InsertionData.NoInsertionFound(); - emptyInsertionData.getFailedConstraintNames().addAll(failedActivityConstraints); + for (HardConstraint failed : failedActivityConstraints) { + emptyInsertionData.addFailedConstrainName(failed.getClass().getSimpleName()); + } return emptyInsertionData; } InsertionData insertionData = new InsertionData(bestCost, pickupInsertionIndex, deliveryInsertionIndex, newVehicle, newDriver);