pulpでsolverとしてCPLEXを指定する場合, 並列数はDefault設定では使用可能なthread数を全て使用する設定になっています.
並列数を自分で指定したい場合は, 以下のようにすれば良いです.
import pulp class MyCPLEX(pulp.CPLEX): def __init__(self, mpi=True, msg=True, timeLimit=None, epgap=None, logfilename=None, threads=None): super().__init__( mpi, msg, timeLimit, epgap, logfilename ) self.threads = threads def actualSolve(self, lp, callback=None): self.buildSolverModel(lp) # set threads if self.threads is not None: # ここを追加 self.solverModel.parameters.threads.set(self.threads) # ここを追加 self.callSolver(lp) solutionStatus = self.findSolutionValues(LookupError) for var in lp.variables(): var.modified = False for constraint in lp.constraints.values(): constraint.modified = False return solutionStatus
pulpのCPLEX solver クラスを継承して, threads
変数を追加しています.
そして, pulp/solvers.py:CPLEX class:actualSolve
を少し書き換えています.
実際に使用するときには, 自分のプログラムに上記のclassをコピペして,
cplex_solver = MyCPLEX(threads=3)
problem.solve(solver=cplex_solver)
と, 実行すれば良いです.