Skip to content

Latest commit

 

History

History
371 lines (302 loc) · 13.7 KB

CHANGELOG.md

File metadata and controls

371 lines (302 loc) · 13.7 KB

Changelog

[Untracked Changes]

Added

  • Improved methods for fitting PyTorch surrogates, including auto-stopping by parameter value norm

Modified

  • Greatly reduced the number of samples for DNN posterior, speeding up optimization
  • Stabilized the mean estimate of ensemble surrogates by avoiding resampling
  • Disabled root caching for ensemble surrogates during optimization
  • Increased the maximum length of a category name to 32 characters

[0.8.5]

Added

  • More optional outputs for verbose settings
  • Parameters in ParamSpace can also be indexed by name
  • Parameters now have search_space property, to modify the optimizer search space from the full space
  • Continuous parameters have search_min/search_max; Discete parameteres have search_categories
  • Constraints are now defined by Constraint class
  • Input constraints can now be included in ParamSpace, and serialized from there
  • Output constraints can now be included in Campaign, and serialized from there
  • New interface class IParamSpace to address circular import issues between ParamSpace and Constraint

Modified

  • Optimizer and Campaign X_space attributes are now assigned using setter
  • Optimizer.maximize() appropriately recognizes fixed_var argument

Removed

  • Torch device references and options (GPU compatibility may be re-added)

[0.8.4]

Added

  • Campaign X_best method
  • Optimizer X_best_f attribute(s)
  • Sequence of colors "color_list" to branding
  • Informative hoverdata for MDS plot
  • Created Product_Objective and Divide_Objective

Modified

  • Switched all usages of X_ref = X_space.mean() to optimizer.X_best_f
  • Refactored mpl "visualize_inputs" as plotly "visualize_inputs" for better interactivity
  • Text formatting for some plotly hoverdata

[0.8.3]

Added

  • Default values for NParEGO scalarization_weights
  • SHAP PDP ICE plots now work with categorical values
  • Added scikit-learn to dependencies, for MDS
  • Added MDS plot

Modified

  • SHAP PDP ICE plots must now have color and x-axis indices that are distinct

[0.8.2]

Added

  • Project metadata properly captured on PyPI based on changes in pyproject.toml

[0.8.1]

Modified

  • Fixed infobar on dash app
  • Better handling of X_space on dash app
  • Bug fixes for optim_progress
  • Improved color and axes of parity_plot

[0.8.0]

Added

  • Major improvements to testing and numerous small bug fixes to improve code robustness
  • Code coverage > 90%
  • New method for asserting equivalence of state_dicts during serialization

Modified

  • Objective PyTests separated
  • Constraint PyTests separated

[0.7.13]

Added

  • Campaign.Explainer now added to PyTests
  • Docstrings and typing to Explainer methods
  • Campaign.out property to dynamically capture measured responses "y" or objectives as appropriate
  • Campaign.evaluate method to map optimizer.evaluate method
  • DNN to PyTests

Modified

  • Fixed SHAP explainer analysis and visualization functions
  • Changed SHAP visualization colors to use obsidian branding
  • Moved sensitivity method from campaign.analysis to campaign.explainer
  • Moved Explainer testing from optimizer pytests to campaign pytests
  • Generalized plotting function MOO_results and renamed optim_progress
  • Campaign analysis and plotting methods fixed for
  • Greatly increased the number of samples used for DNNPosterior, increasing the stability of posterior predictions

Removed

  • Removed code chunks regarding unused optional inputs to PDP ICE function imported from SHAP GitHub

[0.7.12]

Added

  • More informative docstrings for optimizer.bayesian, optimizer.predict, to explain choices of surrogate models and aq_funcs

Modified

  • Renamed aq_func hyperparmeter "Xi_f" to "inflate"
  • Moved default aq_func choices for single/multi into aq_defaults of acquisition.config
  • Fixed and improved campaign analysis methods

[0.7.11]

Added

  • Documentation improvements

Modified

  • Naming conventions for modules (config, utils, base)
  • Import order convention for modules

[0.7.10]

Added

  • First (working) release on PyPI

[0.7.6]

Added

  • Added DNN surrogate model using EnsemblePosterior. Requries PosteriorList and IndexSampler during optimization
  • Added EHVI and NIPV aq_funcs
  • Added discarding of NaN X value and Y values
  • Target transforms now ignore NaN values
  • Quantile prediction to optimizer.predict() and surrogate.predict() to better suit non-GP models nad non-normal distributions

