Проблема не соответствует правилам DCP в CVXPY

«Проблема не соответствует правилам DCP» возникает в целевой функции, но математически она выпуклая (я доказал), и когда я применил ту же задачу к CVXOPT, она сработала.

Я не знаю, что мне изменить.

x = cp.Variable(data_length)
obj = cp.Minimize((-mu_hat @ x)**2*cp.quad_form(x, covar))

constraints = [sum(x) == 1,  x <= [bounds[i][1] for i in range(len(bounds))], x >= [bounds[i][0] for i in range(len(bounds))]]

prob = cp.Problem(obj, constraints)

prob.solve()

cvxpy.error.DCPError: Проблема не соответствует правилам DCP.


person Jimmy    schedule 03.06.2019    source источник


Ответы (1)


Дисциплинированное выпуклое программирование не позволяет перемножать два выпуклых выражения. У вас есть

(-mu_hat @ x)**2

а также

cp.quad_form(x, covar)

которые оба выпуклые. Может ты хотел их добавить? Как вы сформулировали задачу для cvxopt?

person Jacques Kvam    schedule 03.06.2019
comment
Спасибо за ваш комментарий. Я думаю, что их продукт тоже выпуклый. В CVXOPT мне нужно было рассчитать его градиент, гессиан, и после их назначения он работал. - person Jimmy; 03.06.2019
comment
Может быть невозможно сформулировать вашу проблему как DCP, набор DCP является строгим подмножеством выпуклых программ. Таким образом, вам, возможно, придется использовать решатель CP, например cvxopt. - person Jacques Kvam; 04.06.2019
comment
К сожалению, CVXOPT работает только для 64-битной Windows, а не для 32-битной, поэтому проблема заключалась в рассмотрении cvxpy. - person Jimmy; 09.06.2019
comment
@Jimmy Привет, вы узнали, в чем проблема с CVXPY в вашем случае? Можете ли вы показать, как вы справляетесь с проблемой с помощью CVXOPT? Спасибо - person Hey There; 01.12.2019