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

问题描述

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

解决方法

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

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

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

ref: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)

ref:https://github.com/google/or-tools/blob/a0a56698ba8fd07b7f84aee4fc45d891a8cd9828/ortools/constraint_solver/routing_parameters.proto#L431-L433
https://github.com/google/or-tools/blob/a0a56698ba8fd07b7f84aee4fc45d891a8cd9828/ortools/constraint_solver/solver_parameters.proto#L77-L81

也不要忘记VRP是NP硬....