Modified

  • Generalized surrogate_botorch fitting for models which are not GPs
  • Generalzed torch.dtype using global variable for import obsidian.utils.TORCH_DTYPE
  • Improved some tensor.repeat() using tensor.repeat_interleave()
  • Switched EI, NEI, and qNEHVI to Log-EI versions based on BoTorch warning
  • Dropped "q" from qNEHVI / qNParEGO names
  • Simplified surrogate model loading in BO_optimizer
  • Changed name of surrogate.args/kwargs to surrogate.hps
  • Corrected typing in target transforms

Removed

  • Thompson sampling aq_func

[0.7.5]

Modified

  • Removed explainer from campaign attributes
  • Updated "features objectives" to operate on real space instead of scaled space; virtually no speed difference and tensor grads not needed
  • Improvements to campaign object and explainer object features
  • Switched all GenericMC and GenericMOMC objectives to custom objectives to simplify SOO vs MOO, and enable serialization
  • Added set_objective to campaign, and objective serialization
  • Bug fix for surrogate.save_state() with train_Y
  • Marked GPflat + categorical space test as an expected fail in pytest
  • Minor bug fixes and test improvements to improve coverage

[0.7.4]

Modified

  • Bug fix for qMean, made sure objective is used
  • Set up basic validation tests for parameters package

[0.7.3]

Modified

  • Moved plotting dependencies to main build
  • Updated Contributing section
  • Minor modifications to main Readme
  • Moved jupyterlab from docs to dev group

Removed

  • docs/readme.md; moved contents to CONTRIBUTING

[0.7.2]

Added

  • Added imported members to sphinx-autodoc results using all at module level
  • Included readme on main docs page, removed redundant link

Modified

  • Various cosmetic changes to autodoc and autosummary options
  • Shortened object names on TOC tree for readability
  • Removed autosummary from package and subpackage-level autodoc. Automated only at module level with templates
  • Split subpackages into regular and "shallow" templates, to expose different meaningful levels on the toctree
  • Updated sphinx theme with more preferred navigation features

Removed

  • Unused dependencies from pyproject.toml

[0.7.1]

Modified

  • Evaluate now does not calculate aq_func by default, to speed up evaluation of objective
  • Bug fixes for optimizer.evaluate() under fringe tests
  • Updated license to GPLv3 on Readme
  • Removed Merck references and updated branding

[0.7.0]

Added

  • optimizer.evaluate() to handle y_predict, f_predict, o_predict, and a_predict independently of optimize.suggest()

Modified

  • Regardless of q_batch, evaluate aq functions on each sample individually, then as a joint sample
  • Made sure that X_baseline accepted X_pending
  • Made sure that ref_point and f_best in aq_hps are now based on objectives, not raw responses

Removed

  • Removed o_dim and optim_type from optimizer.attrs to better support stateless operation
  • No longer calculate hypervolume or pareto front on raw responses; only after considering objectives
  • Removed y_pareto from optimizer.attrs
  • Temporarily removed campaign._analyze due to bugs with _hv

[0.6.11]

Added

  • Added plotting module to test coverage
  • Reloading/fitting f_train in optimizer.load_state
  • Added default_campaign.json to test directory, for faster testing using pre-fit objects
  • Added matplotlib plotting library
  • Can now provide X_pending to suggest, so that users can manually do iterative suggestions

Modified

  • Various plotting bug fixes
  • Ensure that paramspace encode/unit_map return double dtypes

[0.6.10]

Added

  • Added getitem to ParamSpace to enable X_space[idx]

Modified

  • Overhaul of all encode/decode and map/demap functions using a decorator to handle robust typing
  • Bug fix for SHAP_explain resulting from object dtypes with new encode functions

[0.6.9]

Added

  • Added notebook tutorials to docs
  • repr method for Target

Modified

  • Bug fixes in factor_plot with X_ref provided
  • Fixed bug where categorical encoding wouldn't work if all categories were numerical strings
  • Changed categorical OH-encode separator from _ to ^ and protected against usage in X_names

[0.6.8]

Modified

  • Dash app updates with module refactoring
  • Minor refactoring of param_space discrete handling
  • Replaced assert statements with appropriate Python base exceptions, added custom obsidian exceptions as necessary
  • Moved benchmark module to obsidian.experiment

Removed

  • Removed deprecated examples

[0.6.7]

Added

  • Dev capabilities for document generation using sphinx
  • Module docstrings

[0.6.6]

Modified

  • Overhaul of class and method docstrings

