【问题标题】:Can Cplex take two sparse matrices as input for QCplex 可以将两个稀疏矩阵作为 Q 的输入吗
【发布时间】:2016-10-05 20:51:56
【问题描述】:

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

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

【问题讨论】:

  • 你在使用 C Callable Library 和CPXXcopyquad吗?如果是这样,该函数已经采用了 Q 矩阵的稀疏表示(通过 qmatbeg、qmatcnt、qmatind、qmatval)......你试过了吗?你遇到了什么错误?
  • 我使用的是matlab界面。

标签: optimization sparse-matrix cplex quadratic-programming


【解决方案1】:

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

但是(我以前不知道这一点),MATLAB API 确实接受单个 sparse matrix 用于 Q 矩阵(另请参阅 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 可调用库、C++、Python 等)更为明确。如果您有兴趣,CPLEX 附带的示例将演示如何完成。

【讨论】:

  • 我不是 MATLAB 专家,所以我不知道如何在 MATLAB 中使用本机稀疏矩阵,也不知道 CPLEX 接受它们。我已经对我的答案进行了适当的编辑。对于我可能在这一点上造成的任何混乱,我们深表歉意。
猜你喜欢
  • 2018-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
  • 2021-11-25
  • 2017-07-02
  • 2010-11-22
  • 1970-01-01
相关资源
最近更新 更多