亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 MOSEK 中重塑變量

如何在 MOSEK 中重塑變量

aluckdog 2023-10-06 19:33:57
我正在嘗試將用 MATLAB CVX 編寫的優化代碼轉換為直接調用求解器 MOSEK 的 Python 代碼。我的優化由以下類型的方程組成:||斧頭-b|| +正則化器。x是一個三維變量,需要評估其最佳值。我將 A 定義為 MATLAB 中的函數,如下所示:function D = A(X)   n = size(X,1);m = size(X,2);nim = size(X,3);for t = 1:nim    temp = X(:,:,t);    D(:,:,t) = squeeze(sum(sum(reshape(temp,7,19,7,19),1),3));endend所以,||Ax-b|| 在 MATLAB CVX 中變為norm((vec(A(x)-b)))現在,當我直接調用 MOSEK 轉換為 python 時,我寫道:def lseReg(b,I,n,m,d,n1,m1,alpha,beta):    M = Model("LSE-REG")    x = M.variable("x", [n,m,d] )    t = M.variable("t")        y = M.variable("y",[n1,m1,d])    for i in range(0,d):        temp = x.slice([0,0,i],[n,m,i])        temp2 = Var.reshape(temp,[19,7,19,7])        y.slice[[0,0,i],[n1,m1,i]] =  Expr.sum(Expr.sum(temp2,3),1)            r = Expr.sub(b,y)    M.constraint(Expr.vstack(0.5,t,r),Domain.inRotatedQCone())    t2 = M.variable("t2")    r2 = Expr.sub(I,Expr.sum(x,2))    M.constraint(Expr.vstack(0.5,t2,r2),Domain.inRotatedQCone())    #the Objective    ObjExpr1 = t.asExpr()    ObjExpr2 = t2.asExpr()    ObjExpr3 = Expr.mul(alpha,lassoVar(M,x,n,m,d))    ObjExpr4 = Expr.mul(beta,lassoTV(M,x,n,m,d))    objExpr = Expr.add(ObjExpr1,ObjExpr2,ObjExpr3,ObjExpr4)    M.objective(ObjectiveSense.Minimize,objExpr)    return M我這次重塑做錯了什么?
查看完整描述

1 回答

?
暮色呼如

TA貢獻1853條經驗 獲得超9個贊

這:

x.slice([0,0,i],[n,m,i])

會給你一個大小為 0 的對象,你可能的意思是

x.slice([0,0,i],[n,m,i+1])

請記住,“最后一個”索引是您想要的切片的最后一個元素后面的 1。

你不能將事物分配給切片,這是非法的:

y.slice[[0,0,i],[n1,m1,i]] =

相反,您可能想要做出限制。

這些是可能對其他人有用的一般評論。我們知道您已將問題發送給 MOSEK 支持人員,我們將針對您的其他問題提供更多詳細信息進行答復。


查看完整回答
反對 回復 2023-10-06
  • 1 回答
  • 0 關注
  • 142 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號