微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Google-OR:如何使用维度设置最小约束

如何解决Google-OR:如何使用维度设置最小约束

根据 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,# 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 问题设置最小约束?

非常感谢

解决方法

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

简而言之:

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。