【问题标题】:Minimising log function in cvxpy最小化cvxpy中的日志功能
【发布时间】:2015-11-21 02:39:15
【问题描述】:

我正在尝试使用 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' object has no attribute 'log'。

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

谢谢

【问题讨论】:

    标签: convex-optimization cvxpy


    【解决方案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
    

    【讨论】:

    • @linello sum_entries 在 cvxpy 1.1 版本中重命名为 sum。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-07
    • 1970-01-01
    • 2018-03-23
    • 1970-01-01
    • 1970-01-01
    • 2020-05-05
    • 2012-02-04
    相关资源
    最近更新 更多