【问题标题】:CVXPY with MOSEK solver: how do I find the constraints corresponding to the Mosek "index"?带有 MOSEK 求解器的 CVXPY:如何找到与 Mosek“索引”对应的约束?
【发布时间】:2020-02-27 13:22:06
【问题描述】:

我正在使用 MOSEK 作为求解器在 cvxpy 中求解 SDP。 我的问题是不可行的,MOSEK 有一个很好的功能,它提供了一个“不可行报告”。就我而言,报告如下所示:

MOSEK PRIMAL INFEASIBILITY REPORT.
Problem status: The problem is primal infeasible
The following constraints are involved in the primal infeasibility.
Index    Name             Lower bound      Upper bound      Dual lower       Dual upper      
37                        none             -0.000000e+00    0.000000e+00     2.647059e-03    
406                       none             3.000000e+02     0.000000e+00     6.250000e-04    
2364                      none             -0.000000e+00    0.000000e+00     6.183824e-03    
2980                      none             -8.100000e-01    0.000000e+00     1.000000e+00    
3049                      -0.000000e+00    -0.000000e+00    0.000000e+00     4.235294e+00    
3052                      -0.000000e+00    -0.000000e+00    0.000000e+00     1.000000e+00    

我想了解此报告所指的约束条件。我在 cvxpy 中的约束列表仅包含 105 个约束,但其中许多是矩阵或向量约束。这就解释了为什么 MOSEK 报告的指数高达 3052。但是,很难找出报告中列出了我的哪些约束。

有没有办法找出 MOSEK 报告了我的哪些 cvxpy 约束?

【问题讨论】:

  • 用松弛来放松你的约束,最小化松弛的总和,看看什么是非零的,这可能是最有效的。
  • 这是个好主意,我会试试的:)

标签: optimization cvxpy mosek


【解决方案1】:

我通过其 Cvxpy 界面使用 Mosek 并面临同样的问题。

我的假设是 Mosek 的不可行性报告的约束顺序与 Cvxpy 中的完全相同,因为:

  1. 我已经在 2 个不可行问题样本上对其进行了测试(即事先知道哪个约束导致不可行)并发现该假设成立。

  2. 我在 cvxpy 代码库中快速查看了 Cvxpy 到 Mosek 的转换代码,发现 cvxpy 不会改变约束顺序。

所以,结论就是假设。

请注意:这个结论是基于相当小的测试集 + 对 cvxpy 代码库的幼稚理解,因此存在错误的可能性很小。

【讨论】:

  • 这可能在很大程度上取决于要解决的问题类型以及使用的原子以及最后但绝对不是最不重要的 cvxpy 是否对偶。
  • 非常感谢!不知道。那么,我们可以说假设大部分成立,但并非总是成立
猜你喜欢
  • 2019-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-29
相关资源
最近更新 更多