python - 如何获取 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)
然后,如果您想要一个非常细粒度的跟踪,您可以使用路由参数 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....
推荐阅读
- azure - PR 管道与 Azure Devops 中的 CI 管道有何不同?
- python - 如何对两个列表进行排序并绘制它们?
- r - 评估 ... 当其他函数参数默认为 NULL
- python - ProgrammingError: (1064, ..) for the right syntax to use near '))' at line 1")
- c# - 为什么我的代码认为一个值是 Microsoft.IdentityModel.Json.Linq.JObject 而实际上应该是 Newtonsoft.Json.Linq.JObject?
- node.js - Powershell Compress-Archive 未正确发布 Node.js AWS lambda 层
- python - 查找发送帖子请求的 url
- c# - DataGridViewImageColumn 背景为黑色
- rust - 在 Rust 的同一个 crate 文件中从另一个模块调用一个模块的函数
- swift - 如何在 Swift 中向 URL 目录添加附加值?