Skip to main content

Benchmark Functions for JAX

| GitHub | PyPI | Documentation | Zenodo

JAX implementations of the BBOB benchmark functions (Finck et al., 2009) 1, the CEC 2005 benchmark functions (Suganthan et al., 2005) 2 and the CEC 2017 benchmark functions (Awad et al., 2016) 3 for black-box optimization.

First publication: October 17, 2025


Summary

bbob-jax is a pure-JAX reimplementation of three standard black-box optimization benchmark suites: the 24 noise-free BBOB functions (Finck et al., 2009), the 25 CEC 2005 real-parameter functions (Suganthan et al., 2005) and the 29 CEC 2017 bound-constrained functions (Awad et al., 2016; F2 was officially withdrawn). Every function is differentiable, JIT-compilable, and vectorizable via vmap, and is exposed through a simple registry that returns a ready-to-call objective together with its global minimum, as well as a problem() accessor that additionally bundles the optimum location, search-space bounds and metadata tags in one lookup. Both randomized (shifted and rotated) and deterministic factory variants are provided.

Statement of need

The BBOB and CEC benchmark suites are cornerstones of black-box optimization research. This repository provides JAX reimplementations of all three: the 24 BBOB noise-free functions originally written in C, the 25 CEC 2005 real-parameter functions, and the 29 CEC 2017 bound-constrained functions (simple, hybrid and composition). Translating these suites to JAX enables automatic differentiation, just-in-time (JIT) compilation, and XLA-accelerated performance — making them ideal for research in optimization, machine learning, and evolutionary algorithms.

BBOB functions 3D overview
3D surface plots of the 24 BBOB benchmark functions.

BBOB functions 2D overview
2D contour plots of the 24 BBOB benchmark functions.

CEC 2005 functions 3D overview
3D surface plots of the 25 CEC 2005 benchmark functions.

CEC 2005 functions 2D overview
2D contour plots of the 25 CEC 2005 benchmark functions.

CEC 2017 functions 3D overview
3D surface plots of the 29 CEC 2017 benchmark functions.

CEC 2017 functions 2D overview
2D contour plots of the 29 CEC 2017 benchmark functions. Panels marked "(2D slice of nD)" show a 2D slice through the optimum plane of functions only defined from n dimensions up.

Authorship & Citation

Authors:

Authors affiliation:

  • Delft University of Technology (Bessa Research Group)

Maintainer:

Maintainer affiliation:

  • Delft University of Technology (Bessa Research Group)

If you use bbob-jax in your research or in a scientific publication, it is appreciated that you cite the paper below:

Zenodo (link):

