首页 > 解决方案 > 使用 Pyomo 时不能使用 Cplex 作为求解器

问题描述

在我使用 Glpk 解决抽象模型之前,但由于 Glpk 可能比 Cplex 慢,我转向 Cplex。但是在我安装了 Cplex 并将其用作求解器后,我发现 Cplex 无法打开 Pyomo 创建的日志文件:

CPLEX> CPLEX Error  1422: Could not open file 'C:\Users\???\AppData\Local\Temp\tmp6u0194_4.cplex.log' for writing.
Could not open logfile -- please try another name.
Name of new logfile ('*' to close present file): Logfile 'read' open.
CPLEX> No problem exists.
CPLEX> No problem exists.
CPLEX> No problem exists.
CPLEX> Complete!

以上是我从 tee=true 得到的

路径包含中文字母,所以我不确定它是否重要。如果是这样,我可以更改 Pyomo 创建的日志文件的默认路径吗?

谢谢,

标签: cplexpyomo

解决方案


这里的问题是 Pyomo 正在将*.lpCPLEX 输入文件写入路径名中包含非字母数字字符的位置。CPLEX 调用因路径名而失败,产生报告的错误消息。

要更正此问题,必须设置不同的临时目录。SolverFactory('cplex').solve(model)一种方法是在调用之前执行以下操作:

import pyutilib.services
pyutilib.services.TempfileManager.tempdir = 'C:\user_writable_path'

这类似于https://github.com/Pyomo/pyomo/pull/485中解决的问题。


推荐阅读