最小化cvxpy中的日志功能

时间:2015-11-21 02:39:15

标签: convex-optimization 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) enter image description here

上面的等式是我的输入目标函数。

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'对象没有属性' log'。

我是CVXPY和优化新手。如果有人可以指导如何解决错误,我将不胜感激。

谢谢

1 个答案:

答案 0 :(得分:3)

您需要使用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