|
| 1 | +# Changelog |
| 2 | + |
| 3 | +All notable changes to Gradient-Free-Optimizers are documented in this file. |
| 4 | + |
| 5 | +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), |
| 6 | +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). |
| 7 | + |
| 8 | +For detailed release notes, see [GitHub Releases](https://github.com/SimonBlanke/Gradient-Free-Optimizers/releases). |
| 9 | + |
| 10 | +## [Unreleased] |
| 11 | + |
| 12 | +## [1.9.0] - 2026-01-15 |
| 13 | + |
| 14 | +Major release focusing on dependency reduction. scikit-learn and scipy are now optional dependencies with native Python implementations available for all core functionality. |
| 15 | + |
| 16 | +### Added |
| 17 | +- Private array backend (`_array_backend`) for pure Python array operations without NumPy |
| 18 | +- Private math backend (`_math_backend`) for mathematical operations without SciPy |
| 19 | +- Native `DecisionTreeRegressor` implementation |
| 20 | +- Native `ExtraTreesRegressor` implementation |
| 21 | +- Native `RandomForestRegressor` implementation |
| 22 | +- Native `GradientBoostingRegressor` implementation |
| 23 | +- `SimpleProgressBar` class as fallback when tqdm is unavailable |
| 24 | +- Sigma self-adaptation for `EvolutionStrategyOptimizer` |
| 25 | +- `convergence_threshold` parameter for Powell's Method |
| 26 | +- Type hints to all optimizer classes and `Search` class |
| 27 | +- Comprehensive docstrings for all optimizer classes |
| 28 | +- Sphinx documentation with ReadTheDocs integration |
| 29 | +- API tests for all optimizer categories |
| 30 | + |
| 31 | +### Changed |
| 32 | +- scikit-learn is now an optional dependency (native estimators used by default) |
| 33 | +- SciPy is now an optional dependency |
| 34 | +- tqdm is now an optional dependency |
| 35 | +- Complete reimplementation of Powell's Method with improved line search algorithms |
| 36 | +- Reworked README with new 3D optimization animation |
| 37 | +- Consolidated CI workflows into single `ci.yml` |
| 38 | +- Restructured test directory (`tests/test_main/`, `tests/test_internal/`, etc.) |
| 39 | +- Improved error messages with actionable suggestions |
| 40 | + |
| 41 | +### Removed |
| 42 | +- `BayesianRidge` estimator |
| 43 | +- Linear GP option from Gaussian Process regressor |
| 44 | + |
| 45 | +### Fixed |
| 46 | +- Golden section search algorithm in Powell's Method |
| 47 | +- Mutable default argument anti-pattern (`constraints=[]` changed to `constraints=None`) |
| 48 | +- Missing `@functools.wraps` on internal decorators |
| 49 | +- Division by zero edge case in print-times |
| 50 | +- Bug in evaluate method |
| 51 | + |
| 52 | +## [1.8.1] - 2025-12-29 |
| 53 | + |
| 54 | +Re-release of v1.8.0 with updated package metadata. |
| 55 | + |
| 56 | +## [1.8.0] - 2025-12-29 |
| 57 | + |
| 58 | +### Added |
| 59 | +- Python 3.14 support |
| 60 | +- Package keywords and classifiers for improved discoverability |
| 61 | + |
| 62 | +### Changed |
| 63 | +- Dropped Python 3.9 support |
| 64 | +- Test performance improvements |
| 65 | + |
| 66 | +### Fixed |
| 67 | +- Sporadic test failures in CI |
| 68 | + |
| 69 | +## [1.7.2] - 2025-09-21 |
| 70 | + |
| 71 | +### Added |
| 72 | +- Native `GaussianProcessRegressor` implementation with RBF kernel |
| 73 | +- Native `KernelDensityEstimator` implementation |
| 74 | +- `Result` dataclass for structured evaluation results |
| 75 | +- `ObjectiveAdapter` class for cleaner objective function handling |
| 76 | +- Toy test functions (Sphere, Ackley) for benchmarking |
| 77 | +- Python 3.13 support |
| 78 | + |
| 79 | +### Changed |
| 80 | +- Refactored memory/caching system using `CachedObjectiveAdapter` |
| 81 | +- Refactored `ResultsManager` for improved result collection |
| 82 | +- New optimization stopping implementation |
| 83 | +- Performance improvements to `normalize` function (up to 90% faster) |
| 84 | +- Performance improvements to `LipschitzFunction.find_best_slope` (81% faster) |
| 85 | + |
| 86 | +### Fixed |
| 87 | +- Issue with maximize/minimize objective function handling |
| 88 | + |
| 89 | +## [1.7.1] - 2024-12-07 |
| 90 | + |
| 91 | +### Added |
| 92 | +- Comprehensive docstrings for all optimizer classes |
| 93 | + |
| 94 | +### Changed |
| 95 | +- Dropped Python 3.8 support |
| 96 | +- Improved type hints for `constraints`, `sampling`, and `initialize` parameters |
| 97 | +- Refactored `move_climb` method to `CoreOptimizer` |
| 98 | +- Cleaned up class inheritance and removed unused arguments |
| 99 | + |
| 100 | +## [1.6.0] - 2024-08-14 |
| 101 | + |
| 102 | +### Added |
| 103 | +- Python 3.12 support |
| 104 | +- NumPy v2 and Pandas v2 compatibility |
| 105 | +- PyTorch optimizer integration example |
| 106 | + |
| 107 | +### Changed |
| 108 | +- Migrated from `setup.py` to `pyproject.toml` |
| 109 | +- Moved source code into `src/` directory structure |
| 110 | + |
| 111 | +## [1.5.0] - 2024-07-22 |
| 112 | + |
| 113 | +### Added |
| 114 | +- `GeneticAlgorithmOptimizer` for evolutionary optimization |
| 115 | +- `DifferentialEvolutionOptimizer` for population-based optimization |
| 116 | +- `mutation_rate` and `crossover_rate` parameters for evolutionary algorithms |
| 117 | + |
| 118 | +### Changed |
| 119 | +- Refactored stochastic hill climbing transition logic |
| 120 | +- Moved discrete recombination method into base class |
| 121 | + |
| 122 | +### Fixed |
| 123 | +- Bug in constrained optimization |
| 124 | + |
| 125 | +## [1.4.0] - 2024-05-11 |
| 126 | + |
| 127 | +### Added |
| 128 | +- `OrthogonalGridSearchOptimizer` for systematic grid search |
| 129 | +- `direction` parameter for grid search optimizer |
| 130 | +- Search-space value validation |
| 131 | + |
| 132 | +### Changed |
| 133 | +- Dropped Python 3.5, 3.6, and 3.7 support |
| 134 | +- Replaced `nth_iter` with `nth_trial` for clearer semantics |
| 135 | +- Pandas v2 compatibility improvements |
| 136 | + |
| 137 | +### Fixed |
| 138 | +- Probability calculation bug in stochastic hill climbing |
| 139 | +- Bugs in stochastic hill climbing and simulated annealing |
| 140 | + |
| 141 | +## [1.3.0] - 2023-04-11 |
| 142 | + |
| 143 | +### Added |
| 144 | +- Constrained optimization support for most optimizers |
| 145 | +- Constrained optimization examples and documentation |
| 146 | + |
| 147 | +### Changed |
| 148 | +- Refactored optimizer and search classes into separate APIs |
| 149 | + |
| 150 | +### Fixed |
| 151 | +- Evaluation call from parent class |
| 152 | + |
| 153 | +## [1.2.0] - 2022-10-20 |
| 154 | + |
| 155 | +### Added |
| 156 | +- `SpiralOptimization` algorithm |
| 157 | +- `LipschitzOptimizer` algorithm |
| 158 | +- `DirectAlgorithm` (DIRECT) for global optimization |
| 159 | +- Backend API for low-level optimizer control |
| 160 | +- Python 3.10 and 3.11 support |
| 161 | + |
| 162 | +### Changed |
| 163 | +- Major refactoring for more consistent optimizer behavior |
| 164 | +- Improved low-level API |
| 165 | +- Refactored SMBO optimizers into unified pattern |
| 166 | +- Refactored expected improvement into separate module |
| 167 | +- Core optimizer moved into separate module |
| 168 | + |
| 169 | +### Fixed |
| 170 | +- Rotation matrix calculation |
| 171 | +- Various fixes for DIRECT algorithm |
| 172 | +- Grid search GCD calculation |
| 173 | + |
| 174 | +## [1.0.1] - 2021-12-01 |
| 175 | + |
| 176 | +### Fixed |
| 177 | +- Bug in grid search |
| 178 | +- Random move and random state handling |
| 179 | +- Various stability improvements from v1.0.0 release |
0 commit comments