Сокращение минимизации ограничений в CVXPY - PullRequest
0 голосов
/ 08 апреля 2020

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

Требуется, чтобы ограничения равенства соблюдаются до ~ 10 ^ (- 10) или лучше. Даже если я начну свою оптимизацию с матрицы M, которая удовлетворяет ограничениям до 10 ^ (- 12) или лучше, результат оптимизации X не соответствует требованиям для X + M очень близко (по крайней мере, два или три из них встречались только до 10 ** (- 7)). Есть ли способ повысить точность того, насколько близко cvx (mosek) удовлетворяет ограничениям?

Sidenote: Я получил начальное значение своей оптимизации как решение точно такой же проблемы, поэтому, кажется, возможно дать более высокую точность, но я думаю, что это только повезло. К сожалению, эта матрица не близка к минимальной, поэтому мне нужно сделать еще одну итерацию.

# defining variable
X = cp.Variable((m,m), hermitian=True)
#pos. semi-definite constraint
constraints = [M+X >> 0]                                             
# all the other constraints
for i in range(0,len(b)):
    constraints += [ cp.trace(A[i]@(M+X)) == b[i]]                     

#problem formulation
prob = cp.Problem(cp.Minimize(cp.real(cp.trace(C@X))), constraints)
Result = prob.solve(solver=cp.MOSEK, verbose = False, parallel = True)

Здесь M и C - известные матрицы, A и b - список матриц и скаляров соответственно.

Я уже пытался найти ответ в документации и на inte rnet, но не смог найти решение. Поэтому буду благодарен за любую помощь!

Заранее благодарен!

...