使用ortools时如何获取cpsolver的变量和约束

问题描述

作为题目,我在使用ortools的时候,想序列化cpsolver,cpsolverSolutionCallback,cpmodel,实现多线程计算。但是,我不能直接序列化这些对象,我认为我只需要序列化它们的配置并在每个线程中重置配置,例如cpmodel中的所有约束和变量以及cpsolver中的参数。这是问题,我怎样才能使用 ortools 获得所有这些值?有api之类的吗?我在 Google 上搜索时找不到。

解决方法

每种语言都在协议缓冲区文件之上实现了一个瘦包装器。

此文件描述here

这个模型可以从每个 CpModel 类访问。

现在您可以直接使用此 proto 分发工作。您将需要查看 CpSolver 类以了解如何调用 c++ Solve 方法。

见蟒蛇solve method

实现请求的方式。

  1. 正常创建模型。
  2. 提取底层协议缓冲区模型并将其用于并行/分发。
  3. Solve 将返回一个 CpSolverResponse 对象。要获取响应中变量的值,请调用 response.Value(var.Index()),或存储相关变量的索引并在 Value() 方法调用中使用它。