并行化 Pyomo 优化时出现“SolverResults 错误”
`SolverResults Error` When Parallelising Pyomo Optimisations
我正在尝试使用 Pyomo
和标准 Python multiprocessing
库并行优化多个线性规划问题。切换到使用多处理时,我将 运行 保留为错误:ValueError: Cannot load a SolverResults object with bad status: error
.
在 this question 中报告了类似的问题,他们的问题似乎是求解器(n.b。他们使用 cbc 而我使用 cplex)超时并且无法正常退出.不过,这似乎不是我的错误的问题。一种猜测是 cplex 求解器正试图写入一个临时文件,该文件随后被并行优化覆盖。
如果能帮助修复此错误,我们将不胜感激!以下代码应该重现错误。
import time
import multiprocessing
import pyomo.environ as pyo
from pyomo.opt import SolverFactory
def run_model(n_runs=50):
for _ in range(n_runs):
opt = SolverFactory(solver_name, executable=solver_executable)
model = pyo.ConcreteModel()
model.x = pyo.Var([1,2], domain=pyo.NonNegativeReals)
model.OBJ = pyo.Objective(expr = 2*model.x[1] + 3*model.x[2])
model.Constraint1 = pyo.Constraint(expr = 3*model.x[1] + 4*model.x[2] >= 1)
opt.solve(model)
time.sleep(0.1)
return
solver_name = 'cplex'
solver_executable = 'C:/Program Files/IBM/ILOG/CPLEX_Studio201/cplex/bin/x64_win64/cplex'
if __name__ == '__main__':
process_list = []
for _ in range(10):
p = multiprocessing.Process(target=run_model)
p.start()
process_list.append(p)
for process in process_list:
process.join()
Process Process-8:
Traceback (most recent call last):
File "C:\Users\User\anaconda3\envs\env\lib\multiprocessing\process.py", line 315, in _bootstrap
self.run()
File "C:\Users\User\anaconda3\envs\env\lib\multiprocessing\process.py", line 108, in run
self._target(*self._args, **self._kwargs)
File "C:\Users\User\Desktop\library_dir\scripts\multiprocessing_test.py", line 15, in run_model
opt.solve(model)
File "C:\Users\User\anaconda3\envs\env\lib\site-packages\pyomo\opt\base\solvers.py", line 626, in solve
_model.solutions.load_from(
File "C:\Users\User\anaconda3\envs\env\lib\site-packages\pyomo\core\base\PyomoModel.py", line 224, in load_from
raise ValueError("Cannot load a SolverResults object "
ValueError: Cannot load a SolverResults object with bad status: error
解决整个问题(但不是这个特定错误)的方法是使用 here 中的 glpk
求解器。
我正在尝试使用 Pyomo
和标准 Python multiprocessing
库并行优化多个线性规划问题。切换到使用多处理时,我将 运行 保留为错误:ValueError: Cannot load a SolverResults object with bad status: error
.
在 this question 中报告了类似的问题,他们的问题似乎是求解器(n.b。他们使用 cbc 而我使用 cplex)超时并且无法正常退出.不过,这似乎不是我的错误的问题。一种猜测是 cplex 求解器正试图写入一个临时文件,该文件随后被并行优化覆盖。
如果能帮助修复此错误,我们将不胜感激!以下代码应该重现错误。
import time
import multiprocessing
import pyomo.environ as pyo
from pyomo.opt import SolverFactory
def run_model(n_runs=50):
for _ in range(n_runs):
opt = SolverFactory(solver_name, executable=solver_executable)
model = pyo.ConcreteModel()
model.x = pyo.Var([1,2], domain=pyo.NonNegativeReals)
model.OBJ = pyo.Objective(expr = 2*model.x[1] + 3*model.x[2])
model.Constraint1 = pyo.Constraint(expr = 3*model.x[1] + 4*model.x[2] >= 1)
opt.solve(model)
time.sleep(0.1)
return
solver_name = 'cplex'
solver_executable = 'C:/Program Files/IBM/ILOG/CPLEX_Studio201/cplex/bin/x64_win64/cplex'
if __name__ == '__main__':
process_list = []
for _ in range(10):
p = multiprocessing.Process(target=run_model)
p.start()
process_list.append(p)
for process in process_list:
process.join()
Process Process-8:
Traceback (most recent call last):
File "C:\Users\User\anaconda3\envs\env\lib\multiprocessing\process.py", line 315, in _bootstrap
self.run()
File "C:\Users\User\anaconda3\envs\env\lib\multiprocessing\process.py", line 108, in run
self._target(*self._args, **self._kwargs)
File "C:\Users\User\Desktop\library_dir\scripts\multiprocessing_test.py", line 15, in run_model
opt.solve(model)
File "C:\Users\User\anaconda3\envs\env\lib\site-packages\pyomo\opt\base\solvers.py", line 626, in solve
_model.solutions.load_from(
File "C:\Users\User\anaconda3\envs\env\lib\site-packages\pyomo\core\base\PyomoModel.py", line 224, in load_from
raise ValueError("Cannot load a SolverResults object "
ValueError: Cannot load a SolverResults object with bad status: error
解决整个问题(但不是这个特定错误)的方法是使用 here 中的 glpk
求解器。