如何抑制JuMP打印“Set parameter Method to value 2”类提示信息?
如何屏蔽JuMP配置求解器参数时的自动终端提示
较新版本JuMP完成求解器参数配置后,终端会自动打印参数设置相关提示信息,示例输出如下:
Set parameter Method to value 2 Set parameter Crossover to value 1 Set parameter Method to value 1 Set parameter Crossover to value 0 Set parameter Method to value 1 Set parameter Method to value 1
可通过以下三种方式屏蔽这类输出:
- 开启模型静默模式
调用JuMP自带的set_silent函数给模型开启静默状态,会屏蔽求解器所有非错误类的控制台输出,包括参数设置提示,示例代码:using JuMP, Gurobi # 替换为你实际使用的求解器 model = Model(Gurobi.Optimizer) set_silent(model) # 后续所有参数配置、求解操作都不会再打印参数设置提示 - 配置求解器自带的日志控制参数
如果不想完全关闭求解过程的日志,只想屏蔽参数设置阶段的提示,可以针对所用求解器设置对应日志参数:- Gurobi求解器:将
OutputFlag参数设为0可完全关闭控制台输出,若要保留求解日志,可先将LogToConsole设为0,待所有参数配置完成后再改回1 - HiGHS、Clp、Cbc等开源求解器:将
output_flag/LogLevel参数设为0即可屏蔽低优先级的参数配置提示
示例代码:
using JuMP, HiGHS model = Model(HiGHS.Optimizer) # 先关日志配参数 set_optimizer_attribute(model, "output_flag", false) set_optimizer_attribute(model, "Method", 1) set_optimizer_attribute(model, "Crossover", 0) # 参数配完再按需打开日志 set_optimizer_attribute(model, "output_flag", true) - Gurobi求解器:将
- 临时重定向标准输出
如果上述求解器参数配置不生效,可以把参数配置的代码段包裹在Julia标准库的redirect_stdout块中,将这段时间的控制台输出直接丢弃,不影响其他代码段的正常打印,示例代码:redirect_stdout(devnull) do # 所有求解器参数配置代码放在这个块内 set_optimizer_attribute(model, "Method", 2) set_optimizer_attribute(model, "Crossover", 1) end # 块外代码的输出不受影响
内容的提问来源于stack exchange,提问作者Hongyu
相关产品推荐
相关产品推荐

