【问题标题】:Cplex Python how to avoid printing the outputCplex Python如何避免打印输出
【发布时间】:2013-12-20 08:57:40
【问题描述】:

设置目标函数和约束后,我使用

prob.solve()
print prob.solution.get_objective_value()

其实我只是想打印目标值,但是显示了很多cplex的信息,

Tried aggregator 1 time.
LP Presolve eliminated 5 rows and 1 columns.
All rows and columns eliminated.
Presolve time = -0.00 sec. (0.00 ticks)
0.5

我只想显示最后一行0.5,如何避免Cplex打印其他信息?先感谢您。

【问题讨论】:

    标签: python logging mathematical-optimization linear-programming cplex


    【解决方案1】:

    cplex 指定 3 个输出流:日志、错误、警告和结果。您可以使用命令禁用输出。 set_xxx_stream(无)。在您的示例中,

    prob.set_log_stream(None)
    prob.set_error_stream(None)
    prob.set_warning_stream(None)
    prob.set_results_stream(None)
    

    将禁用所有输出。您还可以指定输出文件,而不是 None。还有几个 parameters 可以设置来控制 cplex 输出的详细程度,但这是防止 cplex 打印任何内容的最佳方法。

    【讨论】:

      【解决方案2】:

      您可以使用mip.display 参数调整详细程度:

      # where c is a Cplex object
      c.parameters.mip.display.set(0)
      

      请参阅here 了解更多信息。

      【讨论】:

      • 谢谢,但它实际上不起作用,我看到了链接,它是阻止混合整数问题的消息,我试图找到线性规划问题的消息,但失败了。似乎 cplex.setout(null) 将适用于 C++ 和 Java,但对于 python 没有这样的命令......对此感到难过
      【解决方案3】:

      试试这个:

       ans = prob.solution.get_objective_value()
       print ans.split('\n')[-1]
      

      由于 Cplex 是商业的,我无法测试我的解决方案是否有效。 但是你明白了:拆分字符串,只得到你想要的。

      【讨论】:

      • 实际上我正在运行一个循环来解决每次迭代的 LP,我确实可以拆分解决方案,但每次我需要向下滚动很多才能看到结果,即使我拆分它也是如此。无论如何谢谢。
      • 你是什么意思你需要向下滚动?输出到哪里去?到你的终端?什么时候输出?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-12
      • 2020-11-18
      • 2012-02-08
      • 1970-01-01
      • 1970-01-01
      • 2020-11-30
      相关资源
      最近更新 更多