Published August 29, 2024
| Version v0.4.0
Software
Open
parmoo/parmoo: v0.4.0
Authors/Creators
- 1. Lawrence Berkeley National Laboratory; Northwestern University
- 2. University of Illinois Urbana Champaign
Description
Release 0.4.0
:Date: Aug 28, 2024
Major interface-breaking refactor of core MOOP builder and libraries plus
minor bug-fixes.
Major changes:
- Under the hood, ParMOO now uses
jax[cpu]for all gradient evaluations, constraint evaluations, and function evaluations (but not simulation evaluations) on the critical path; this means that objective and constraint functions can be just-in-time (jit) compiled, which can give massive performance improvements. However, not all Python features are supported byjax.jit(), so users must be careful to write their objective and constraint functions mindfully - In order for jax to be effective, we have updated the interfaces to avoid
using optional arguments -- this affects the objective and constraint
function interfaces, and a separate gradient function must be provided by
the user (as opposed to an optional
derargument, as previously used) - In order to make it easier to support mixed variable types in jax and for
future maintainability, all design variables have been replaced by a library
of design variable
Embedderclasses (corresponding ABCs also added to thestructs.py) - In order to make ParMOO more maintainable and for jax to work smoothly, we have dropped support for unnamed variables -- Closes #31
- All
SurrogateFunctionandAcquisitionFunctionlibraries have been updated to be more jax-friendly - The
SurrogateOptimizerclass has been refactored to include a callback to observe simulation evaluation results. It has also been given almost full control over when model improvement steps are called in order to make implementing many DFO methods easier - The pattern search family of optimizers has been greatly improved
PyDOEhas been dropped since most relevant DOEs now appear in the newly addedscipy.stats.qmcmodule- Switching to
PyDOErequired us to change how the numpy random seed is set. A random seed object is now passed as a hyperparameter to ParMOO and propagated to all libraries, which is the recommended way - Updated docs to reflect above changes
Style changes:
- Overhauled some of the unit tests
- Style fixes throughout
- Renamed several methods and classes to have a consistent naming convention
Interface breaking:
- The
Embedderclass is now used to define custom design variables (see Major changes) - jax is now used to evaluate gradients in the
SurrogateOptimizerclass (see Major changes) -- this alone should not break the interface most use-cases, but may lead to decreased performance if not careful (see notes on achieving good performance in jax in the docs). Additionally, jax defaults to single precision so double precision must be set manually using ajax.configcommand (see docs) SurrogateFunction,SurrogateOptimizer, andAcquisitionFunctioninterfaces have changed (only affects users using custom methods)- The random seed must now be set using a numpy random seed object (see Major changes and examples in the docs)
- We no longer support unnamed variables (see Major changes)
- Gradient functions are now provided via an additional key in the dictionary, and cannot be set using an optional argument (see Major changes and examples in the updated docs)
- Many library functions, methods, and classes have been renamed for consistency. In some cases, the old names remain as aliases for backward compatibility. See Style changes
New features:
- ParMOO now supports jax for autograd (see Major changes above)
SurrogateOptimizeris now notified of the results of each simulation evaluation. (This allows checks for sufficient improvements)- Numerous new
AcquisitionFunctiontypes added - Added an option to create a private workdir for each libEnsemble thread -- Closes #82
Minor changes:
- Updates to support
numpy 2.0 - Added a code coverage badge and updated the release process to reflect the extra steps needed to make this work -- Closes #21 and #93
Requirements:
- Added
jax[cpu]to list of requirements - Removed
pyDOEfrom list of requirements, in favor ofscipy.stats(added inscipy 1.10.0) - Released the lock on
libensembleversion (from Release 0.3.1) - Updated all version requirements to be new enough to support
numpy 2.0
Files
parmoo/parmoo-v0.4.0.zip
Files
(5.9 MB)
| Name | Size | Download all |
|---|---|---|
|
md5:0c967b5551d09e963007835f9e0aea8f
|
5.9 MB | Preview Download |
Additional details
Related works
- Is supplement to
- Software: https://github.com/parmoo/parmoo/tree/v0.4.0 (URL)