首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在cvxpy中最小化日志函数

在cvxpy中最小化日志函数
EN

Stack Overflow用户
提问于 2015-11-21 02:39:15
回答 1查看 2.1K关注 0票数 2

我试着用CVXPY模拟一个精确的线搜索实验。

代码语言:javascript
复制
objective = cvx.Minimize(func(x+s*grad(x))) 
s = cvx.Variable()
constraints = [ s >= 0]
prob = cvx.Problem(objective, constraints)
obj = cvx.Minimize(prob)

(cvxbook比亚迪pg472)

上面的方程是我的输入目标函数。

代码语言:javascript
复制
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

梯度函数

代码语言:javascript
复制
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和优化。如果有人能指导如何纠正这些错误,我将不胜感激。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-25 03:47:45

您需要使用CVXPY函数,而不是NumPy函数。像这样的事情应该有效:

代码语言:javascript
复制
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
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33839109

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档