OPTIMEO is a package doubled by a web application that helps you optimize your experimental process by generating a Design of Experiment, generating new experiments using Bayesian Optimization (BO), and analyzing the results of your experiments using Machine Learning models. The OPTIMEO package is aimed at helping scientists of any field to reach the optimum parameters of their process using the minimum amount of resources and effort. Therefore, it is based on BO for its data efficiency: when each experiment might take one or more day to run and characterize, it is much preferable to use BO to determine which parameters to use to minimize the number of experiments to run.
This package was developed within the frame of an academic research project, MOFSONG, funded by the French National Research Agency (N° ANR-24-CE08-7639). See the related paper reference in How to cite.
The package documentation is available here.
Installing the package and its dependencies should take up about 1.3 GB on your hard disk, the main "heavy" dependencies being botorch, scikit_learn, plotly, scipy, pandas and streamlit.
It should be easy enough with pip:
git clone https://github.com/colinbousige/OPTIMEO.git
cd OPTIMEO
# Otional: create a virtual environment
python -m venv venv
source venv/bin/activate # on Linux or MacOS
# Then, install OPTIMEO as a package:
pip install .If you did pip install ., you can upgrade to new a version or uninstall with:
# upgrade the optimeo package
cd OPTIMEO
pip install --upgrade .
# uninstall the optimeo package
pip uninstall optimeo-
You can use the app directly on its Streamlit.io web page, but it might be a bit slow if you have a lot of data to process.
-
If you'd rather run this app on your local machine (which will most probably make it faster than running it on streamlit.io), you can do so by running the following command in your terminal:
git clone https://github.com/colinbousige/OPTIMEO.git
cd OPTIMEO
# Otional: create a virtual environment
python -m venv venv
source venv/bin/activate # on Linux or MacOS
# Then, install the required packages:
pip install -r requirements.txt # to install the required packagesFinally, you can run the app by running the following command in your terminal:
streamlit run Home.py- You can also modify the path to the
OPTIMEOfolder inOPTIMEO/bin/optimeo. Then, doing the following will add theoptimeocommand to yourPATH:
git clone https://github.com/colinbousige/OPTIMEO.git
cd OPTIMEO
pip install . # to install OPTIMEO as a package
chmod +x bin/optimeo
ln -s $(pwd)/bin/optimeo /usr/local/bin/optimeo # or any folder in your PATHSo now, you just have to run optimeo in your terminal to run the app.
You can use the app directly on its Streamlit.io web page, or run it locally (see Installation). It is recommended to run it locally if you have a lot of data to process, as it will be much faster.
Choose the page you want to use in the sidebar, and follow the instructions. Hover the mouse on the question marks to get more information about the parameters.
1. Design of Experiment:
Generate a Design of Experiment (DoE) for the optimization of your process. Depending on the number of factors and levels, you can choose between different types of DoE, such as Sobol sequence, Full Factorial, Fractional Factorial, or Definitive Screening Design.
2. New experiments using Bayesian Optimization:
From a previous set of experiments and their results, generate a new set of experiments to optimize your process. You can use up to 10 outcomes, of which 2 can be objectives (i.e. outcomes that you want to minimize or maximize) and the outcomes that are not objectives can be constrained.
3. Data analysis and modeling:
Analyze the results of your experiments and model the response of your process.
You might want to use the app as a Python package in order to integrate it in your own code, or to automate some tasks. For example:
- you are maybe using a robotic platform to run your experiments and characterize your results, and you want to use Bayesian Optimization to suggest new experiments to run automatically
- you are running a simulation and you want to optimize its parameters using Design of Experiment and Bayesian Optimization.
You can also use the app as a Python package (see Installation). You can import the different modules of the app and use them in your own code. Here is an example of how to use the app as a package:
A more detailed example is given in the notebook.
from optimeo.doe import *
parameters = [
{'name': 'Temperature', 'type': 'integer', 'values': [20, 40]},
{'name': 'Pressure', 'type': 'float', 'values': [1, 2, 3]},
{'name': 'Catalyst', 'type': 'categorical', 'values': ['A', 'B', 'C']}
]
doe = DesignOfExperiments(
type='Sobol sequence',
parameters=parameters,
Nexp=8
)
doeA more detailed example is given in the notebook.
from optimeo.bo import *
features, outcomes = read_experimental_data('experimental_data.csv', out_pos=[-1])
bo = BOExperiment(
features=features,
outcomes=outcomes,
N = 2, # number of new points to generate
maximize=True, # we want to maximize the response
fixed_features=None,
feature_constraints=None,
optim = 'bo'
)
bo.suggest_next_trials()A more detailed example is given in the notebook.
from optimeo.analysis import *
data = pd.read_csv('dataML.csv')
factors = data.columns[:-1].tolist()
response = data.columns[-1]
analysis = DataAnalysis(data, factors, response)
analysis.model_type = "ElasticNetCV"
MLmodel = analysis.compute_ML_model()
figs = analysis.plot_ML_model()
for fig in figs:
fig.show()This app was made by Colin Bousige. Contact me for support or to signal a bug, or leave a message on the GitHub page of the app.
This work has been published in the article "OPTIMEO: Bayesian Optimization Web App for Process Tuning, Modeling, and Orchestration", C. Bousige, J. Open Source Softw. 10, 115 (2025), 8510. Please cite this paper if you publish using this code:
@article{bousige_optimeo_2025,
title = {{{OPTIMEO}}: {{Bayesian Optimization Web App}} for {{Process Tuning}}, {{Modeling}}, and {{Orchestration}}},
author = {Bousige, Colin},
year = 2025,
journal = {J. Open Source Softw.},
volume = {10},
number = {115},
pages = {8510},
doi = {10.21105/joss.08510}
}This work was supported by the French National Research Agency (N° ANR-24-CE08-7639).
Also, this work was made possible thanks to the following open-source projects:
This project is licensed under the MIT License - see the LICENSE file for details
