Нарушенное ограничение в CVXPY

У меня есть проблема, которая иногда может быть неосуществимой. Требуемое поведение - ослабить ограничение, которое было нарушено, и продолжить, но предупредить пользователя о том, что ограничение было нарушено.

Я заметил, что CVXPY 1.0 имеет новый violation() метод, который рассчитывает для вычисления остатка ограничения, но когда проблема была неосуществима, ограничение не выглядит так, как будто оно вычислено.

Используя пример на первой странице:

In [15]:
import cvxpy as cp
import numpy as np

# Problem data.
m = 30
n = 20
np.random.seed(1)
A = np.random.randn(m, n)
b = np.random.randn(m)

# Construct the problem.
x = cp.Variable(n)
objective = cp.Minimize(cp.sum_squares(A*x - b))
constraints = [0 <= x, x <= 1, x >= 2]
prob = cp.Problem(objective, constraints)

# The optimal objective value is returned by `prob.solve()`.
result = prob.solve()
# The optimal value for x is stored in `x.value`.
print(x.value)
# The optimal Lagrange multiplier for a constraint is stored in
# `constraint.dual_value`.
print(constraints[0].dual_value)
None
None

In [16]:

In [16]: prob.status
Out[16]: 'infeasible'

In [17]: prob.constraints
Out[17]:
[NonPos(Expression(AFFINE, UNKNOWN, (20,))),
 NonPos(Expression(AFFINE, UNKNOWN, (20,))),
 NonPos(Expression(AFFINE, UNKNOWN, (20,)))]

In [18]: prob.constraints[0]
Out[18]: NonPos(Expression(AFFINE, UNKNOWN, (20,)))

In [19]: prob.constraints[0].violation()
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-19-5ce1fdea8037> in <module>()
----> 1 prob.constraints[0].violation()

C:\Program Files\Anaconda3\envs\py35\lib\site-packages\cvxpy\constraints\constra
int.py in violation(self)
    137         residual = self.residual
    138         if residual is None:
--> 139             raise ValueError("Cannot compute the violation of an constra
int "
    140                              "whose expression is None-valued.")
    141         return residual

ValueError: Cannot compute the violation of an constraint whose expression is None-valued.

Как вы получаете остаток или проверить, какое ограничение было нарушено?

0 ответов

Другие вопросы по тегам