我们使用Java接口来访问指示器约束。考虑到二进制变量的数量很大,问题的解决阶段通常需要几个小时才能运行。
proto接口使用MPModelRequest,其中包含模型和SolverType,然后传递给静态方法MPSolver.solveWithProto(mpModelRequest)。
不能为请求指定线程数,而且solveWithProto方法是静态的,因此我们想知道实例化MPSolver和设置线程数是否真的会产生预期的效果。
原始代码:1线程
final MPModelRequest mpModelRequest = MPModelRequest.newBuilder()
.setEnableInternalSolverOutput(true)
.setSolverType(MPModelRequest.SolverType.SCIP_MIXED_INTEGER_PROGRAMMING)
.setModel(model)
.build();
MPSolutionResponse response = MPSolver.solveWithProto(mpModelRequest); 创建一个MPSolver :即使方法是静态的,它会使用多个线程吗?
MPSolver mpSolver = MPSolver.createSolver(MPModelRequest.SolverType.SCIP_MIXED_INTEGER_PROGRAMMING.toString());
mpSolver.setNumThreads(8);
MPSolutionResponse response = mpSolver.solveWithProto(mpModelRequest); 发布于 2022-01-11 13:38:15
SCIP并行被破坏和禁用。总之,这只会带来很少的加速。
如果您的问题是唯一的积分,您可以使用CP-SAT后端。它将受益于8+更多的线程。
https://stackoverflow.com/questions/70666765
复制相似问题