python - 写入 COIN-OR CBC 日志文件

标签 python python-2.7 mathematical-optimization pulp coin-or-cbc

我正在使用 COIN-OR 的 CBC 求解器来解决一些数值优化问题。我正在通过 PuLP 在 Python 中构建优化问题。

我注意到像 GUROBI 和 CPLEX 这样的求解器会创建日志文件,但我似乎无法弄清楚如何让 CBC 创建日志文件(而不是将优化器的进度打印到屏幕上)。

有人知道 CBC 中设置日志文件的选项吗?将所有 stdout 重定向到一个文件对我来说不起作用,因为我正在并行解决一堆问题并希望将它们的日志文件分开。

这是我如何调用求解器的示例。这很好用,并将进度打印到终端。

prob.solve(pulp.COIN_CMD(msg=1, options=['DivingVectorlength on','DivingSome on']))

以下是我认为解决方案的结构(尽管显然 LogFileName 不是有效的 CBC 选项)。

prob.solve(pulp.COIN_CMD(msg=1, options=['DivingVectorlength on', 'DivingSome on', 'LogFileName stats.log']))

如有任何帮助,我们将不胜感激。几个小时以来,我一直在浏览互联网、文档和 CBC 互动 session ,试图弄清楚这一点。

最佳答案

重用@Mike 的回答,PuLP(自 2.2 起)现在可以通过将 logPath 参数与要写入的文件路径一起传递来将日志写入文件。

所以你现在可以:

prob.solve(pulp.COIN_CMD(msg=1, logPath="stats.log", options=['DivingVectorlength on', 'DivingSome on']))

唯一需要注意的是您不能再“在屏幕上”看到它,因为它会将输出重定向到文件。您不需要提供 msg=1,在这种情况下只需提供 logPath

logPath 参数在多个求解器中是一致的(在 PuLP >= 2.2 中):PULP_CBC_CMD、COIN_CMD、PULP_COIN_CMD、GUROBI、CPLEX、CPLEX_CMD、GUROBI_CMD。

关于python - 写入 COIN-OR CBC 日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26642029/

相关文章:

python - 如何减少 Python selenium Pyperclip.paste 执行时间

Python - 只能连接列表而不是 float 列表

Python 函数返回 None。为什么?

optimization - SOCP : minimize sum of euclidean norms

python - 稀疏向量中的欧几里德距离与余弦距离 - 欧几里得如何表现更好?

c# - .NET/C# 的线性编程库

python - 如何处理 scikit learn 模型中基数的变化

python - 如何使用变形网格扭曲图像

Python Pandas 根据索引值创建列

android - Buildozer 执行最后一条命令失败