Google 用于 CVRP 的 OR-Tools,同时最小化全局跨度

Posted

技术标签:

【中文标题】Google 用于 CVRP 的 OR-Tools,同时最小化全局跨度【英文标题】:Google's OR-Tools for CVRP while minimizing global span 【发布时间】:2020-09-12 07:17:53 【问题描述】:

我想知道如何在 CVRP 上下文中最小化全局跨度(makespan)。我参考如下:

distance_dimension.SetGlobalSpanCostCoefficient(100)

作为一个非常简化的例子,我尝试用上面的 SetGlobalSpanCostCoefficient(100) 解决 CVRP 例子 (https://developers.google.com/optimization/routing/cvrp)。

但是,无论有没有SetGlobalSpanCostCoefficient(100),结果都没有不同。

我增加了车辆数量以显示差异,但增加的车辆仍然处于闲置状态。这不足以最小化全局跨度。我还尝试将较大的数字(如 100)增加到更大的数字,但解决方案仍然没有改变。

如何在最小化全局跨度的同时解决 CVRP?

谢谢。

【问题讨论】:

您确定这不是最佳解决方案吗? 【参考方案1】:

通过为全局跨度设置一个非空系数(默认),您将把它添加到求解器最小化的目标成本函数中,因此如果它成为主导因素,则它“已经”最小化(比较弧成本的总和)

注意示例 cvrp 不使用本地搜索...

    search_parameters = pywrapcp.DefaultRoutingSearchParameters()
    search_parameters.first_solution_strategy = (
        routing_enums_pb2.FirstSolutionStrategy.PATH_CHEAPEST_ARC)

所以你应该先尝试启用它。

例如

    search_parameters = pywrapcp.DefaultRoutingSearchParameters()
    search_parameters.first_solution_strategy = (
        routing_enums_pb2.FirstSolutionStrategy.PATH_CHEAPEST_ARC)
    search_parameters.local_search_metaheuristic = (
        routing_enums_pb2.LocalSearchMetaheuristic.GUIDED_LOCAL_SEARCH)
    search_parameters.time_limit.FromSeconds(30)
    search_parameters.log_search = True

【讨论】:

以上是关于Google 用于 CVRP 的 OR-Tools,同时最小化全局跨度的主要内容,如果未能解决你的问题,请参考以下文章

Google OR Tools CVRP - 车辆满足的需求超出了它的处理能力

Google OR-Tools(使用 SCIP 求解器) - 如何访问求解器找到的中间解决方案?

Google Or-Tools:UnsatisfiedLinkError

在 Eclipse 中使用 google or-tools

如何获取 Google OR-Tools 的进度日志?

google or-tools 无法获得最佳 LP 结果,如 gurobi 示例