#optimization #or-tools
Вопрос:
Согласно Google-ИЛИ doc: https://developers.google.com/optimization/reference/constraint_solver/routing/RoutingModel#AddDimension add dimension
это позволяет только установить верхнюю границу чего-либо.
Я пытаюсь установить нижнюю границу расстояния до транспортного средства на маршруте в задаче пикапа и доставки (https://developers.google.com/optimization/routing/pickup_delivery). Я пытался:
def negative_distance_callback (from_index, to_index):
"""
return the negative distance, use for minimization
"""
return -1 * distance_callback(from_index, to_index)
transit_neg_callback_index = routing.RegisterTransitCallback(negative_distance_callback)
dimension_name = 'Negative_Distance'
routing.AddDimension(
transit_neg_callback_index,
0, # no slack
-1000, # vehicle minimum travel distance
True, # start cumul to zero
dimension_name)
negative_distance_dimension = routing.GetDimensionOrDie(dimension_name)
negative_distance_dimension.SetGlobalSpanCostCoefficient(100)
Идея состоит в том, чтобы создать отрицательный обратный вызов на расстоянии и попытаться максимизировать его.
Однако я столкнулся с ошибкой: Check failed: min_capacity >= 0 (-1000 vs. 0)
Как я мог бы установить минимальное ограничение для проблемы PDP с Google-ИЛИ?
Большое спасибо
Ответ №1:
Найдите в списке рассылки. Это частый вопрос.
Короче говоря:
- установление жесткого предела-плохая идея, так как это быстро приведет к неразрешимой проблеме.
- лучшим решением является использование мягкой нижней границы переменной cumul в конце маршрута каждого транспортного средства.