如何获取 Google OR-Tools 的进度日志?
Posted
技术标签:
【中文标题】如何获取 Google OR-Tools 的进度日志?【英文标题】:How can I get progress log on Google OR-Tools? 【发布时间】:2020-08-26 14:39:45 【问题描述】:我正在使用 Google 的 OR-Tools 来解决 VRPtw 问题,并且在思考日志方面遇到了困难。 我正在向求解器提供一定数量的访问点和车辆。而且我不知道这需要多少时间,这意味着即使是时间的尺度。 我们有什么方法可以获取进度信息吗? 我知道有一个 SearchLog 类(https://developers.google.com/optimization/reference/constraint_solver/constraint_solveri/SearchLog)。但我不明白这能给我我想要的信息。
【问题讨论】:
请添加您使用的语言或工具... 感谢您的回复。我正在使用 Python。 【参考方案1】:首先,您必须分两步了解求解器的工作,首先它会尝试找到第一个解决方案,然后如果启用,它将尝试使用本地搜索来改进它。
要在每次找到解决方案时获取日志,您可以使用搜索参数 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/a0a56698ba8fd07b7f84aee4fc45d891a8cd9828/ortools/constraint_solver/solver_parameters.proto#L77-L81
别忘了 VRP 是 NP 难的......
【讨论】:
感谢 Mizux。现在,我看到了前进的日志!以上是关于如何获取 Google OR-Tools 的进度日志?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 google or-tools vrptw 中设置时间窗口?
如何在 AWS Lambda 上安装 Google or-tools?
如何使用 or-tools 和 google-distance 矩阵创建车辆路线优化问题,同时仅取消结束位置?