Optaplanner Mixed VRP
Я использую Optaplanner VRP, взяв ссылку на https://github.com/ge0ffrey/optaplanner-mixedvrp-experiment Мои два жестких ограничения, похоже, не работают нормально
- Мое первое ограничение заключается в том, что транспортное средство не должно посещать больше указанного количества посещений (maxVisit). Ниже приведена реализация того же самого:
protected Constraint maxVisitsForVehicle(ConstraintFactory factory) {
return factory.from(Visit.class)
.filter(visit ->
visit.getVisitIndex() > visit.getVehicle().getMaxVisit())
.penalizeLong("maxVisitsForVehicle",
HardSoftLongScore.ONE_HARD,
visit -> visit.getVisitIndex() - visit.getVehicle().getMaxVisit());
}
- Второе ограничение заключается в том, что заказ может быть доставлен только в том случае, если он был получен ниже, это реализация того же самого:
protected Constraint pickupBeforeDelivery(ConstraintFactory factory) {
return factory.from(Visit.class)
.filter(visit -> visit.getVisitType() == VisitType.PICKUP &&
visit.getRide().getDeliveryVisit().getVisitIndex() != null &&
visit.getRide().getDeliveryVisit().getVehicle() == visit.getVehicle() &&
visit.getVisitIndex() > visit.getRide().getDeliveryVisit().getVisitIndex())
.penalizeLong("pickupBeforeDelivery",
HardSoftLongScore.ONE_HARD,
visit -> visit.getRide().getPickupVisit().getVisitIndex() - visit.getRide().getDeliveryVisit().getVisitIndex());
}
Оба эти ограничения работают в некоторых случаях, но не во всех случаях. Все ограничения решаются, но желаемых результатов все еще нет. Пожалуйста, помогите, где я делаю не так, неправильно ли я реализую ограничения или неправильно наказываю.