Я работал с решателем маршрутизации OR-Tools в Python в течение нескольких месяцев, и я до сих пор не понимаю, как реализовать настраиваемые мягкие ограничения или даже если это возможно в решателе маршрутизации.
Я знаю, что следующие методы добавляют штрафы к совокупным значениям:
SetCumulVarSoftUpperBound(self, index: int64, upper_bound: int64, coefficient: int64)
SetCumulVarSoftLowerBound(self, index: int64, upper_bound: int64, coefficient: int64)
Одно из ограничений, которые я не могу реализовать, заключается в следующем:
- Я хочу штрафовать расстояние / время в пустых транспортных средств. Например, в сценарии погрузки и доставки, если транспортное средство выполняет доставку и становится пустым, я хочу оштрафовать на расстояние, пройденное пустым, пока не достигнете узла получения (следующего узла) или не завершите маршрут.
С помощью описанных выше методов я могу штрафовать фиксированное значение только при превышении границы, но я хотел бы штрафовать с помощью расстояния или времени для перехода к следующему узлу.
Между тем, есть ли способ реализовать пользовательские мягкие ограничения с явным значением штрафа, учитывающим состояние найденного решения (например, следующий узел и совокупное количество измерений)?