首页 > 解决方案 > 如何获取 Google OR-Tools 的进度日志?

问题描述

我正在使用 Google 的 OR-Tools 来解决 VRPtw 问题并努力思考日志。
我正在向求解器提供一定数量的访问点和车辆。而且我不知道这需要多少时间,这意味着即使是时间的尺度。
我们有什么方法可以获取进度信息吗?
我知道有一个 SearchLog 类(https://developers.google.com/optimization/reference/constraint_solver/constraint_solveri/SearchLog)。但我不明白这可以给我我想要的信息。

标签: pythonor-tools

解决方案


首先,您必须分两步了解求解器的工作,首先它会尝试找到第一个解决方案,然后如果启用,它将尝试使用本地搜索来改进它。

要在每次找到解决方案时获取日志,您可以使用搜索参数 proto。

search_parameters.local_search_metaheuristic = (
   routing_enums_pb2.LocalSearchMetaheuristic.GUIDED_LOCAL_SEARCH)
search_parameters.log_search = True
solution = routing.SolveWithParameters(search_parameters)

参考:https ://github.com/google/or-tools/blob/a0a56698ba8fd07b7f84aee4fc45d891a8cd9828/ortools/constraint_solver/routing_parameters.proto#L414-L423

然后,如果您想要一个非常细粒度的跟踪,您可以使用路由参数 proto 启用跟踪日志

routing_parameters = pywrapcp.DefaultRoutingModelParameters()
routing_parameters.solver_parameters.trace_propagation = True
routing_parameters.solver_parameters.trace_search = True
routing = pywrapcp.RoutingModel(manager, routing_parameters)

参考:https://github.com/google/or-tools/blob/a0a56698ba8fd07b7f84aee4fc45d891a8cd9828/ortools/constraint_solver/routing_parameters.proto#L431-L433
https://github.com/google/or-tools/blob/a0a56698ba8fd07b7f84aee828d/5891d ortools/constraint_solver/solver_parameters.proto#L77-L81

也不要忘记 VRP 是 NP-hard....


推荐阅读