Highlights of the 6.0 release series
- Improved stability and robustness of core Pyomo code and solver interfaces
- Integration of Boolean variables into GDP
- Integration of NumPy support into the Pyomo expression system
- Implemented a more performant and robust expression generation system
- Implemented a more performant NL file writer (NLv2)
- Implemented a more performant LP file writer (LPv2)
- Applied PEP8 standards throughout the
codebase - Added support for Python 3.10, 3.11
- Removed support for Python 3.6
- Removed the
pyomo check
command - New packages:
- APPSI (Auto-Persistent Pyomo Solver Interfaces)
- CP (Constraint programming models and solver interfaces)
- DoE (Model based design of experiments)
- External grey box models
- IIS (Standard interface to solver IIS capabilities)
- MPC (Data structures/utils for rolling horizon dynamic optimization)
- piecewise (Modeling with and reformulating multivariate piecewise linear
functions) - PyROS (Pyomo Robust Optimization Solver)
- Structural model analysis
- Rewrite of the TrustRegion Solver
Changes in this release
-
ADVANCE CHANGE NOTICE
- This will be the last release to support Python 3.7.
-
General
- Fall back on
multiprocessing.dummy
whenmultiprocessing.Pool
is not
available (#2890) - Clean up implicit function imports (#2892)
- Ensure all pyomo modules import without warnings (#2897)
- Resolve
FileDownloader.get_os_version
exception for missing
lsb_release
(#2911) - Improve
calculate_variable_from_constraint
error messages (#2914) - Add function for collecting expressions with unit inconsistencies (#2904)
- Fix loading Scalar Param from
.dat
file (#2923)
- Fall back on
-
Core
- Resolve kernel pickle/clone errors (#2916)
- Reorganize numeric expression modules (#2909)
- Resolve error categorizing some Var discrete domains as "integer" (#2954)
- Named expressions:
expr
should always returnNumericValue
(#2948) - Support kwargs in partial objects passed to Initializer() (#2960)
- Remove
expr.current
(#2910)
-
Documentation
-
Solvers Interfaces
- Resolve handling of
{}**0
in Linear/QuadraticRepn (#2857) - Fix Linear/QuadraticRepnVisitor handling of
{}**{float}
(#2863, #2865) - GAMS: fix pickling models, update tests (#2913)
- Xpress: fix NLP results processing for Xpress 9.2.0 (#2921)
- Improve NaN handling in LP, NL writers (#2930)
- Ensure constants written correctly to LP/NL files (#2953)
- Resolve handling of
-
Testing
-
DAE
- Improve error message when attempting to discretize models with circular
references (#2943)
- Improve error message when attempting to discretize models with circular
-
GDP
-
Contributed Packages
- APPSI: change default behavior to not care where variables live (#2903)
- APPSI: Correctly Process Objective Bounds from Gurobi for Nonconvex QCPs
(#2898) - community_detection: fix networkx dependency in doctests (#2885)
- cp: Fix bug with
land
incontrib.logical_to_disjunctive
transformation
(#2879) - DoE: Update tutorial notebook (#2889)
- incidence_analysis: Filter variables with non-constant, fixed expressions
that resolve to zero inget_incident_variables
(#2882) - incidence_analysis: Correct behavior of
linear_only
argument in
get_incident_variables
(#2883) - MindtPy: Refactor to improve extensibility and maintainability (#2887)
- PyNumero: Add
PyNumeroEvaluationError
(#2901) - PyNumero: Make min and max work with MPIBlockVector when some blocks have
size 0 (#2896) - PyNumero: Remove old, unused PyNumero code (#2895)
- PyNumero: Fix typo in docstring (#2873)
- sensitivity_toolbox: Send lists to
numpy.vstack
rather than iterators
(#2881) - viewer: Fix model viewer (#2924)