【问题标题】:Is this behavior showing that I have a memory problem?这种行为是否表明我有记忆问题?
【发布时间】:2019-12-26 20:35:28
【问题描述】:

我有一个大约 400 万个变量和大约 400 万个约束的 LP 问题。我使用 gurobi 来解决它。我的电脑有 4 个内核和 8 GB 内存。

根据日志文件,大约需要 100 秒才能找到最佳解决方案。然后释放 CPU,但仍然使用几乎全部内存。它挂在那里,几个小时什么都不做,直到它在解决后继续运行脚本(例如打印命令)。

结果 = opt.solve(model, tee=True)

print("模型求解")

我使用了禁用交叉的屏障方法,这种方法效果最好。我还尝试了使用不同数量的线程,结果发现使用 4 就挂起时间而言是最好的(但仍然是几个小时)。

这种挂起显着增加了总运行时间,这是不希望的。

我打算升级内存,但想从社区那里得到答案,这确实是内存问题。这是内存问题吗?

【问题讨论】:

    标签: linear-programming pyomo gurobi


    【解决方案1】:

    问题可能不适合内存并且使用了虚拟内存(即磁盘)。当情况非常糟糕时,这被称为颠簸。它可以使您的机器瘫痪。根据问题中非零的数量、预求解统计信息和您正在使用的线程数,您至少需要 16 GB(并且可能更像 32 GB)。

    另外:尝试减少 Gurobi 使用的线程数。使用 1 个线程可能会更好(在基准测试哪种 LP 算法效果最好之后:原始或对偶单纯形法或障碍法)。默认情况下使用并发 LP 方法:并行使用不同的 LP 求解器,显着增加内存占用。

    【讨论】:

    • 另外,我有过在求解结束时只加载几个变量的经验,几乎可以避免这种对于非常大的问题的挂起。这表明从求解器向 Pyomo 检索变量值非常慢,尤其是当 RAM 太小时。
    • 我必须补充一点,因为我并不是说 RAM 大小总是导致此问题的原因:小 RAM 会使您的计算机容易交换。检索所有非零变量已经有点慢了,但是当它开始交换时,它就完全变成了另一种游戏。 OP 在升级 RAM 后可能仍然会出现这些挂起,但如果它允许他的计算机停止交换,它们应该会更短。
    猜你喜欢
    • 2011-07-24
    • 2023-04-06
    • 2011-02-03
    • 1970-01-01
    • 2016-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多