【发布时间】: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