Google-OR: 如何设置带维度的最小约束

Google-OR: how to set the minimum constraint with dimension

根据 Google-OR 文档: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)

如何使用 Google-OR 设置 PDP 问题的最小约束?

非常感谢

搜索邮件列表。这是一个常见的问题。

简而言之:

  • 设置硬限制不是一个好主意,因为它很快会导致无法解决问题。
  • 更好的解决方案是在每辆车的路线末端对累积变量使用软下界。