Removed

  • Removed parameter.type and replaced with isinstance checking and class.name loading

[0.6.5]

Added

  • Custom exception handling
  • Composite objectives
  • Utopian point support for SOO and MOO
  • Bounded target support for SOO and MOO
  • Bounding for only selected targets in multi-output scenarios

Modified

  • Completed refactored weighted MOO to separate out component parts of scalarization, utopian distance, norming, and bounding
  • Greatly simplified the structure of aq_kwargs based on the above

Removed

  • weightedMOO acquisition function
  • Dynamic reference point utility

[0.6.4]

Added

  • More custom objectives

Modified

  • Switched default single-objective aq from EI to NEI

Removed

  • Simplex sampling of weights for weightedMOO; if weights aren't provided, even weights are used

[0.6.3]

Modified

  • Moved "explain" functionality to base optimizer
  • Added backup exceptions to catch fit_gpytorch
  • Enabled multi-output objectives to expand single-response models (e.g. using X features)
  • Enabled single-output objectives to condense multi-response models (e.g. scalarization)
  • Updated demo notebooks
  • Fixed error with calling campaign._profile_max after every fit

Removed

  • Redundant objective formulations
  • Removed GPFlex model, which is now redundant with multi-output objective

[0.6.2]

Modified

  • Updated all plotly plotting methods for new optimizer methods
  • Updated typing and enabled multi-objective on custom aq functions

[0.6.1]

Modified

  • Added new features to campaign object
  • Moved "seed" kwarg to ExpDesigner.init, consistent with BayesianOptimizer
  • Added hypervolume and pareto calculations (incl. pf_distance) to base optimizer
  • Fixed bug with target_transforms sharing hyperparameters because of bad initialization

[0.6.0]

Added

  • Task parameters and multi-task learning
  • Added "index" objective to select tasks for optimization in multi-task learning
  • Fixed bugs related to torch dtype mismatches

[0.5.7]

Modified

  • Fixed cat_dims specification for surrogate models so that they do not include ordinal params
  • Overhauled f_transform approach to avoid scikit-learn and be more customizable
  • Enforced abstractmethods on various classes

[0.5.7]

Modified

  • Fixed cat_dims specification for surrogate models so that they do not include ordinal params
  • Overhauled f_transform approach to avoid scikit-learn and be more customizable
  • Enforced abstractmethods on various classes

[0.5.6]

Modified

  • Added utopian point subtraction to all scalarization methods, made optional also
  • Moved PI_bounded weightedMOO to its own objective called "boundedMOO"
  • Fixed error where default hyperparameters were being written back to objects outside of the optimizer
  • Fixed bugs with new parameter types in experiment design modules
  • Added pytest parametrization to improve scope of tests
  • Added pytest attributes (slow, fast) to manage speed

[0.5.5]

Modified

  • Fixed bug with _fixed_features generation when fixed_var is specified
  • Updated all MOO custom aq functions to match current BoTorch patterns

Removed

  • PI_bounded acquisition function, due to various issues. MOO_weighted with PI_bounded+weights scalarization does work

[0.5.4]

Modified

  • Added Param_Discrete_Numeric class (parent Param_Discrete)
  • Added Param_Observational subclass to parent Continuous class which can be used for fitting but avoid optimization

[0.5.3]

Modified

  • Implemented checks and validation to enforce the order of X, y, and targets across ParamSpace, Optimizer, Surrogate as appropriate
    • Note: Only Optimizer can handle extraneous or re-ordered columns, but they will be processed before passing to Surrogate

[0.5.2]

Modified

  • Fixed input/output constraints
  • Added de/transformation to output constraints (applied to target samples)
  • Added de/transformation to input constraints (applied to coefficients and RHS)
  • Implemented a de/transform map for ParamSpace in order to handle constraints in the encoded input space
  • Implemented a non-linear input constraint which keeps the range of one dimension in a joint optimization < 1% of the max-min

[0.5.1]

Added

  • Constrained multi-objective example notebook
  • Allowed optimizer.suggest() on a subset of fit responses
  • Enabled optimizer.maximize() for multi-response models based on the above
  • Added custom multi-output objective class
  • Fixed constraints specification, as we were using output constraints. Added input constraints to TODO
  • Added parameter name to lb/ub labels in optimizer.predict() to avoid index issues

Modified

  • Custom constraints are now specified as a constructer, so that parameters can be added and a callable is returned

[0.5.0]

Added

  • New object-oriented design for several classes: Campaign Parameter ParamSpace Target Objective and Constraint