【问题标题】: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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-08-21
      • 1970-01-01
      • 2021-01-08
      • 1970-01-01
      • 2019-04-10
      • 1970-01-01
      • 2016-07-25
      相关资源
      最近更新 更多