【问题标题】:How to tell cvxpy how to sum over values of a matrix in an objective function?如何告诉 cvxpy 如何对目标函数中的矩阵值求和?
【发布时间】:2019-05-19 06:27:20
【问题描述】:
我想使用 cvxpy 或任何类似的库从this paper 实现这个优化问题。
我面临的问题是如何编写代码以便 cvxpy 可以理解。
from cvxpy import *
g = Variable(n)
eta = Variable(n)
loss = sum(g+g-(2*g)+eta-(d**2))
reg = norm(eta, 1)
lambd = Parameter(nonneg=True)
prob = Problem(Minimize(lambd*reg+0.5*loss))
我知道我对损失的定义显然是不正确的,我只需要放一些东西来说明我的问题。我不知道如何告诉 cvxpy 以我想要的方式处理矩阵的索引。这在cvxpy中甚至可能吗?有没有其他图书馆可以轻松做到这一点?任何代码示例都将不胜感激。
【问题讨论】:
标签:
python
optimization
gradient-descent
convex-optimization
cvxpy
【解决方案1】:
您可以在循环中构造成本函数。似乎g应该是半正定的,所以我添加了PSD=True。这是一个完整的例子:
from cvxpy import *
n = 10
g = Variable((n, n), PSD=True)
eta = Variable((n, n))
reg = norm(eta, 1)
d = np.ones((n, n))
lamb = 1.
cost = 0
for i in range(n):
for j in range(n):
cost += (g[i, i] + g[j, j] - 2 * g[i, j] + eta[i, j] - d[i, j]**2) ** 2
cost = 0.5 * cost + lamb * reg
prob = Problem(Minimize(cost))
prob.solve()