0

我正在尝试使用CPLEX MATLAB API最小化具有线性约束的非常大的二元二次规划问题。然而,二次函数 f = x'Qx 有一个非常密集的矩阵 Q。我可以用非常稀疏的矩阵 U 和 A 重写 Q:Q = U A。

因此,有没有办法将这些矩阵传递给 CPLEX,而不是完整的矩阵 Q(太大而无法存储)?

4

1 回答 1

0

不,这对于 MATLAB API 是不可能的。有两个 MATLAB API:用于 MATLAB Toolbox 的 CPLEX 和 Cplex 类。每个中对应的函数/字段将是cplexmiqpCplex.Model.Q。这些都不允许你完全按照你的要求去做。

但是(我以前不知道这一点),MATLAB API 确实接受 Q 矩阵的单个稀疏矩阵(另请参阅 MATLAB API编程技巧部分)。

例如,这两个示例可以互换:

cplex.Model.Q = [-33     6     0  0;
     6   -22  11.5  0;
     0  11.5   -11  0;
     0     0     0  0];

或者,使用稀疏矩阵:

cplex.Model.Q = sparse([1, 1, 2, 2, 2, 3, 3], [1, 2, 1, 2, 3, 2, 3], [-33, 6, 6, -22, 11.5, 11.5, -11], 4, 4)

这对于其他 API(例如,C 可调用库、C++、Python 等)更为明确。如果您有兴趣,CPLEX 附带的示例将演示如何完成。

于 2016-06-08T21:25:53.123 回答