This is the release note of v4.6.0.
Highlights
Optuna Dashboard LLM Integration
Optuna Dashboard is a web-based tool that helps you easily explore and visualize your Optuna optimization history. The latest release, v0.20.0, introduces LLM integration, enabling the natural language-based Trial filtering and automatic Plotly chart generation. Please refer to the release blog for more details.
Further Speed Enhancements for GPSampler
GPSampler becomes significantly faster owing to parallelized multi-start acquisition function optimization via PyTorch batching, and to optimized NumPy operations.
Full Support for Multi-objective and Constrained Optimization in AutoSampler
We have fully implemented sampler selection rules for multi-objective and constrained optimization in AutoSampler. For more details, please see our blog post, "AutoSampler: Full Support for Multi-Objective & Constrained Optimization."
Additions of Robust Bayesian Optimization Packages
Robust Bayesian optimization methods have been added to OptunaHub. Robust Bayesian optimization enables suggesting more robust parameters against input perturbations. This is especially helpful for Sim2Real transfer scenarios.
Breaking Changes
- Drop Python 3.8 & Support Python 3.13 (optuna/optuna-integration#253)
- Change
TrialState.__repr__andTrialState.__str__(#6281, thanks @ktns!) - Drop Python 3.8 (#6302)
Enhancements
- Use iterator for lazy evaluation in journal storage’s
read_logs(#6144) - Cache pair-wise distances to speed up
GPSampler(#6244) - Speed up LogEI implementation (#6248)
- Speed up EHVI by optimizing tensor operation order (#6257)
- Use the decremental approach in the hypervolume contribution calculation (#6264)
- Use cached trials in
TPESampler'ssample_relative(#6265) - Remove
find_or_raise_by_idin_set_trial_value_without_commit(#6266) - Speed up
GPSamplerby Batching Acquisition Function Evaluations (#6268, thanks @Kaichi-Irie!) - Use cached study direction and trial for
_CachedStorage'sget_best_trial(#6270) - Add upsert in
_set_trial_attr_without_commitfor PostgreSQL (#6282, thanks @jaikumarm!) - Add
statesargument to_read_trials_from_remote_storage(#6288) - Use cached trials for intersection search space calculation (#6291)
- Replace
np.linalg.invwithnp.linalg.choleskyto speed upGPSamplerfornumpy>=2.0.0(#6296)
Bug Fixes
- Skip trial validation on copy_study (#6249)
- Fix incremental update algorithm in
_CachedStorage's_read_trials_from_remote_storage(#6310) - Add safety guard for exhaustive search (#6321)
Documentation
- Add
AutoSamplerto the sampler comparison table in the API reference (#6260, thanks @Kaichi-Irie!) - Update the
GPSamplerdocument to reflect support for constrained multi-objective optimization (#6262) - Add a link to the metric TPE paper in the
TPESamplerdocument (#6263) - Update announcement (#6285)
- Update the table of Samplers in docs (#6287, thanks @fusawa-yugo!)
- Fix the table of samplers in the docs (#6290)
Examples
- Add example of OpenTelemetry in Optuna Dashboard (optuna/optuna-examples#330)
- [hotfix] Fix transformers example by adding the version constraint on transformers (optuna/optuna-examples#332)
- Drop Python 3.8 (optuna/optuna-examples#334)
- Remove Version Constraint for Transformers (optuna/optuna-examples#335, thanks @ParagEkbote!)
Tests
- Add unit tests for batched L-BFGS-B (#6274, thanks @Kaichi-Irie!)
Code Fixes
- Update target version of black from Python 3.8 to 3.9 (optuna/optuna-integration#254)
- Move
fit_kernel_paramstoGPRegressor(#6243) - Modify
TYPE_CHECKINGin_brute_force.py(#6259, thanks @Kaichi-Irie!) - Move SciPy to the lazy import section in
_gp/scipy_blas_thread_patch.py(#6269, thanks @Kaichi-Irie!) - Make the interface of
batched_lbfgsbmodule compatible withscipy.optimize(#6273, thanks @Kaichi-Irie!) - Fix type checking in
optuna.study._frozen.py(#6275, thanks @GabrielRomaoG!) - Move typing-only imports under
TYPE_CHECKINGinoptuna.importance.__init__(#6278, thanks @euangoodbrand!) - Move typing-only imports under TYPE_CHECKING in
FanovaImportanceEvaluator(#6279, thanks @euangoodbrand!) - Move typing-only imports under
TYPE_CHECKINGin/study/_optimize.py(#6280, thanks @euangoodbrand!) - Use
TYPE_CHECKINGinoptuna/pruners/_nop.py(#6297, thanks @AddyM!) - Use
TYPE_CHECKINGinoptuna/samplers/_random.py(#6298, thanks @AddyM!) - Speed up squared distance computation (#6300)
- Refactor emmr (#6304)
- Fix string format of
optuna/distributions.py(#6306) - Fix string format of
tests/samplers_tests/tpe_tests/test_truncnorm.py(#6307) - Update black target to Python 3.9 (#6308)
- Fix string format for
optuna/study/study.py(#6309, thanks @unKnownNG!) - Changed the old
.formatcode to the new f string format in thetest_journal.py(#6312, thanks @Zrahay!) - Update string formatting in
visualization/_pareto_front.py(#6314, thanks @dross20!) - Use f-string in
001_first.py(#6315, thanks @satyarth7srivastava!) - Use f-strings in
_intermediate_values.py(#6316, thanks @nihalsiddiqui7!) - Refactor
.formatto f-string in_percentile.py(#6323, thanks @Jongwan93!)
Continuous Integration
- Update
sklearn.pyto fix mypy checks (optuna/optuna-integration#249) - Fix CI (optuna/optuna-integration#250)
- Fix fragile
test_parallel_optimize_with_sleep(#6241) - Fix type checking in GP for CI (#6276)
- Fix CI (#6284)
- Limit the blackdoc version (#6289)
- Migrate
.coveragerctopyproject.toml(#6292, thanks @ParagEkbote!) - Explicitly close DB connections when discarding SQLAlchemy's
Engine(#6303)
Other
- Bump up the version number to
4.6.0.dev(optuna/optuna-integration#245) - Add
__version__to init (optuna/optuna-integration#247) - Migrate
.coveragerctopyproject.toml(optuna/optuna-integration#252, thanks @ParagEkbote!) - Bump up version (optuna/optuna-integration#255)
- Bump up version to v4.6.0.dev (#6252)
- Update NEWS section (#6319)
- Bump up to version number 4.6.0 (#6324)
Thanks to All the Contributors!
This release was made possible by the authors and the people who participated in the reviews and discussions.
@AddyM, @GabrielRomaoG, @Jongwan93, @Kaichi-Irie, @ParagEkbote, @Zrahay, @c-bata, @contramundum53, @dross20, @euangoodbrand, @fusawa-yugo, @gen740, @jaikumarm, @kAIto47802, @ktns, @nabenabe0928, @nihalsiddiqui7, @not522, @satyarth7srivastava, @sawa3030, @toshihikoyanase, @unKnownNG, @y0z