From 5a0475c6783b30cbb517188b9efe622bc58f9d0c Mon Sep 17 00:00:00 2001 From: Stephen Waits Date: Tue, 5 May 2026 09:20:54 -0600 Subject: [PATCH] chore(release): bump to v0.2.0 and update CHANGELOG Substantial v0.2.0 release on top of v0.1.0: **21 new algorithms:** - Single-objective: HillClimber, SimulatedAnnealing, GeneticAlgorithm, ParticleSwarm, CmaEs, TabuSearch, AntColonyTsp, Umda, Tlbo - Multi-objective: Mopso, Ibea, SmsEmoa, Hype, Rvea, PesaII, EpsilonMoea, AgeMoea, Grea, Knea **5 new operators:** BoundedGaussianMutation, SimulatedBinaryCrossover (SBX), PolynomialMutation, CompositeVariation, LevyMutation **New utility:** `hypervolume_nd` (HSO algorithm) for arbitrary dimensionality **New examples:** `compare` (multi-seed harness across 7 benchmark problems and 19 algorithms), `benchmarks` (canonical reference runs), `jiggly_tuning` (real-world 4-objective firmware tuning) **New feature flag:** `parallel` (rayon-backed population evaluation) **README:** added an explanatory algorithm-selection decision tree No breaking changes to v0.1.0 public API. --- CHANGELOG.md | 94 +++++++++++++++++++++++++++++++++++++++++++++++++++- Cargo.toml | 2 +- README.md | 4 +-- 3 files changed, 96 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2a687fb..b9ab98e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,98 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.2.0] — 2026-05-05 + +A substantial expansion of the algorithm catalog (21 new algorithms), +five new operators, an n-D hypervolume utility, an algorithm-selection +guide in the README, and a multi-seed comparison harness covering seven +benchmark problems. No breaking changes to the v0.1.0 public API. + +### Added + +#### New algorithms + +**Single-objective:** + +- `HillClimber` — simplest greedy local search. +- `SimulatedAnnealing` — Kirkpatrick et al. 1983, generic over decision type. +- `GeneticAlgorithm` — generational SO GA with tournament selection + elitism. +- `ParticleSwarm` — Eberhart & Kennedy 1995 PSO for `Vec`. +- `CmaEs` — Hansen & Ostermeier 2001 covariance-matrix adaptation. +- `TabuSearch` — Glover 1986, with a user-supplied neighbor generator. +- `AntColonyTsp` — Dorigo Ant System for permutation problems. +- `Umda` — Mühlenbein 1997 univariate marginal-distribution EDA for + `Vec`. +- `Tlbo` — Rao 2011 Teaching-Learning-Based Optimization (parameter-free). + +**Multi-objective:** + +- `Mopso` — Coello, Pulido & Lechuga 2004 multi-objective PSO. +- `Ibea` — Zitzler & Künzli 2004 indicator-based EA. +- `SmsEmoa` — Beume, Naujoks & Emmerich 2007 S-metric selection EMOA. +- `Hype` — Bader & Zitzler 2011 Hypervolume Estimation Algorithm. +- `Rvea` — Cheng et al. 2016 Reference Vector-guided EA. +- `PesaII` — Corne et al. 2001 Pareto Envelope-based Selection II. +- `EpsilonMoea` — Deb, Mohan & Mishra 2003 ε-dominance MOEA. +- `AgeMoea` — Panichella 2019 Adaptive Geometry Estimation MOEA. +- `Grea` — Yang et al. 2013 Grid-based EA. +- `Knea` — Zhang, Tian & Jin 2015 Knee point-driven EA. + +#### New operators + +- `BoundedGaussianMutation` — Gaussian noise + per-axis clamping. +- `SimulatedBinaryCrossover` (SBX) — Deb & Agrawal 1995 canonical + real-valued crossover. +- `PolynomialMutation` — Deb's polynomial mutation, the standard NSGA-II + pair to SBX. +- `CompositeVariation` — pipeline two `Variation` operators + (typically crossover → mutation). +- `LevyMutation` — heavy-tailed Lévy-flight mutation via Mantegna's + algorithm. + +#### New metrics / utilities + +- `hypervolume_nd` — exact N-dimensional dominated hypervolume via the + Hypervolume-by-Slicing-Objectives (HSO) algorithm, plus an internal + Jacobi symmetric eigendecomposition helper used by CMA-ES. + +#### New examples + +- `compare` — multi-seed comparison harness running every applicable + algorithm across ZDT1, ZDT3, DTLZ1, DTLZ2 (multi/many-objective) and + Rastrigin, Rosenbrock, Ackley (single-objective). Reports + hypervolume, spacing, mean L2/dist, front size, and wall-clock ms. +- `benchmarks` — canonical reference runs of NSGA-II on ZDT1 and DE on + Rastrigin. +- `jiggly_tuning` — real-world 4-objective NSGA-III firmware tuning + for the [`jiggly`](https://github.com/swaits/jiggly) USB-mouse-jiggler, + with an a-posteriori weighted-decision step that picks one + recommendation off the Pareto front. + +#### New optional feature + +- `parallel` — rayon-backed parallel population evaluation in + `RandomSearch`, `Nsga2`, `DifferentialEvolution`, `Spea2`, `Ibea`, + `Mopso`, and most other algorithms with batchable inner loops. + Seeded runs stay bit-identical to serial mode. + +#### Documentation + +- README gained an explanatory algorithm-selection decision tree that + walks newcomers through choosing an optimizer, defining the + terminology (multi-objective, Pareto front, dominance, multimodality, + evaluation cost) as it goes. + +### Changed + +- Minimum supported Rust version remains 1.85 (edition 2024). +- Algorithm impls now require `P: Sync` and `P::Decision: Send` so the + same impl serves both `parallel` and serial feature builds. Any + `Problem` / decision type without exotic interior mutability already + satisfies these. + +[0.2.0]: https://github.com/swaits/heuropt/releases/tag/v0.2.0 + ## [0.1.0] — 2026-05-04 Initial release. @@ -74,5 +166,5 @@ Initial release. `RandomSearch`, `Nsga2`, and `DifferentialEvolution`. Seeded runs stay bit-identical to serial mode. -[Unreleased]: https://github.com/swaits/heuropt/compare/v0.1.0...HEAD +[Unreleased]: https://github.com/swaits/heuropt/compare/v0.2.0...HEAD [0.1.0]: https://github.com/swaits/heuropt/releases/tag/v0.1.0 diff --git a/Cargo.toml b/Cargo.toml index 4cb8a7e..0aebbe1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "heuropt" -version = "0.1.0" +version = "0.2.0" edition = "2024" rust-version = "1.85" authors = ["Stephen Waits "] diff --git a/README.md b/README.md index 81694c8..ed3190e 100644 --- a/README.md +++ b/README.md @@ -17,13 +17,13 @@ framework concepts. ```toml [dependencies] -heuropt = "0.1" +heuropt = "0.2" # Optional features: # - "serde": derive Serialize/Deserialize on the core data types. # - "parallel": evaluate populations across rayon's thread pool. # Seeded runs stay bit-identical to serial mode. -# heuropt = { version = "0.1", features = ["serde", "parallel"] } +# heuropt = { version = "0.2", features = ["serde", "parallel"] } ``` ## Define a problem