Минимизация функции журнала в cvxpy

Я пытаюсь смоделировать эксперимент по точному поиску строки, используя CVXPY.

objective = cvx.Minimize(func(x+s*grad(x))) 
s = cvx.Variable()
constraints = [ s >= 0]
prob = cvx.Problem(objective, constraints)
obj = cvx.Minimize(prob)

(cvxbook byod pg472) введите здесь описание изображения

приведенное выше уравнение является моей входной целевой функцией.

def func(x):
np.random.seed(1235813)
A = np.asmatrix(np.random.randint(-1,1, size=(n, m)))
b = np.asmatrix(np.random.randint(50,100,size=(m,1)))
c = np.asmatrix(np.random.randint(1,50,size=(n,1)))
fx = c.transpose()*x - sum(np.log((b - A.transpose()* x)))
return fx

Функция градиента

def grad(x):
np.random.seed(1235813)
A = np.asmatrix(np.random.randint(-1,1, size=(n, m)))
b = np.asmatrix(np.random.randint(50,100,size=(m,1)))
c = np.asmatrix(np.random.randint(1,50,size=(n,1)))
gradient = A * (1.0/(b - A.transpose()*x)) + c
return gradient

Использование этого для нахождения t «Размер шага» путем минимизации целевой функции приводит к ошибке. Объект «AddExpression» не имеет атрибута «журнал».

Я новичок в CVXPY и оптимизации. Буду признателен, если кто-нибудь подскажет, как исправить ошибки.

Спасибо


person Krishna Kalyan    schedule 21.11.2015    source источник


Ответы (1)


Вам нужно использовать функции CVXPY, а не функции NumPy. Что-то вроде этого должно работать:

def func(x):
   np.random.seed(1235813)
   A = np.asmatrix(np.random.randint(-1,1, size=(n, m)))
   b = np.asmatrix(np.random.randint(50,100,size=(m,1)))
   c = np.asmatrix(np.random.randint(1,50,size=(n,1)))
   fx = c.transpose()*x - cvxpy.sum_entries(cvxpy.log((b - A.transpose()* x)))
   return fx
person steven    schedule 25.04.2016
comment
sum_entries все еще работает? - person linello; 22.04.2021
comment
@linello sum_entries переименован в sum в версии cvxpy 1.1. - person kaptankusto; 03.05.2021