并行化 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 求解器。