我正在嘗試將用 MATLAB CVX 編寫(xiě)的優(yōu)化代碼轉(zhuǎn)換為直接調(diào)用求解器 MOSEK 的 Python 代碼。我的優(yōu)化由以下類(lèi)型的方程組成:||斧頭-b|| +正則化器。x是一個(gè)三維變量,需要評(píng)估其最佳值。我將 A 定義為 MATLAB 中的函數(shù),如下所示: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 中變?yōu)閚orm((vec(A(x)-b)))現(xiàn)在,當(dāng)我直接調(diào)用 MOSEK 轉(zhuǎn)換為 python 時(shí),我寫(xiě)道: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我這次重塑做錯(cuò)了什么?
1 回答

暮色呼如
TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超9個(gè)贊
這:
x.slice([0,0,i],[n,m,i])
會(huì)給你一個(gè)大小為 0 的對(duì)象,你可能的意思是
x.slice([0,0,i],[n,m,i+1])
請(qǐng)記住,“最后一個(gè)”索引是您想要的切片的最后一個(gè)元素后面的 1。
你不能將事物分配給切片,這是非法的:
y.slice[[0,0,i],[n1,m1,i]] =
相反,您可能想要做出限制。
這些是可能對(duì)其他人有用的一般評(píng)論。我們知道您已將問(wèn)題發(fā)送給 MOSEK 支持人員,我們將針對(duì)您的其他問(wèn)題提供更多詳細(xì)信息進(jìn)行答復(fù)。
添加回答
舉報(bào)
0/150
提交
取消