【问题标题】:Performance of pyomo to generate a model with a huge number of constraintspyomo 生成具有大量约束的模型的性能
【发布时间】:2017-09-10 19:17:30
【问题描述】:

我对 Pyomo 生成具有大量约束和变量(大约 10e6)的 OR 模型的性能感兴趣。我目前正在使用 GAMS 来启动优化,但我想使用不同的 python 功能,因此使用 Pyomo 来生成模型。

我做了一些测试,显然当我编写模型时,每次实例化约束时都会调用用于定义约束的 Python 方法。在进一步实施之前,我想知道是否存在一种基于 n​​umpy 数组数据直接创建约束块的方法?在我看来,按块构造约束对于大型模型可能更有效。

您认为使用 pyomo 或其他 python 建模库可以获得与 GAMS 或其他 AML 语言相当的性能吗?

提前感谢您的帮助!

【问题讨论】:

  • 通常 GAMS 比 Pyomo 快(在我的模型上通常也比 AMPL 快,尤其是当我们有很多数据操作步骤但我知道 AMPL 明显更快的模型时)。
  • Pyomo 生成模型的速度非常慢。在我的问题中,该程序总共需要大约 3 个小时,其中求解器 (Gurobi) 只需要 5 秒。

标签: python mathematical-optimization pyomo


【解决方案1】:

虽然您可以在创建 Pyomo 约束时使用 NumPy 数据,但您目前无法使用 Pyomo 在单个 NumPy 样式命令中创建约束块。值得一提的是,我不相信你可以使用像 AMPL 或 GAMS 这样的语言。虽然 Pyomo 最终可能支持用户使用矩阵和向量操作定义约束,但该接口不太可能避免生成单独的约束,因为求解器接口(例如,NL、LP、MPS 文件)都是明确的“平面”表示表示个别约束。这是因为 Pyomo 需要显式生成 代数 的表示(即表达式)以发送给求解器。相比之下,NumPy 只需要计算结果:它通过在 C/C++ 后端(即 Python 中的 not)中创建数据来获得效率,依赖于低级 BLAS 操作以有效地计算结果,并且只将 result 带回 Python。

就性能和可扩展性而言,我已经生成了包含超过 13e6 个变量和 21e6 个约束的原始模型。也就是说,Pyomo 的设计目的是为了提高速度的灵活性和可扩展性。使用 cPython 时,Pyomo 中的运行时间可能比 AMPL 慢一个数量级(尽管使用 pypy 可以缩小到 4 或 5 倍)。至少从历史上看,AMPL 一直比 GAMS 快,所以 Pyomo 和 GAMS 之间的差距应该更小。

【讨论】:

  • 非常感谢您的回答,我一直对 Pyomo 有这个疑问。但是您能否进一步澄清以下部分? > [...] 求解器接口 [...] 都是明确[ly] 表示单个约束的“平面”表示。 [...] Pyomo 需要显式生成 代数 的表示(即表达式)以发送给求解器。相比之下,NumPy 只需计算结果:它通过在 C/C++ 后端创建数据来提高效率 [...] 依靠低级 BLAS 操作来有效地计算结果,并且只将结果返回蟒蛇。
  • 这与矩阵表示与以标量形式写出联立线性方程的情况有何不同?求解器输入文件肯定会有一些矩阵式的方式来表示大量约束吗?或者你是说因为稀疏而不是这种情况?
  • 据我所知,标准求解器输入格式不支持“矩阵式”指定约束的方式。对于线性求解器,标准格式是 LP(基于行)和 MPS(基于列)。两者都明确列出了“A”矩阵中的所有非零值。对于一般的非线性,确实没有标准格式。 AMPL 的 NL 格式是最接近的,即基于行的。一些凸求解器支持矩阵样式输入,但这些不是一般非线性求解器通常采用的格式。
  • @jsiirola 只是好奇:在 Pyomo 中生成您提到的“具有超过 13e6 个变量和 21e6 个约束的原始模型”需要多长时间?这与生成时间 AMPL 相比如何?
【解决方案2】:

当我看到 Jonas Hörsch 和 Tom Brown 的这段代码时,我也有同样的疑惑,它对我非常有用:

https://github.com/FRESNA/PyPSA/blob/master/pypsa/opt.py

它们定义类以比原始 Pyomo 解析器更有效地定义约束。我对我拥有的大型模型进行了一些测试,它大大减少了生成时间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-10
    • 1970-01-01
    • 1970-01-01
    • 2018-05-29
    • 2021-12-26
    • 1970-01-01
    • 1970-01-01
    • 2021-09-12
    相关资源
    最近更新 更多