Multi-Disciplinary Optimization with Bayesian Collaborative Frameworks
MDOToolbox is a Python library for solving multi-disciplinary optimization (MDO) problems using hierarchical decomposition and Bayesian optimization. It provides five optimization frameworks, Gaussian Process surrogates, and a suite of built-in benchmark problems for rapid prototyping and research.
@inproceedings{baco2026,
author = {Belhafnaoui, Mohamed Ali and Diouane, Youssef},
title = {{A Bayesian Algorithm for Collaborative Optimization with Application to Aircraft Design}},
booktitle = {{AIAA Aviation 2026}},
year = {2026},
address = {San-Diego, California},
month = jun,
publisher = {American Institute of Aeronautics and Astronautics},
% doi = {xxx}
}- Multiple MDO frameworks — CO, BACO, ICO, MCO, and ECO for different problem classes
- Bayesian optimization with Gaussian Process surrogates for expensive black-box functions
- 7 built-in benchmark problems covering analytical, mechanical, thermal, biomedical, and chemical domains
- Parallel multi-start acquisition optimization for robust global search
- Support for constrained and unconstrained optimization
Basic install:
pip install mdotoolboxDevelopment install (with test dependencies):
pip install -e ".[test]"Dependencies: numpy, scipy, smt, joblib, numba, matplotlib, scikit-learn, gpytorch, torch, jaxtyping, typeguard, pandas, openmdao, openaerostruct, pymc.
This example solves the classic Sellar benchmark problem using the Bayesian Collaborative Optimization (BACO) framework:
import numpy as np
from mdotoolbox.benchmarking import sellar_problem
from mdotoolbox.frameworks import (
BayesianCollaborativeOptimisation,
BACOSubsystem,
BACOSystem,
)
# Load benchmark problem
problem_dict = sellar_problem()
# Build system
subsystems = [BACOSubsystem(**sub) for sub in problem_dict["subsystems"]]
system = BACOSystem(
problem=problem_dict["system_problem"],
subsystems=subsystems,
)
# Create and run solver
solver = BayesianCollaborativeOptimisation(
system=system,
subsystem_optimizer="cobyqa",
system_optimizer="cobyqa",
epsilon_J=1e-6,
epsilon_h=1e-6,
max_eval=50,
n_multistart=5,
n_initial=8,
)
z0 = np.array([5.0, 2.0])
x0 = np.array([1.0])
y0 = np.array([1.0, 1.0])
results = solver.solve(z0, x0, y0)
print(results)| Framework | Description | Best For |
|---|---|---|
| CO (Collaborative Optimization) | Classical bilevel formulation | Well-behaved problems; fastest when it works |
| BACO (Bayesian Collaborative Optimization) | CO with GP surrogates | Expensive simulations; efficient with function evaluations |
| ICO (Improved Collaborative Optimization) | Enhanced convergence | When CO has convergence issues |
| MCO (Modified Collaborative Optimization) | Alternative formulation | Experimental problems |
| ECO (Enhanced Collaborative Optimization) | Advanced convergence criteria | Best convergence guarantees; slowest but most reliable |
| Function | Description |
|---|---|
sellar_problem() |
Classic 2-discipline analytical benchmark |
scalable_mdo_problem() |
Configurable scalable problem with adjustable size |
speed_reducer_problem() |
Mechanical engineering design problem |
electronic_packaging_problem() |
Thermal management problem |
heart_dipole_problem() |
Biomedical application |
power_converter_problem() |
Power electronics design |
propane_combustion_problem() |
Chemical process optimization |
All benchmark functions return a dictionary with system_problem and subsystems keys, ready to pass into any framework.
.
├── src/mdotoolbox/ # Core library source
├── docs/ # Documentation source
├── pyproject.toml # Build and dependency configuration
└── README.md # Project overview
See CONTRIBUTING.md for development setup, testing instructions, and contribution guidelines.
Apache License 2.0 — see LICENSE for details.
- Documentation: https://moebehfn.github.io/mdotoolbox/
- Repository: https://github.com/moebehfn/mdotoolbox
- Author: Mohamed Ali Belhafnaoui (mohamed-ali.belhafnaoui@etud.polymtl.ca)