【问题标题】:max_iters doesn't seem to work with GLPK_MI solver in Pythonmax_iters 似乎不适用于 Python 中的 GLPK_MI 求解器
【发布时间】:2020-11-10 19:46:02
【问题描述】:

我现在正在调试我的代码,因为它运行的是一些数据而不是其他数据,所以我想将“max_iters”选项设置为 1,以查看它是否仅在 1 次迭代中有效,或者是否需要更多。我意识到它似乎甚至没有使用它。我尝试放置一个字符串“hello”而不是一个 int,它甚至可以工作。有人知道这是否是已知问题吗?

self.prob.solve(solver="GLPK_MI", max_iters=1)

我正在使用带有 CVXOPT 的 CVXPY 模块。

编辑: 我想这样做是因为我没有收到错误,它只是继续永远运行。对于我正在进行的项目,它可能需要很长时间才能运行,所以我想知道它是否真的不起作用,或者这只是时间问题。

【问题讨论】:

  • 看到这甚至没有传递给求解器,我不会感到惊讶。这到底是什么意思?虽然这个 迭代数 在求解连续模型的更常见的内点或一阶求解器(在实践中经常使用)中是一个常见概念,但它不太常见(人们可能会争论它的含义)在基于分支和切割的单纯形码中。分支迭代?单纯形迭代?谁知道。在 BnC 代码中,在 99.9% 的所有用例中,提前终止由时间或 mip-gap 控制。也许你可以通过 abr。 GLPK_options(来自 its 手册,cvxpy 不知道它们)。
  • 此外,我想知道一些迭代次数将如何帮助调试描述为适用于某些数据,但不适用于其他数据的东西。如果检查了求解器状态(没有意外),我认为更改迭代次数没有任何好处。您可能希望动态删除部分约束以识别有问题/不可行的子部分。
  • @sascha 谢谢你的回答!我忘记了这部分,但我想看看它,因为我没有收到错误,它只是继续永远运行。对于我正在进行的项目,它可能需要很长时间才能运行,所以我想知道它是否真的不起作用,或者这只是时间问题。我的下一步是尝试运行一周而不碰它哈哈。我将编辑问题以添加此信息!
  • 由于离散组合的方差很大,我不建议等待一周。很有可能95%的案子在3秒内就解决了,但有些案子不是在一个月内解决的!对于调试:尝试使用较小的数据集。修改它们(修剪)或自己生成它们。取决于用例。如果没有错误,您应该假设求解器通常仍在搜索。您还可以查看流程管理器。 CPU 使用率和内存使用率(可能会随着时间的推移而增长)。也许有机会打开详细模式,但是由于 GLPK 被包裹在 cvxopt 后面,所以文档记录很差

标签: python solver cvxpy glpk cvxopt


【解决方案1】:

如果将最大迭代次数设置为变量会不会更好? (只是一个建议)

无论如何,在 CVXOPT 中,您需要将最大迭代次数设置为

'maxiters' : 1

或者您可以将其设置为变量,然后按照以下方式调用求解器

opts = {'maxiters' : 1}
self.prob.solve(solver="GLPK_MI", options = opts) 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-27
    • 1970-01-01
    • 1970-01-01
    • 2020-04-04
    相关资源
    最近更新 更多