为什么CBC找不到Pyomo热启动文件?

问题描述 投票:0回答:1

我正在尝试将 CBC 求解器 2.10.3 与 Pyomo 5.7.3 的热启动/mipstart 选项一起使用。 在我看来,CBC 需要热启动解决方案文件的相对路径,而 Pyomo 提供绝对路径。 是对的吗?如果是这样,是否有任何可行的替代方法可以为 CBC 提供热启动解决方案? 非常感谢你,斯特凡

详情:

首先,我存储启发式的热启动解决方案:

for assignment in heuristic_solution.assignments:
   model.xvars[assignment] = assignment.count

然后我让 Pyomo 调用 CBC 求解器:

solver_factory.solve(model, warmstart=True)

Pyomo 成功创建热启动文件(在 pyomo/solvers/plugins/solvers/CBCplugin.py 第 267 行):

self._warm_start_file_name = TempfileManager.create_tempfile(suffix = '.cbc.soln')

Pyomo 然后通过创建命令行将此文件名交给 CBC:

C:\<...>\cbc.exe -import C:\<...>\problem.lp -mipstart C:\<...>\warmstart.cbc.soln -solve

但是,_warm_start_file_name 是绝对路径,而 CBC 仅接受相对路径。因此,CBC 不会读取热启动解决方案。

pyomo
1个回答
0
投票

我正在使用:CBC Solver 2.10.5、Pyomo 6.7.1,在 Ubuntu 24.04 机器上

嘿,我遇到了类似的问题,我无法阅读我的初始解决方案 - 我不确定这是否是由于您发布的相同问题造成的,但它给了我一个似乎有效的想法。解决方法是使用虚拟的 Warmstart_file 参数调用求解器,如下所示:

solver = pyo.SolverFactory("cbc")
solver.solve(model, tee=True, warmstart=True, warmstart_file='./temp_initial_sol.soln')

至少,这似乎平息了 CBC 发出的关于找不到初始 mip 解决方案的警告。

您也不需要清理临时热启动文件,pyomo 会自动创建并删除它。

© www.soinside.com 2019 - 2024. All rights reserved.