Как умножить вывод quad_form на квадрат переменной в CVXPY?

#python #cvxpy #convex-optimization

Вопрос:

Я пытаюсь научиться размножаться power(lmbd,2) с quad_form(z,A) помощью своей цели. Я думаю, что эта часть выдает сообщение об ошибке Error is Problem does not follow DCP rules.

 objective = cp.Minimize(cp.power(lmbd,2) * cp.quad_form(z, A)) - lmbd*cp.matmul(z.T, s))

constraint = [cp.sum(z) == 1, z >= 0]
 

Ниже приведены мои выражения:

 lmbd = cp.Variable()

A = np.random.rand(d, d)  
A = np.dot(A.transpose(),A)

z = cp.Variable(d)

s = np.random.randn(d)
 

С нетерпением жду вашей помощи. Спасибо!

Комментарии:

1. Что такое lmbd ? Почему это переменная ? В этом нет никаких ограничений. И что вы подразумеваете под умножением? Матрица или поэлементное умножение?

2. в статье, над которой я работаю, lmbd указывается как самозвешенный параметр. Единственным ограничением является ограничение = [cp.сумма(z) == 1, z >= 0] . Цель, которую я пытаюсь решить, — это lmbd^2*z.T A z-lmbd z.T s. Я новичок в этой теме. Это все, что я знаю.

3. Спасибо вам за ваш ответ. Но мне также нужно найти оптимальное значение lmbd. Уравнение пытается найти оптимальные минимальные значения z и lmbd.

4. Ваша проблема не выпуклая, поэтому cvxopt не может ее решить. Вам придется найти другой решатель, такой как гуроби, или попытаться преобразовать проблему математически.