【问题标题】:How can I avoid having two instances of a very large matrix at the same time when loading it into a solver?将一个非常大的矩阵加载到求解器时,如何避免同时拥有两个实例?
【发布时间】:2018-04-30 16:36:31
【问题描述】:

我将 Cplex 和 Gurobi 用于一个 LP 程序,它的不等式约束矩阵 A 可以变得非常大——大约 5 到 10GB。当我想使用其中一个求解器时,我必须创建一个包含所有问题约束的单独结构。这意味着我的工作区中有矩阵 A,同时我的求解器结构中有矩阵 A。即使我尽可能快地在我的工作区中清除它,仍然存在两者都存在并且我的 RAM 过载的时候。

我在问是否有一些聪明的方法可以将矩阵 A 传递到模型中,而不会同时存在两者。我现在唯一能想到的就是分小块交付……

【问题讨论】:

  • 取决于代码,但需要显示代码。

标签: matlab matrix space linear-programming


【解决方案1】:

MATLAB 使用写时复制或延迟复制。这意味着,只要您不修改其中一个副本,矩阵的所有副本都会共享相同的数据:

A = randn(10000);
B = A; % does not take up extra memory
myfunc(B);

function myfunc(matrix)
   C = matrix; % does not take up extra memory.

有关参考,请参阅 Loren's blogUndocumented Matlab 上的示例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-02
    • 2012-01-20
    • 1970-01-01
    • 2019-06-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多