Как получить квадратный корень из вывода quad_form в CVXPY? - PullRequest
0 голосов
/ 26 мая 2018

Я пытаюсь решить проблему, которая включает \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 Ответ

0 голосов
/ 26 мая 2018

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

...