There is a newer version of the record available.

Published August 29, 2024 | Version v0.4.0
Software Open

parmoo/parmoo: v0.4.0

  • 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 by jax.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 the structs.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 and AcquisitionFunction 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 added scipy.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 a jax.config command (see docs)
  • SurrogateFunction, SurrogateOptimizer, and AcquisitionFunction 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 of scipy.stats (added in scipy 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)