Google的CVRP或工具,同时将全球范围最小化

问题描述

我想知道如何在CVRP上下文中最小化全局范围(makespan)。我在下面引用:

distance_dimension.SetGlobalSpanCostCoefficient(100)

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

但是,无论是否设置 SetGlobalSpanCostCoefficient(100),结果都不会不同。

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

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

谢谢。

解决方法

通过为全局范围设置一个非空系数(默认值),可以将其添加到目标成本函数中,该函数由求解器最小化,因此,如果它成为主导因素,则“已经”最小化(与电弧成本的总和)

请注意示例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