EngiBench offers a collection of engineering design problems, datasets, and benchmarks to facilitate the development and evaluation of optimization and machine learning algorithms for engineering design. Our goal is to provide a standard API to enable researchers to easily compare and evaluate their algorithms on a wide range of engineering design problems.
pip install engibench
You can also specify additional dependencies for specific problems:
pip install "engibench[beams2d]"
Or you can install all dependencies for all problems:
pip install "engibench[all]"
from engibench.problems.beams2d.v0 import Beams2D
# Create a problem
problem = Beams2D()
# Inspect problem
problem.design_space # Box(0.0, 1.0, (50, 100), float64)
problem.objectives # (("compliance", "MINIMIZE"),)
problem.conditions # (("volfrac", 0.35), ("forcedist", 0.0),...)
problem.dataset # A HuggingFace Dataset object
# Train your models, e.g., inverse design
# inverse_model = train_inverse(problem.dataset)
desired_conds = {"volfrac": 0.7, "forcedist": 0.3}
# generated_design = inverse_model.predict(desired_conds)
random_design, _ = problem.random_design()
# check constraints on the design, config pair
violated_constraints = problem.check_constraints(design=random_design, config=desired_conds)
if not violated_constraints:
# Only simulate to get objective values
objs = problem.simulate(design=random_design, config=desired_conds)
# Or run a gradient-based optimizer to polish the design
opt_design, history = problem.optimize(starting_point=random_design, config=desired_conds)
You can also play with the API here:
Both EngiBench and EngiOpt are open source projects and we welcome contributions! If you want to add a new problem, please reach out to us first to see if it is a good fit for EngiBench.
To install EngiBench for development, clone the repo, install the pre-commit hooks, and install all dev dependencies:
git clone git@github.com:IDEALLab/EngiBench.git
cd EngiBench
pre-commit install
pip install -e ".[dev]"
Also worth installing ruff
and mypy
in your editor as we are checking the code style and type safety on our CI.
See docs/tutorials/new_problem.md.
The code of EngiBench and EngiOpt is licensed under the GPLv3 license. See the LICENSE file for details. All the associated datasets are licensed under the CC-BY-NC-SA 4.0 license.
If you use EngiBench in your research, please cite the following paper:
TODO