Skip to content

Performance enhancement ideas

William Hart edited this page Feb 7, 2022 · 6 revisions

List of Pyomo Performance Enhancement Ideas

This page compiles individual ideas for improving Pyomo's overall performance. Individual ideas may be tied to a (closed, but unresolved) issue where discussion specific to that idea is archived. The intent is that when an idea will receive active developer attention, that issue will be re-opened.

Expressions

  • #1202: Re-evaluate the need for NPV expression objects
  • #1184: Define custom expression objects to short-circuit common checks
  • #1161: Using Python macros to accelerate Pyomo expression kernels
  • #1153: Expression templates
  • #1073: Revisit design of method used to create the canonical repn
  • #324: Reconsider performance of expressions with many constants

Solver interfaces

  • #1169: with cplex, solver_io='python' is much slower than executable=(solver_path)
  • #1160: Fast(er) direct solver interfaces
  • #1158: Use C/C++ extensions for file writers
  • #1154: "automatic" persistent solvers
  • #1151: Improve the NL writer
  • #251: Huge memory consumption while generating model file
  • #177: Enable creating of NL files with binary data
  • #1030: Redesign of Pyomo Solvers
  • #677: Shift to using unsorted problem files with Python 3.6 and later
  • #106: Fast serialization of solutions to/from disk

Modeling components

  • #1203: Add "compiled" model support
  • #1192: Implement Parallel Blocks
  • #1165: Investigate "array-like" components
  • #1159: Matrix/Vector Representations

Packaging and distribution

Other

  • #1157: Profile Pyomo.DAE and identify bottlenecks
  • #1156: Testing Performance

Completed ideas

  • #1178: Pyomo installation with Cython

Discussion

Other ideas that I'm not sure are reflected above

  • Standardization of matrix/vector expression syntax
  • Interfacing with POEK to accelerate expression management
  • Standardizing expression of compact expression templates, leveraging POEK/COEK for model generation
  • Methods to efficiently resolve problems after mutable parameters change
  • Export JSON/JPOF format for separate execution on embedded or HPC platforms
  • Integration with Pandas and NumPy to avoid data loading into Python