Matlab 如何设置SDP约束?

Matlab 如何设置SDP约束?,matlab,variables,cvx,Matlab,Variables,Cvx,Z是一个矩阵变量,由使用Matlab的CVX SDP代码生成;如何包含矩阵Z元素值应为零或一的约束 有“带状”选项,但不适用于矩阵 您不能,因为cvx不支持整数半定规划(Z为2x2时的特殊情况是可能的,因为这是SOCP可表示的,因此可通过接口的混合整数SOCP求解器Mosek求解) 如果您想留在MATLAB中,可以轻松地将代码转换为YALMIP(无耻的插件,由我开发),因为混合整数SDP在那里是受支持的(Z=binvar(n),您基本上完成了)。但请注意,没有可用的公共MISDP解算器,因此YA

Z是一个矩阵变量,由使用Matlab的CVX SDP代码生成;如何包含矩阵Z元素值应为零或一的约束


有“带状”选项,但不适用于矩阵

您不能,因为cvx不支持整数半定规划(Z为2x2时的特殊情况是可能的,因为这是SOCP可表示的,因此可通过接口的混合整数SOCP求解器Mosek求解)

如果您想留在MATLAB中,可以轻松地将代码转换为YALMIP(无耻的插件,由我开发),因为混合整数SDP在那里是受支持的(Z=binvar(n),您基本上完成了)。但请注意,没有可用的公共MISDP解算器,因此YALMIP将自行执行整个分支和绑定机制,依靠外部SDP解算器解决松弛问题

下面是一个解决混合整数半定规划问题的例子


我很好奇为什么没有人想开发MISDP解算器。我看到了一堆关于如何解决MISDP的论文。似乎没有理论上的局限性…嗯,YALMIP有MISDP支持。然而,对于商业玩家来说,并没有主要的市场,也并没有足够多的应用使其成为一个特别有趣的研究领域。