Metadata-Version: 2.4 Name: optuna Version: 4.6.0 Summary: A hyperparameter optimization framework Author: Takuya Akiba Project-URL: homepage, https://optuna.org/ Project-URL: repository, https://github.com/optuna/optuna Project-URL: documentation, https://optuna.readthedocs.io Project-URL: bugtracker, https://github.com/optuna/optuna/issues Classifier: Development Status :: 5 - Production/Stable Classifier: Intended Audience :: Science/Research Classifier: Intended Audience :: Developers Classifier: License :: OSI Approved :: MIT License Classifier: Programming Language :: Python :: 3 Classifier: Programming Language :: Python :: 3.9 Classifier: Programming Language :: Python :: 3.10 Classifier: Programming Language :: Python :: 3.11 Classifier: Programming Language :: Python :: 3.12 Classifier: Programming Language :: Python :: 3.13 Classifier: Programming Language :: Python :: 3 :: Only Classifier: Topic :: Scientific/Engineering Classifier: Topic :: Scientific/Engineering :: Mathematics Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence Classifier: Topic :: Software Development Classifier: Topic :: Software Development :: Libraries Classifier: Topic :: Software Development :: Libraries :: Python Modules Requires-Python: >=3.9 Description-Content-Type: text/markdown License-File: LICENSE License-File: LICENSE_THIRD_PARTY Requires-Dist: alembic>=1.5.0 Requires-Dist: colorlog Requires-Dist: numpy Requires-Dist: packaging>=20.0 Requires-Dist: sqlalchemy>=1.4.2 Requires-Dist: tqdm Requires-Dist: PyYAML Provides-Extra: benchmark Requires-Dist: asv>=0.5.0; extra == "benchmark" Requires-Dist: cma; extra == "benchmark" Requires-Dist: virtualenv; extra == "benchmark" Provides-Extra: checking Requires-Dist: black<25.9.0; extra == "checking" Requires-Dist: blackdoc<0.4.2; extra == "checking" Requires-Dist: flake8; extra == "checking" Requires-Dist: isort; extra == "checking" Requires-Dist: mypy; extra == "checking" Requires-Dist: mypy_boto3_s3; extra == "checking" Requires-Dist: scipy-stubs; python_version >= "3.10" and extra == "checking" Requires-Dist: types-PyYAML; extra == "checking" Requires-Dist: types-redis; extra == "checking" Requires-Dist: types-setuptools; extra == "checking" Requires-Dist: types-tqdm; extra == "checking" Requires-Dist: typing_extensions>=3.10.0.0; extra == "checking" Provides-Extra: document Requires-Dist: ase; extra == "document" Requires-Dist: cmaes>=0.12.0; extra == "document" Requires-Dist: fvcore; extra == "document" Requires-Dist: kaleido<0.4; extra == "document" Requires-Dist: lightgbm; extra == "document" Requires-Dist: matplotlib!=3.6.0; extra == "document" Requires-Dist: pandas; extra == "document" Requires-Dist: pillow; extra == "document" Requires-Dist: plotly>=4.9.0; extra == "document" Requires-Dist: scikit-learn; extra == "document" Requires-Dist: sphinx; extra == "document" Requires-Dist: sphinx-copybutton; extra == "document" Requires-Dist: sphinx-gallery; extra == "document" Requires-Dist: sphinx-notfound-page; extra == "document" Requires-Dist: sphinx_rtd_theme>=1.2.0; extra == "document" Requires-Dist: torch; extra == "document" Requires-Dist: torchvision; extra == "document" Provides-Extra: optional Requires-Dist: boto3; extra == "optional" Requires-Dist: cmaes>=0.12.0; extra == "optional" Requires-Dist: google-cloud-storage; extra == "optional" Requires-Dist: matplotlib!=3.6.0; extra == "optional" Requires-Dist: pandas; extra == "optional" Requires-Dist: plotly>=4.9.0; extra == "optional" Requires-Dist: redis; extra == "optional" Requires-Dist: scikit-learn>=0.24.2; extra == "optional" Requires-Dist: scipy; extra == "optional" Requires-Dist: torch; extra == "optional" Requires-Dist: greenlet; extra == "optional" Requires-Dist: grpcio; extra == "optional" Requires-Dist: protobuf>=5.28.1; extra == "optional" Provides-Extra: test Requires-Dist: coverage; extra == "test" Requires-Dist: fakeredis[lua]; extra == "test" Requires-Dist: kaleido<0.4; extra == "test" Requires-Dist: moto; extra == "test" Requires-Dist: pytest; extra == "test" Requires-Dist: pytest-xdist; extra == "test" Requires-Dist: scipy>=1.9.2; extra == "test" Requires-Dist: torch; extra == "test" Requires-Dist: greenlet; extra == "test" Requires-Dist: grpcio; extra == "test" Requires-Dist: protobuf>=5.28.1; extra == "test" Dynamic: license-file
# Optuna: A hyperparameter optimization framework [![Python](https://img.shields.io/badge/python-3.9%20%7C%203.10%20%7C%203.11%20%7C%203.12%20%7C%203.13-blue)](https://www.python.org) [![pypi](https://img.shields.io/pypi/v/optuna.svg)](https://pypi.python.org/pypi/optuna) [![conda](https://img.shields.io/conda/vn/conda-forge/optuna.svg)](https://anaconda.org/conda-forge/optuna) [![GitHub license](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/optuna/optuna) [![Read the Docs](https://readthedocs.org/projects/optuna/badge/?version=stable)](https://optuna.readthedocs.io/en/stable/) [![Codecov](https://codecov.io/gh/optuna/optuna/branch/master/graph/badge.svg)](https://codecov.io/gh/optuna/optuna) :link: [**Website**](https://optuna.org/) | :page_with_curl: [**Docs**](https://optuna.readthedocs.io/en/stable/) | :gear: [**Install Guide**](https://optuna.readthedocs.io/en/stable/installation.html) | :pencil: [**Tutorial**](https://optuna.readthedocs.io/en/stable/tutorial/index.html) | :bulb: [**Examples**](https://github.com/optuna/optuna-examples) | [**Twitter**](https://twitter.com/OptunaAutoML) | [**LinkedIn**](https://www.linkedin.com/showcase/optuna/) | [**Medium**](https://medium.com/optuna) *Optuna* is an automatic hyperparameter optimization software framework, particularly designed for machine learning. It features an imperative, *define-by-run* style user API. Thanks to our *define-by-run* API, the code written with Optuna enjoys high modularity, and the user of Optuna can dynamically construct the search spaces for the hyperparameters. ## :loudspeaker: News Help us create the next version of Optuna! Optuna 5.0 Roadmap published for review. Please take a look at [the planned improvements to Optuna](https://medium.com/optuna/optuna-v5-roadmap-ac7d6935a878), and share your feedback in [the github issues](https://github.com/optuna/optuna/labels/v5). PR contributions also welcome! Please take a few minutes to fill in [this survey](https://forms.gle/wVwLCQ9g6st6AXuq9), and let us know how you use Optuna now and what improvements you'd like.🤔 All questions are optional. 🙇‍♂️ * **Oct 28, 2025**: A new article [AutoSampler: Full Support for Multi-Objective & Constrained Optimization](https://medium.com/optuna/autosampler-full-support-for-multi-objective-constrained-optimization-c1c4fc957ba2) has been published. * **Sep 22, 2025**: A new article [[Optuna v4.5] Gaussian Process-Based Sampler (GPSampler) Can Now Perform Constrained Multi-Objective Optimization](https://medium.com/optuna/optuna-v4-5-81e78d8e077a) has been published. * **Jun 16, 2025**: Optuna 4.4.0 has been released! Check out [the release blog](https://medium.com/optuna/announcing-optuna-4-4-ece661493126). * **May 26, 2025**: Optuna 5.0 roadmap has been published! See [the blog](https://medium.com/optuna/optuna-v5-roadmap-ac7d6935a878) for more details. * **Apr 14, 2025**: Optuna 4.3.0 is out! Check out [the release note](https://github.com/optuna/optuna/releases/tag/v4.3.0) for details. * **Mar 24, 2025**: A new article [Distributed Optimization in Optuna and gRPC Storage Proxy](https://medium.com/optuna/distributed-optimization-in-optuna-and-grpc-storage-proxy-08db83f1d608) has been published. ## :fire: Key Features Optuna has modern functionalities as follows: - [Lightweight, versatile, and platform agnostic architecture](https://optuna.readthedocs.io/en/stable/tutorial/10_key_features/001_first.html) - Handle a wide variety of tasks with a simple installation that has few requirements. - [Pythonic search spaces](https://optuna.readthedocs.io/en/stable/tutorial/10_key_features/002_configurations.html) - Define search spaces using familiar Python syntax including conditionals and loops. - [Efficient optimization algorithms](https://optuna.readthedocs.io/en/stable/tutorial/10_key_features/003_efficient_optimization_algorithms.html) - Adopt state-of-the-art algorithms for sampling hyperparameters and efficiently pruning unpromising trials. - [Easy parallelization](https://optuna.readthedocs.io/en/stable/tutorial/10_key_features/004_distributed.html) - Scale studies to tens or hundreds of workers with little or no changes to the code. - [Quick visualization](https://optuna.readthedocs.io/en/stable/tutorial/10_key_features/005_visualization.html) - Inspect optimization histories from a variety of plotting functions. ## Basic Concepts We use the terms *study* and *trial* as follows: - Study: optimization based on an objective function - Trial: a single execution of the objective function Please refer to the sample code below. The goal of a *study* is to find out the optimal set of hyperparameter values (e.g., `regressor` and `svr_c`) through multiple *trials* (e.g., `n_trials=100`). Optuna is a framework designed for automation and acceleration of optimization *studies*.
Sample code with scikit-learn [![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](http://colab.research.google.com/github/optuna/optuna-examples/blob/main/quickstart.ipynb) ```python import optuna import sklearn # Define an objective function to be minimized. def objective(trial): # Invoke suggest methods of a Trial object to generate hyperparameters. regressor_name = trial.suggest_categorical("regressor", ["SVR", "RandomForest"]) if regressor_name == "SVR": svr_c = trial.suggest_float("svr_c", 1e-10, 1e10, log=True) regressor_obj = sklearn.svm.SVR(C=svr_c) else: rf_max_depth = trial.suggest_int("rf_max_depth", 2, 32) regressor_obj = sklearn.ensemble.RandomForestRegressor(max_depth=rf_max_depth) X, y = sklearn.datasets.fetch_california_housing(return_X_y=True) X_train, X_val, y_train, y_val = sklearn.model_selection.train_test_split(X, y, random_state=0) regressor_obj.fit(X_train, y_train) y_pred = regressor_obj.predict(X_val) error = sklearn.metrics.mean_squared_error(y_val, y_pred) return error # An objective value linked with the Trial object. study = optuna.create_study() # Create a new study. study.optimize(objective, n_trials=100) # Invoke optimization of the objective function. ```
> [!NOTE] > More examples can be found in [optuna/optuna-examples](https://github.com/optuna/optuna-examples). > > The examples cover diverse problem setups such as multi-objective optimization, constrained optimization, pruning, and distributed optimization. ## Installation Optuna is available at [the Python Package Index](https://pypi.org/project/optuna/) and on [Anaconda Cloud](https://anaconda.org/conda-forge/optuna). ```bash # PyPI $ pip install optuna ``` ```bash # Anaconda Cloud $ conda install -c conda-forge optuna ``` > [!IMPORTANT] > Optuna supports Python 3.9 or newer. > > Also, we provide Optuna docker images on [DockerHub](https://hub.docker.com/r/optuna/optuna). ## Integrations Optuna has integration features with various third-party libraries. Integrations can be found in [optuna/optuna-integration](https://github.com/optuna/optuna-integration) and the document is available [here](https://optuna-integration.readthedocs.io/en/stable/index.html).
Supported integration libraries * [Catboost](https://github.com/optuna/optuna-examples/tree/main/catboost/catboost_pruning.py) * [Dask](https://github.com/optuna/optuna-examples/tree/main/dask/dask_simple.py) * [fastai](https://github.com/optuna/optuna-examples/tree/main/fastai/fastai_simple.py) * [Keras](https://github.com/optuna/optuna-examples/tree/main/keras/keras_integration.py) * [LightGBM](https://github.com/optuna/optuna-examples/tree/main/lightgbm/lightgbm_integration.py) * [MLflow](https://github.com/optuna/optuna-examples/tree/main/mlflow/keras_mlflow.py) * [PyTorch](https://github.com/optuna/optuna-examples/tree/main/pytorch/pytorch_simple.py) * [PyTorch Ignite](https://github.com/optuna/optuna-examples/tree/main/pytorch/pytorch_ignite_simple.py) * [PyTorch Lightning](https://github.com/optuna/optuna-examples/tree/main/pytorch/pytorch_lightning_simple.py) * [TensorBoard](https://github.com/optuna/optuna-examples/tree/main/tensorboard/tensorboard_simple.py) * [TensorFlow](https://github.com/optuna/optuna-examples/tree/main/tensorflow/tensorflow_estimator_integration.py) * [tf.keras](https://github.com/optuna/optuna-examples/tree/main/tfkeras/tfkeras_integration.py) * [Weights & Biases](https://github.com/optuna/optuna-examples/tree/main/wandb/wandb_integration.py) * [XGBoost](https://github.com/optuna/optuna-examples/tree/main/xgboost/xgboost_integration.py)
## Web Dashboard [Optuna Dashboard](https://github.com/optuna/optuna-dashboard) is a real-time web dashboard for Optuna. You can check the optimization history, hyperparameter importance, etc. in graphs and tables. You don't need to create a Python script to call [Optuna's visualization](https://optuna.readthedocs.io/en/stable/reference/visualization/index.html) functions. Feature requests and bug reports are welcome! ![optuna-dashboard](https://user-images.githubusercontent.com/5564044/204975098-95c2cb8c-0fb5-4388-abc4-da32f56cb4e5.gif) `optuna-dashboard` can be installed via pip: ```shell $ pip install optuna-dashboard ``` > [!TIP] > Please check out the convenience of Optuna Dashboard using the sample code below.
Sample code to launch Optuna Dashboard Save the following code as `optimize_toy.py`. ```python import optuna def objective(trial): x1 = trial.suggest_float("x1", -100, 100) x2 = trial.suggest_float("x2", -100, 100) return x1**2 + 0.01 * x2**2 study = optuna.create_study(storage="sqlite:///db.sqlite3") # Create a new study with database. study.optimize(objective, n_trials=100) ``` Then try the commands below: ```shell # Run the study specified above $ python optimize_toy.py # Launch the dashboard based on the storage `sqlite:///db.sqlite3` $ optuna-dashboard sqlite:///db.sqlite3 ... Listening on http://localhost:8080/ Hit Ctrl-C to quit. ```
## OptunaHub [OptunaHub](https://hub.optuna.org/) is a feature-sharing platform for Optuna. You can use the registered features and publish your packages. ### Use registered features `optunahub` can be installed via pip: ```shell $ pip install optunahub # Install AutoSampler dependencies (CPU only is sufficient for PyTorch) $ pip install cmaes scipy torch --extra-index-url https://download.pytorch.org/whl/cpu ``` You can load registered module with `optunahub.load_module`. ```python import optuna import optunahub def objective(trial: optuna.Trial) -> float: x = trial.suggest_float("x", -5, 5) y = trial.suggest_float("y", -5, 5) return x**2 + y**2 module = optunahub.load_module(package="samplers/auto_sampler") study = optuna.create_study(sampler=module.AutoSampler()) study.optimize(objective, n_trials=10) print(study.best_trial.value, study.best_trial.params) ``` For more details, please refer to [the optunahub documentation](https://optuna.github.io/optunahub/). ### Publish your packages You can publish your package via [optunahub-registry](https://github.com/optuna/optunahub-registry). See the [Tutorials for Contributors](https://optuna.github.io/optunahub/tutorials_for_contributors.html) in OptunaHub. ## Communication - [GitHub Discussions] for questions. - [GitHub Issues] for bug reports and feature requests. [GitHub Discussions]: https://github.com/optuna/optuna/discussions [GitHub issues]: https://github.com/optuna/optuna/issues ## Contribution Any contributions to Optuna are more than welcome! If you are new to Optuna, please check the [good first issues](https://github.com/optuna/optuna/labels/good%20first%20issue). They are relatively simple, well-defined, and often good starting points for you to get familiar with the contribution workflow and other developers. If you already have contributed to Optuna, we recommend the other [contribution-welcome issues](https://github.com/optuna/optuna/labels/contribution-welcome). For general guidelines on how to contribute to the project, take a look at [CONTRIBUTING.md](./CONTRIBUTING.md). ## Reference If you use Optuna in one of your research projects, please cite [our KDD paper](https://doi.org/10.1145/3292500.3330701) "Optuna: A Next-generation Hyperparameter Optimization Framework":
BibTeX ```bibtex @inproceedings{akiba2019optuna, title={{O}ptuna: A Next-Generation Hyperparameter Optimization Framework}, author={Akiba, Takuya and Sano, Shotaro and Yanase, Toshihiko and Ohta, Takeru and Koyama, Masanori}, booktitle={The 25th ACM SIGKDD International Conference on Knowledge Discovery \& Data Mining}, pages={2623--2631}, year={2019} } ```
## License MIT License (see [LICENSE](./LICENSE)). Optuna uses the codes from SciPy and fdlibm projects (see [LICENSE_THIRD_PARTY](./LICENSE_THIRD_PARTY)).