Я оптимизирую маршруты доставки бетона, где грузовики должны:
- Загружать на центральном заводе (по одному грузовику за раз, продолжительность загрузки 20 минут)
- Доставлять клиентам в определенные временные интервалы
- Вернуться для перезагрузки и повторить
Ограничение: Погрузочная площадка принимает только ОДИН грузовик одновременно – перекрытия не допускаются.
Текущая реализация
У меня есть ограничение, которое предотвращает перекрытие погрузки:Потенциальное решение — связанные переменные?Код: Выделить всё
protected Constraint centralOverLap(ConstraintFactory factory) { return factory.forEach(Visit.class) .filter(v -> v.getVehicle() != null) .filter(v -> v.getArrivalTime() != null) .join(Visit.class, Joiners.equal(Visit::getCentral), Joiners.overlapping(Visit::getTimeStartLoading, Visit::getDepotOutTime), Joiners.lessThan(Visit::getId, Visit::getId) ) .penalize(HardSoftLongScore.ONE_HARD) .asConstraint("Site Central loading overlap"); }
В настоящее время каждое посещение имеет переменную планирования previousVisit на основе назначенного Транспортного средства (создание цепочки маршрутов для каждого транспортного средства).
Имеет ли смысл добавить вторую связанную переменную — previousVisitAtCentral на основе Центральный завод — для явного моделирования последовательности загрузки?
Вопрос
Является ли подход двойной цепочки (одна цепь на транспортное средство, одна цепь на центральный) допустимой стратегией моделирования в Timefold/OptaPlanner? - Если нет, то какой рекомендуемый способ последовательного моделирования использование ресурсов (загрузочный отсек), когда несколько посещений имеют одинаковые временные интервалы?
Подробнее здесь: https://stackoverflow.com/questions/798 ... n-timefold