diff --git a/CHANGELOG.md b/CHANGELOG.md index ef705ef..d1dd714 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,19 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.2.0] - 2026-06-26 + +### Added + +- Validation / correctness benchmark suite: GA + NSGA-II parity vs pymoo and DEAP + across single- and multi-objective problems, with committed 30-seed results, a + rendered report, and a published Validation docs page. + +### Notes + +- No breaking changes. The optimizer API and core are unchanged since 0.1.0; the + benchmark numbers therefore remain valid for 0.2.0. + ## [0.1.0] - 2026-06-25 ### Added @@ -19,5 +32,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Optional parallel evaluation via joblib (`n_workers`). - Typed public API shipping a `py.typed` marker (PEP 561). -[Unreleased]: https://github.com/hydrosolutions/ctrl-freak/compare/v0.1.0...HEAD +[Unreleased]: https://github.com/hydrosolutions/ctrl-freak/compare/v0.2.0...HEAD +[0.2.0]: https://github.com/hydrosolutions/ctrl-freak/releases/tag/v0.2.0 [0.1.0]: https://github.com/hydrosolutions/ctrl-freak/releases/tag/v0.1.0 diff --git a/benchmarks/README.md b/benchmarks/README.md index 20fa6c2..fb7d2c2 100644 --- a/benchmarks/README.md +++ b/benchmarks/README.md @@ -19,7 +19,7 @@ artifact. | Field | Value | |---|---| | Seeds | 30 (0–29) | -| ctrl-freak | 0.1.0 | +| ctrl-freak | 0.2.0 | | pymoo | 0.6.1.6 | | deap | 1.4.3 | | numpy | 2.4.1 | diff --git a/benchmarks/render.py b/benchmarks/render.py index 5ebb97d..b8a1947 100644 --- a/benchmarks/render.py +++ b/benchmarks/render.py @@ -262,7 +262,7 @@ def _provenance_table(meta: dict) -> str: -------- >>> meta = { ... "n_seeds": 30, - ... "versions": {"ctrl_freak": "0.1.0", "pymoo": "0.6.1.6", "deap": "1.4.3", "numpy": "2.4.1"}, + ... "versions": {"ctrl_freak": "0.2.0", "pymoo": "0.6.1.6", "deap": "1.4.3", "numpy": "2.4.1"}, ... "budgets": {"so_pop_size": 100, "so_n_generations": 200, "mo_pop_size": 100, ... "mo_n_generations": 250, "sbx_eta": 15.0, "pm_eta": 20.0}, ... } @@ -270,7 +270,7 @@ def _provenance_table(meta: dict) -> str: | Field | Value | |---|---| | Seeds | 30 (0–29) | - | ctrl-freak | 0.1.0 | + | ctrl-freak | 0.2.0 | ... | SBX / PM eta | 15.0 / 20.0 | """ diff --git a/benchmarks/results/benchmark_results.json b/benchmarks/results/benchmark_results.json index 1664d61..135c943 100644 --- a/benchmarks/results/benchmark_results.json +++ b/benchmarks/results/benchmark_results.json @@ -41,7 +41,7 @@ ], "statistic": "overlapping_variance: equivalent iff |mean_cf - mean_lib| < max(std_cf, std_lib)", "versions": { - "ctrl_freak": "0.1.0", + "ctrl_freak": "0.2.0", "pymoo": "0.6.1.6", "deap": "1.4.3", "numpy": "2.4.1" diff --git a/docs/validation.md b/docs/validation.md index f27b667..1862db8 100644 --- a/docs/validation.md +++ b/docs/validation.md @@ -35,7 +35,7 @@ and figure, regenerated from the committed results JSON) lives in the repository | Field | Value | |---|---| | Seeds | 30 (0–29) | -| ctrl-freak | 0.1.0 | +| ctrl-freak | 0.2.0 | | pymoo | 0.6.1.6 | | deap | 1.4.3 | | numpy | 2.4.1 | diff --git a/pyproject.toml b/pyproject.toml index 1e36438..dc7dc94 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "ctrl-freak" -version = "0.1.0" +version = "0.2.0" description = "Pure-numpy genetic algorithm framework for single-objective (GA) and multi-objective (NSGA-II) optimization" readme = "README.md" requires-python = ">=3.11" diff --git a/uv.lock b/uv.lock index 84218ad..d02b066 100644 --- a/uv.lock +++ b/uv.lock @@ -435,7 +435,7 @@ toml = [ [[package]] name = "ctrl-freak" -version = "0.1.0" +version = "0.2.0" source = { editable = "." } dependencies = [ { name = "joblib" },