Cplex可以将两个稀疏矩阵作为Q的输入

时间:2016-06-06 09:43:09

标签: optimization sparse-matrix cplex quadratic-programming

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

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

1 个答案:

答案 0 :(得分:0)

不,MATLAB API无法做到这一点。有两个MATLAB API:用于MATLAB工具箱的CPLEX和Cplex类。每个中的相应函数/字段为cplexmiqpCplex.Model.Q。这些都不允许你完全按照你的要求去做。

然而(我以前没有意识到这一点),MATLAB API确实接受Q {矩阵的单sparse matrix(参见MATLAB API programming tips部分)。

例如,这两个例子是可以互换的:

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 Callable Library,C ++,Python等)。如果您感兴趣,CPLEX附带的示例演示了如何完成。