Как получить квадратный корень из вывода quad_form в CVXPY?

Я пытаюсь решить проблему, которая включает в себя \sqrt{w^t \Sigma w} в целевой функции. Вычислить w^t \Sigma w Я использую quad_form функция. Как мне взять его квадратный корень?

Когда в коде я пытаюсь написать

risk = sqrt(quad_form(w, E))

Я получаю ошибку правила DCP, но я почти уверен, что она выпуклая, учитывая другие имеющиеся у меня ограничения. Таким образом, вопрос не в математике, а в фактической реализации выпуклой программы.

Проблема, которую я пытаюсь решить

ret = mu.T*w 
risk = sqrt(quad_form(w, E))
gamma.value = distr.pdf(distr.ppf(alpha)) / (1 - alpha)
minimizer = Minimize(-ret + risk * gamma) #cvxpy.sqrt(risk) * gamma) 
constraints = [w >= 0, 
               b.T * log(w) >= k] 
prob = Problem(minimizer, constraints)
prob.solve(solver='ECOS_BB',verbose=True)

1 ответ

Решение

Чтобы получить квадратный корень из квадратичной формы, матрица Sigma должен быть положительным полуопределенным. Вычислить разложение Холецкого Sigma = Q.T * Q а затем включить термин norm(Q*w,2) в вашей целевой функции.

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