我试图使用Pyomo和标准的Pythonmultiprocessing库并行地优化多个线性规划问题。当切换到使用多个处理时,我总是遇到错误:ValueError: Cannot load a SolverResults object with bad status: error。
在这个问题也有类似的报道,他们的问题似乎是解决者(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发布于 2022-01-09 10:51:31
解决整个问题的方法(但不是这个特定的错误)是使用来自glpk的这里解决器。
https://stackoverflow.com/questions/70632609
复制相似问题