运行多个Google OR Solver(CBC)实例导致找不到解决方案(C ++)

时间:2020-05-18 10:15:17

标签: or-tools

我正在使用Google OR工具(CBC)解决C ++中的混合整数编程问题。 我正在遵循Google OR网站https://developers.google.com/optimization/mip/integer_opt

中显示的示例代码

唯一的区别是我有一堆试图同时调用求解器(CBC)的线程(pthreads)/线程池。所有线程都有线程本地数据,因此正在同时对其本地数据调用求解器。这也意味着我要确保约束,MPSolver等都是线程局部的(它们都不是全局的)

问题: 如果“ n”个线程同时调用求解器,我将看到该求解器针对所有线程本地数据集报告“未找到解决方案”。但是,如果整个过程是顺序的,即通过将线程数限制为1来依次解决不同的数据集,那么我将为每个数据集获得完美的最佳解决方案。 现在,只有在设置了时间限制后才会发生这种情况。使用apisolver.SetTimeLimit()将时间限制设置为5s。我无法避免设置时间限制,因为在某些情况下,可能需要大量时间才能获得最佳解决方案。不同的线程可以具有不同的数据集,这些数据集的大小(约束数量和变量数量)可能会有所不同。 'n'从2到32不等

注意: 只是为了澄清一下,我试图使用“ n”个线程同时调用“ n”个求解器调用(每个线程调用它自己的solver.solve())。

我不是在'n'个线程中分配单个求解器的工作。

0 个答案:

没有答案