Optaplanner Mixed VRP

Я использую Optaplanner VRP, взяв ссылку на https://github.com/ge0ffrey/optaplanner-mixedvrp-experiment Мои два жестких ограничения, похоже, не работают нормально

  1. Мое первое ограничение заключается в том, что транспортное средство не должно посещать больше указанного количества посещений (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());
    }
  1. Второе ограничение заключается в том, что заказ может быть доставлен только в том случае, если он был получен ниже, это реализация того же самого:
    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());
    }

Оба эти ограничения работают в некоторых случаях, но не во всех случаях. Все ограничения решаются, но желаемых результатов все еще нет. Пожалуйста, помогите, где я делаю не так, неправильно ли я реализую ограничения или неправильно наказываю.

0 ответов

Другие вопросы по тегам