1

我正在使用 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 约束?

4

1 回答 1

0

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

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

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

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

所以,结论就是假设。

请注意:这个结论是基于相当小的测试集 + 对 cvxpy 代码库的幼稚理解,所以它可能会出错的可能性很小。

于 2021-03-06T05:43:15.293 回答