Skip to main content

Automated experiment design and black-box optimization

Project description

obsidian logo

obsidian

Supports Python License Issues PyPI Docs Codecov

obsidian is a library for algorithmic process design and black-box optimization using AI-guided experiment design

pip install obsidian-apo

The obsidian library offers a set of modules for designing, executing, analyzing, and visualizing algorithmic process optimization (APO) using sample-efficient strategies such as Bayesian Optimization (BO). obsidian uses highly flexible models to build internal representations of the measured system in a way that can be explored for characterization and exploited for maximization based on uncertainty estimation and exploration strategies. obsidian supports batch experimentation (joint optimization and parallel evaluation) and is highly configurable for varying use cases, although the default specifications are encouraged.

We thank you for your patience and invite you to collaborate with us while obsidian is in beta!

Key Features

  1. End-User-Friendly: Designed to elevate the average process development scientist. No machine learning experience required.
  2. Deployable using pre-built Dash application (pip install obsidian-apo[app]). Each class is fully serializable, without third-party packages, to enable web-based API usage.
  3. Explainable and visualizable using SHAP analysis and interactive figures.
  4. Flexible: Handles any input (numeric, discrete) and optionally input/output constraints, multiple outcomes, batch optimization, and a variety of novelty objective compositions. We know that experiment campaigns can have fluctuating objectives and resources, and obsidian is built to support that.
  5. Purpose-Driven Development: Impactful features proposed, developed, maintained, and used by laboratory bench scientists. Revelantly designed for process development, optimization, and characterization.

How it Works: Algorithmic Optimization

The workflow for algorithmic process optimization is an iterative workflow of the following steps:

  1. Collect data
  2. Fit a model to the data and estimate uncertainty across a design space
  3. Search for new experiments and evaluate for objective and/or informational utility
  4. Design experiments where utility is maximized
  5. Repeat

The central object ob the obsidian library is the BayesianOptimizer, which can be optionally wrapped by a Campaign. A bayesian optimization has two key components that govern the optimization:

  1. The surrogate model: A black-box model which is regressed to data and used for inference. Most often a Gaussian Process (surrogate='GP').
  2. The acquisition function: A mathematical description of the quality of potential experiments, as it pertains to optimization. Most often Expected Improvement (acquisition=['EI']).

Usage Example

Specify Parameters & Initialize a Design

from obsidian import Campaign, ParamSpace, Target
from obsidian.parameters import Param_Categorical, Param_Ordinal, Param_Continuous

params = [
    Param_Continuous('Temperature', -10, 30),
    Param_Continuous('Concentration', 10, 150),
    Param_Continuous('Enzyme', 0.01, 0.30),
    Param_Categorical('Variant', ['MRK001', 'MRK002', 'MRK003']),
    Param_Ordinal('Stir Rate', ['Low', 'Medium', 'High']),
    ]

X_space = ParamSpace(params)
target = Target('Yield', aim='max')
campaign = Campaign(X_space, target)
X0 = campaign.designer.initialize(10, 'LHS', seed=0)
Temperature Concentration Enzyme Variant Stir Rate
0 8 17 0.1405 MRK001 Medium
1 12 143 0.1695 MRK003 Medium
2 4 101 0.2855 MRK002 High
3 28 87 0.1115 MRK002 Low
4 -4 115 0.2275 MRK001 Low
5 -8 73 0.0825 MRK002 Medium
6 20 129 0.0535 MRK001 High
7 24 31 0.2565 MRK002 Medium
8 16 59 0.1985 MRK003 High
9 0 45 0.0245 MRK003 Low

Collect Data and Fit the Optimizer

campaign.add_data(Z0)
campaign.fit()

Suggest New Experiments

campaign.suggest(m_batch=2)
Temperature Concentration Enzyme Variant Stir Rate Yield (pred) Yield lb Yield ub aq Method aq Value
0 -10 10 0.0918096 MRK001 Medium 112.497 102.558 122.436 EI 0.848569
1 -10 150 0.0882423 MRK002 High 89.8334 79.8589 99.8079 EI 0.870511

Interpret Results

from obsidian.plotting import surface_plot, optim_progress
surface_plot(campaign.optimizer, feature_ids=(0,2))
obsidian app

optim_progress(campaign)
obsidian app

from obsidian.campaign import Explainer
exp = Explainer(campaiagn)
exp.shap_explain()
exp.shap_summary()
obsidian app

exp.shap_pdp_ice(ind = 2, ice_color_var = 3)
obsidian app

Installation

The latest obsidian release can be installed using pip:

pip install obsidian-apo

To install the required dependencies for running the Dash app:

pip install obsidian-apo[app]

Be sure to pip install in a newly created conda environment to avoid dependency conflicts.

Launching the App

Clone this repository using the following command:

git clone https://github.com/MSDLLCpapers/obsidian.git

With obsidian-apo[app] installed on an activate Python environment, navigate to the new folder and simply run the folloiwng command:

python app.py
obsidian app

Contributing

See CONTRIBUTING to learn more.

Developers

Contributors

  • Ajit Vikram (Merck & Co., Inc.)
  • Melodie Christensen (Merck & Co., Inc.)
  • Kobi Felton (Merck & Co., Inc.)

License

obsidian is licensed by the GPLv3 license.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

obsidian_apo-0.8.6.tar.gz (109.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

obsidian_apo-0.8.6-py3-none-any.whl (144.4 kB view details)

Uploaded Python 3

File details

Details for the file obsidian_apo-0.8.6.tar.gz.

File metadata

  • Download URL: obsidian_apo-0.8.6.tar.gz
  • Upload date:
  • Size: 109.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.1 CPython/3.12.1 Linux/6.8.0-1021-azure

File hashes

Hashes for obsidian_apo-0.8.6.tar.gz
Algorithm Hash digest
SHA256 5cbb599b867918405b512de6ebb785a1d8931b5e1d94b156d6a3c1bc2e4725fe
MD5 d427ec52d10416391a0b640abd2a23ec
BLAKE2b-256 91d6aeb64c843b84d990ec7911129e2a3e940299dec44b6d54b88674f399b96f

See more details on using hashes here.

File details

Details for the file obsidian_apo-0.8.6-py3-none-any.whl.

File metadata

  • Download URL: obsidian_apo-0.8.6-py3-none-any.whl
  • Upload date:
  • Size: 144.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.1 CPython/3.12.1 Linux/6.8.0-1021-azure

File hashes

Hashes for obsidian_apo-0.8.6-py3-none-any.whl
Algorithm Hash digest
SHA256 e5f686a919676ef86823f2206eafc463dddfd06fc3941832f05076e2c0f53ca1
MD5 d0e7e2e8951a1f991ce32e19e1da576c
BLAKE2b-256 e6b1cdad1747e393c4098e9c6c6f9a3da6b6beceaf6728d87d5b6f7a1aba4bc5

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page