簡體   English   中英

如何告訴cvxpy如何對目標函數中矩陣的值求和?

[英]How to tell cvxpy how to sum over values of a matrix in an objective function?

我想實現從這個優化問題, 本文使用cvxpy或任何類似的庫。 我面臨的問題是如何編寫此代碼,以便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中甚至可能嗎? 是否有其他圖書館可以輕松做到這一點? 任何代碼示例將不勝感激。

您可以循環構造成本函數。 似乎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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM