我正在尝试使用CPLEX MATLAB API最小化具有线性约束的非常大的二进制二次规划问题。然而,二次函数f = x' Qx具有非常密集的矩阵Q.我可以用非常稀疏的矩阵U和A重写Q:Q = U A.
因此,有没有办法将这些矩阵传递给CPLEX而不是全矩阵Q(太大而无法存储)?
答案 0 :(得分:0)
不,MATLAB API无法做到这一点。有两个MATLAB API:用于MATLAB工具箱的CPLEX和Cplex类。每个中的相应函数/字段为cplexmiqp和Cplex.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附带的示例演示了如何完成。