2015-11-21 131 views
1

我正在尝试使用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”对象有没有属性“登录”最小化目标函数的结果。

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

感谢

回答

2

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