使用ortools时如何获取cpsolver的变量和约束
Posted
技术标签:
【中文标题】使用ortools时如何获取cpsolver的变量和约束【英文标题】:How to get the variable and constraint of a cpsolver when using ortools 【发布时间】:2021-01-16 07:26:53 【问题描述】:作为题目,我在使用ortools的时候,想序列化cpsolver、CpSolverSolutionCallback和cpmodel,实现多线程计算。但是,我不能直接序列化这些对象,我认为我只需要序列化它们的配置并在每个线程中重置配置,例如 cpmodel 中的所有约束和变量以及 cpsolver 中的参数。这就是问题,如何使用 ortools 获取所有这些值?有api什么的吗?我在 Google 上搜索时找不到它。
【问题讨论】:
哪种语言? 【参考方案1】:每种语言都在协议缓冲区文件之上实现了一个瘦包装器。
此文件描述为here
可以从每个 CpModel 类访问此模型。
现在您可以直接使用此原型分发工作。您需要查看 CpSolver 类以了解如何调用 c++ Solve 方法。
见蟒蛇solve method。
实现您的请求的方式。
-
正常创建模型。
提取底层协议缓冲区模型并将其用于并行/分发。
Solve 将返回一个 CpSolverResponse 对象。要在响应中获取变量的值,请调用
response.Value(var.Index())
,或存储相关变量的索引并在Value()
方法调用中使用。
【讨论】:
以上是关于使用ortools时如何获取cpsolver的变量和约束的主要内容,如果未能解决你的问题,请参考以下文章
Or-Tools CpSolver 获取最小和最大总和或绝对值
orTools 如何从 RoutingModel 获取状态?