CVXPY с решателем MOSEK: как найти ограничения, соответствующие индексу Mosek?

Я решаю SDP в cvxpy с MOSEK в качестве решателя. Моя проблема невыполнима, и у 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. Однако мне трудно определить, какие из моих ограничений перечислены в отчете.

Есть ли способ узнать, какие из моих ограничений cvxpy сообщаются MOSEK?


person linx    schedule 27.02.2020    source источник
comment
Возможно, наиболее продуктивно ослабить ограничения с помощью слэков, минимизировать их сумму и посмотреть, что ненулевое.   -  person Michal Adamaszek    schedule 28.02.2020
comment
это хорошая идея, я попробую :)   -  person linx    schedule 28.02.2020


Ответы (1)


Я использовал Mosek через интерфейс Cvxpy и столкнулся с той же проблемой.

Моя гипотеза: порядок ограничений в отчете о невозможности выполнения Mosek точно такой же, как в Cvxpy, потому что:

  1. Я протестировал его на двух образцах недопустимых проблем (т.е. знал заранее, какие ограничения вызывают невозможность) и обнаружил, что гипотеза верна.

  2. Я быстро взглянул на код преобразования Cvxpy в Mosek в кодовой базе cvxpy и обнаружил, что cvxpy не меняет порядок ограничений.

Итак, вывод - это гипотеза.

Обратите внимание: вывод основан на довольно небольшом наборе тестов + наивном понимании кодовой базы cvxpy, поэтому существует небольшая вероятность того, что это может быть неверно.

person pqrz    schedule 06.03.2021
comment
Это может сильно зависеть от того, какой тип проблемы решается и какие атомы используются, и, наконец, что не менее важно, дуализирован ли cvxpy или нет. - person Michal Adamaszek; 06.03.2021
comment
Большое спасибо! не знал этого. Итак, можем ли мы сказать, гипотеза в основном верна, но не всегда? - person pqrz; 08.03.2021