使用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 获取状态?

如何在 ortools 中更改约束参数的类型

Python中如何使用ortools求解二次规划?

线性规划 - Google ortools - 不正确的决策变量最终值

ortools:如何使用搜索策略sweep和best insert?