@software{vanderSchelling2025,
  title        = {Black-box optimization benchmarking (bbob) problem
                   set for JAX},
  author       = {van der Schelling, M. P. and Bessa, M A.},
  month        = {nov},
  year         = {2025},
  publisher    = {Zenodo},
  version      = {v1.0.0},
  doi          = {10.5281/zenodo.17426894},
  url          = {https://doi.org/10.5281/zenodo.17426894},
}

Gradient-friendly implementations

Many BBOB functions use non-smooth operations (abs, sign, sqrt, max, min) that produce zero, undefined, or infinite gradients at certain points. This library uses softjax straight-through estimators to provide well-defined gradients everywhere while keeping the forward pass exactly equal to the original function definitions.

For example, jnp.abs(x) has a zero gradient at x = 0 and jnp.sqrt(x) has an infinite gradient at x = 0. The softjax replacements (sj.abs_st, sj.sqrt) return the exact same values but route gradients through smooth approximations during the backward pass. This means jax.grad produces useful, finite gradients without any loss of benchmark fidelity.

Functions that are intentionally non-smooth (F7 step_ellipsoid, F23 katsuura) are left unchanged — smoothing them would defeat their benchmarking purpose.

Getting started

To install the package, use pip:

pip install bbob-jax

Related Work

This project builds on and complements established benchmarking efforts and tooling in black-box optimization. The resources below are closely related and provide broader context and utilities.

Community Support

If you find any issues, bugs or problems with this package, please use the GitHub issue tracker to report them.

License

Copyright (c) 2025, Martin van der Schelling

All rights reserved.

This project is licensed under the BSD 3-Clause License. See LICENSE for the full license text.

Related repositories

bbob-jax provides the benchmark functions used across the L2CO ecosystem developed in the Bessa Research Group. The repositories below work together:

  • l2co — Learning to Choose Optimizers: a meta-learner that selects an optimizer from problem features before any evaluations, then reassesses that choice from the observed optimization trajectory.
  • rl2co — Reinforcement Learning to Choose Optimizers: a JAX-based RL agent that dynamically switches between optimizers during a run.
  • l2co-tasks — Optimization task definitions (BBOB, CEC 2005, PDE, spiral, …) compatible with the L2CO library.
  • l2co_experiments — Hydra + f3dasm experiment pipelines (dataset creation, training, rollouts, figures) for the L2CO studies.
  • agentic-l2co — An LLM-agent drop-in replacement for l2co.L2COModel, driving two-stage optimizer selection with an Ollama-hosted LLM.
  • bbob-jax — JAX implementations of the BBOB, CEC 2005 and CEC 2017 black-box optimization benchmark functions.
  • f3dasm — Framework for Data-Driven Design and Analysis of Structures and Materials; provides ExperimentData, pipelines, and SLURM orchestration.
  1. Finck, S., Hansen, N., Ros, R., and Auger, A. (2009), Real-parameter black-box optimization benchmarking 2009: Noiseless functions definitions, INRIA.

  2. Suganthan, P. N., Hansen, N., Liang, J. J., and Deb, K. (2005), Problem Definitions and Evaluation Criteria for the CEC 2005 Special Session on Real-Parameter Optimization.

  3. Awad, N. H., Ali, M. Z., Liang, J. J., Qu, B. Y., and Suganthan, P. N. (2016), Problem Definitions and Evaluation Criteria for the CEC 2017 Special Session and Competition on Single Objective Real-Parameter Numerical Optimization.

  4. Hansen, N., Auger, A., Ros, R., Mersmann, O., Tušar, T., and Brockhoff, D. (2021), COCO: A Platform for Comparing Continuous Optimizers in a Black-Box Setting. Optimization Methods and Software, 36(1), 114–144. https://doi.org/10.1080/10556788.2020.1808977

  5. Lange, R. T. (2022), evosax: JAX-based Evolution Strategies. arXiv preprint arXiv:2212.04180.

Download files

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

Source Distribution

bbob_jax-1.8.0.tar.gz (60.8 kB view details)

Uploaded Source

Built Distribution

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

bbob_jax-1.8.0-py3-none-any.whl (54.4 kB view details)

Uploaded Python 3

File details

Details for the file bbob_jax-1.8.0.tar.gz.

File metadata

  • Download URL: bbob_jax-1.8.0.tar.gz
  • Upload date:
  • Size: 60.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.13

File hashes

Hashes for bbob_jax-1.8.0.tar.gz
Algorithm Hash digest
SHA256 88666095aa7593b435976fcf6bc741ba5bc38c3a92d2becbe373d13b5834bf02
MD5 a2e22710d2e7e5a65240eb31305b6244
BLAKE2b-256 7a23497f04ae346d51ccd1db104d9c2c4b937ddcede3a7bae3b018550a22546c

See more details on using hashes here.

File details

Details for the file bbob_jax-1.8.0-py3-none-any.whl.

File metadata

  • Download URL: bbob_jax-1.8.0-py3-none-any.whl
  • Upload date:
  • Size: 54.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.13

File hashes

Hashes for bbob_jax-1.8.0-py3-none-any.whl
Algorithm Hash digest
SHA256 db20ce307867ed3de40443895c087b62c8d2e083d429099db0fb4feb44c0bd43
MD5 d70eacf929615b613db9493415a8d4a8
BLAKE2b-256 a0749273ff967bbf8bd2583e87598e052797178dd8adf59c0467c01be621edd0

See more details on using hashes here.

Release history Release notifications | RSS feed

2.1.0

2 files

2.0.0

2 files

This release

1.8.0 This release

2 files

1.7.0

2 files

1.6.5

2 files

1.6.4

2 files

1.6.3

2 files

1.6.2

2 files

1.6.1

2 files

1.6.0

2 files

1.5.0

2 files

1.4.0

2 files

1.3.0

2 files

1.2.0

2 files

1.1.1

2 files

1.1.0

2 files

1.0.0

2 files

0.6.0

2 files

0.5.0

2 files

0.4.0

2 files

0.3.0

2 files

0.2.0

2 files

0.1.0

2 files

Supported by

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