我正在尝试使用 C++ Fusion 解决 Mosek 中的半定程序,并具有以下形式的约束
$$ \sum_j A_{i,j} M_j - \vec{c}_i^T \vec{y} + x \le b_i \forall i, $$ (链接到方程的图片)
其中每个 M_j 是一个半正定矩阵。目前,我正在使用 for 循环创建约束来对 A_{i,j} M_j 求和,并使用另一个 for 循环来添加所有约束。但是,约束的数量相当大,并且多次使用 M->constraint(...) 是迄今为止我程序中最慢的部分。我正在查看 Mosek 文档,似乎矢量化可以加速程序。但是,我正在为求和 A_{i,j} M_j 的矢量化而苦苦挣扎。每个变量的数据类型是:
A: vector < vector < Matrix::t > >
M: vector < Variable::t >
c: vector < shared_ptr < ndarray < int,1 > > >
y: Variable::t
x: Variable::t
b: vector < int >
我尝试在 A 和 M 上使用 new_array_ptr,然后使用 Expr::add 和 Expr::dot,但这些都不起作用。任何有关矢量化或加速 M->constraint(...) 的帮助将不胜感激!