从 pyomo 的 SolveryFactory 和 cplex 求解器解析方法中日志文件参数的文件路径
Parse file path to logfile argument in solve method from pyomo's SolveryFactory wtih cplex solver
我正在使用 pyomo 5.7.3 和 cplex 12.9。
我正在从 pyomo 的 SolverFactory 调用解决方法并使用下面的代码(工作正常)记录到文件 'model.log'
。
optimizer = SolverFactory('cplex')
results = optimizer.solve(
model,
warmstart = True,
tee = True,
logfile = "cplex.log",
)
但是如果我将日志文件更改为 './runs/cplex.log'
则会引发错误:
ValueError: Unallowed character (/) found in CPLEX log file path/name.
For portability reasons, only [a-zA-Z0-9 ~:.-_] are allowed.
有没有办法在不引发错误的情况下将文件夹“./runs”的路径解析到日志文件参数中?
此外,是否可以使用日志包中的记录器并将 cplex 日志输出到该记录器?
谢谢,
编辑:以一种天真的方式解决(代码如下)。有没有更好的方法?
initial_dir = os.getcwd()
os.chdir(run_dir) #changing to log dir in order to avoid providing unallowed characters to lgofile argument in solve method
results = optimizer.solve(
model,
warmstart = True,
tee = True,
logfile = f'{model_name}_cplex_log.log',
)
os.chdir(initial_dir) # returning to former directory
由于您使用的是pyomo 5.7.3,所以方式应该是:
import os
log_folder = os.path.join(".","runs")
from pyomo.common.tempfiles import TempfileManager
TempfileManager.tempdir = log_folder
如果文件夹不存在,请不要忘记创建。
PS:我在 Pyomo 中为求解器函数编写了一个小包装器,它会自动执行此操作,并且 post-如果你想 check it out,则在求解后处理所有变量],虽然日志文件夹在我的例子中被命名为“_log”,日志文件根据型号名称按文件夹分组,然后按日期和时间命名。
我正在使用 pyomo 5.7.3 和 cplex 12.9。
我正在从 pyomo 的 SolverFactory 调用解决方法并使用下面的代码(工作正常)记录到文件 'model.log'
。
optimizer = SolverFactory('cplex')
results = optimizer.solve(
model,
warmstart = True,
tee = True,
logfile = "cplex.log",
)
但是如果我将日志文件更改为 './runs/cplex.log'
则会引发错误:
ValueError: Unallowed character (/) found in CPLEX log file path/name. For portability reasons, only [a-zA-Z0-9 ~:.-_] are allowed.
有没有办法在不引发错误的情况下将文件夹“./runs”的路径解析到日志文件参数中?
此外,是否可以使用日志包中的记录器并将 cplex 日志输出到该记录器?
谢谢,
编辑:以一种天真的方式解决(代码如下)。有没有更好的方法?
initial_dir = os.getcwd()
os.chdir(run_dir) #changing to log dir in order to avoid providing unallowed characters to lgofile argument in solve method
results = optimizer.solve(
model,
warmstart = True,
tee = True,
logfile = f'{model_name}_cplex_log.log',
)
os.chdir(initial_dir) # returning to former directory
由于您使用的是pyomo 5.7.3,所以方式应该是:
import os
log_folder = os.path.join(".","runs")
from pyomo.common.tempfiles import TempfileManager
TempfileManager.tempdir = log_folder
如果文件夹不存在,请不要忘记创建。
PS:我在 Pyomo 中为求解器函数编写了一个小包装器,它会自动执行此操作,并且 post-如果你想 check it out,则在求解后处理所有变量],虽然日志文件夹在我的例子中被命名为“_log”,日志文件根据型号名称按文件夹分组,然后按日期和时间命名。