微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何重塑MOSEK

如何解决如何重塑MOSEK

我正在尝试将用MATLAB CVX编写的优化代码转换为直接调用求解器MOSEK的Python代码。 我的优化包括以下类型的方程:

|| Ax-b || +正则化器。

x是一个三维变量,需要评估其最佳值。我在MATLAB中将A定义为一个函数,如下所示:

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,19),1),3));
end
end

等等,||| 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,d] )
    t = M.variable("t")
    
    y = M.variable("y",[n1,d])
    for i in range(0,d):
        temp = x.slice([0,i],i])
        temp2 = Var.reshape(temp,[19,7])
        y.slice[[0,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,d))
    ObjExpr4 = Expr.mul(beta,lassoTV(M,d))
    objExpr = Expr.add(ObjExpr1,ObjExpr2,ObjExpr3,ObjExpr4)
    M.objective(ObjectiveSense.Minimize,objExpr)
    return M

但是,我得到了错误

  File "C:\Users\Anaconda\lib\site-packages\mosek\fusion\impl\_implementation.py",line 13779,in reshape
    return mosek_fusion_Var._reshape_alt_Lmosek_4fusion_4Variable_2_3I(*args)

  File "C:\Users\Anaconda\lib\site-packages\mosek\fusion\impl\_implementation.py",line 13967,in _reshape_alt_Lmosek_4fusion_4Variable_2_3I
    _1 = mosek_fusion_Var._reshape_Lmosek_4fusion_4Variable_2_3I(_0,_1)

  File "C:\Users\Anaconda\lib\site-packages\mosek\fusion\impl\_implementation.py",line 13976,in _reshape_Lmosek_4fusion_4Variable_2_3I
    return (_0._reshape__3I(_1))

  File "C:\Users\Anaconda\lib\site-packages\mosek\fusion\impl\_implementation.py",line 10897,in _reshape__3I
    raise mosek_fusion_LengthError._ctor_S("Shape size does not match variable size")

LengthError: Shape size does not match variable size

这次重塑我在做什么错了?

解决方法

此:

recv

可能会给您一个大小为0的对象

recv

请记住,“ last”索引是所需切片的最后一个元素后面的1。

您无法将内容分配给切片,这是非法的:

revc

相反,您可能想进行约束。

这些是对他人可能有用的一般性评论。我们知道您已将问题发送给MOSEK支持,我们将在此为您提供其他针对您其他问题的详细信息。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?