Published August 29, 2024
| Version v0.4.0
Software
Open
parmoo/parmoo: v0.4.0
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
der
argument, 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
Embedder
classes (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
SurrogateFunction
andAcquisitionFunction
libraries have been updated to be more jax-friendly - The
SurrogateOptimizer
class 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
PyDOE
has been dropped since most relevant DOEs now appear in the newly addedscipy.stats.qmc
module- Switching to
PyDOE
required 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
Embedder
class is now used to define custom design variables (see Major changes) - jax is now used to evaluate gradients in the
SurrogateOptimizer
class (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.config
command (see docs) SurrogateFunction
,SurrogateOptimizer
, andAcquisitionFunction
interfaces 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)
SurrogateOptimizer
is now notified of the results of each simulation evaluation. (This allows checks for sufficient improvements)- Numerous new
AcquisitionFunction
types 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
pyDOE
from list of requirements, in favor ofscipy.stats
(added inscipy 1.10.0
) - Released the lock on
libensemble
version (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)