diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 5abc488..bdfb4eb 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -11,7 +11,7 @@ body: id: version attributes: label: Unsga3 version / commit - placeholder: "0.1.5 or git SHA" + placeholder: "0.2.0 or git SHA" validations: required: true - type: textarea diff --git a/CHANGELOG.md b/CHANGELOG.md index ebae0be..dff1c8e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/). ### Added - Optional **TypeSafe / Jev System One** pass (`tools/typesafe-pareto`) for Score + Choice judgments over a small Pareto candidate sample. Additive semantic layer — does not replace NSGA-III / U-NSGA-III objectives. Live calls only when `TYPESAFE_API_KEY` is set; CI uses mocks. Metrics append to `metrics/typesafe-runs.jsonl`. + +### Changed + +- Docs and XML comments describe `initialPopulation` and hybrid loops in generic terms (domain-adapter warm-start / grid-seed). No product-repo names. + +## [0.2.0] — 2026-09-30 + +Mating and constraints plus two-layer references. **Defaults stay unconstrained `RankNicheDistance`, independent mating, and single-layer `DasDennis`.** No new IGD or Wilcoxon table. + +### Added + - `ReferenceDirections.TwoLayerDasDennis`: outer Das–Dennis layer plus an inside layer scaled toward the centroid (Deb & Jain, NSGA-III Part I; default scale 0.5). Duplicates are removed. Single-layer `DasDennis` / `WithDasDennis` stays the default. M≤3 oracles do not need the second layer. - Constrained problems `OsyProblem`, `TnkProblem`, and `C1Dtlz1Problem`, with formulation and survival self-tests. No IGD table. - Opt-in `MatingPoolMode.TwoShuffledPasses`: two shuffled passes of consecutive tournaments (Seada & Deb Algorithm 1 and pymoo 0.6.2 `TournamentSelection`, pressure 2). When N parents are drawn from N members, each member is a contestant twice. The default pool stays N independent tournaments with replacement, which is the published ZDT1 Wilcoxon protocol. @@ -18,7 +29,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/). ### Changed - Environmental selection follows pymoo `Survival.filter_infeasible` (Jain & Deb, NSGA-III Part II). Feasible members are niched. If fewer than N are feasible, the rest are filled by ascending constraint violation and are not assigned a niche. When any member is feasible, ideal, worst, and ASF extremes come from feasible objectives. An all-infeasible generation does not move the hyperplane. This replaces the locked whole-pool ideal fixture. -- Docs and XML comments describe `initialPopulation` and hybrid loops in generic terms (domain-adapter warm-start / grid-seed). No product-repo names. ### Fixed @@ -101,7 +111,8 @@ Forensic-audit wave (G1–G10): document known gaps against pymoo and Seada & De - Benchmarks: ZDT1–4/6, DTLZ1–4/7, Sphere / Ackley / Rosenbrock - Metrics: IGD, GD, 2-D HV; self-tests + GitHub Packages publish workflow -[Unreleased]: https://github.com/AppSprout-dev/Unsga3/compare/v0.1.5...HEAD +[Unreleased]: https://github.com/AppSprout-dev/Unsga3/compare/v0.2.0...HEAD +[0.2.0]: https://github.com/AppSprout-dev/Unsga3/compare/v0.1.5...v0.2.0 [0.1.5]: https://github.com/AppSprout-dev/Unsga3/compare/v0.1.4...v0.1.5 [0.1.4]: https://github.com/AppSprout-dev/Unsga3/compare/v0.1.3...v0.1.4 [0.1.3]: https://github.com/AppSprout-dev/Unsga3/compare/v0.1.2...v0.1.3 diff --git a/CITATION.cff b/CITATION.cff index 8f25156..88fa287 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -21,8 +21,8 @@ keywords: - C# - .NET license: MIT -version: 0.1.5 -date-released: "2026-09-22" +version: 0.2.0 +date-released: "2026-09-30" references: - type: article authors: diff --git a/Directory.Build.props b/Directory.Build.props index 2341206..82c997c 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -12,7 +12,7 @@ https://github.com/AppSprout-dev/Unsga3 https://github.com/AppSprout-dev/Unsga3 optimization;nsga;nsga3;unsga3;multi-objective;evolutionary;moea - 0.1.5 + 0.2.0 README.md diff --git a/README.md b/README.md index 3e95035..25a6bc1 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ **U-NSGA-III** (Unified NSGA-III) for .NET — single-, multi-, and many-objective evolutionary optimization with Das–Dennis reference directions, SBX crossover, polynomial mutation, and **niching-based tournament selection** ([Seada & Deb, 2016](https://ieeexplore.ieee.org/document/7271063)). -> **v0.1.5** — forensic-audit notes (G1–G10) and small edge fixes. Default tournament stays `RankNicheDistance`. The published 15-seed table is not rewritten. ZDT2 quality protocol remains gens=250. +> **v0.2.0** — opt-in two-shuffle mating, Algorithm 2 tournament, odd-N pairing, feasible-only niching, equal-CV Deb fix, two-layer Das–Dennis, and OSY/TNK/C1-DTLZ1. Defaults stay unconstrained `RankNicheDistance`, independent mating, and single-layer Das–Dennis. The published 15-seed table is not rewritten. > **15-seed IGD vs pymoo `UNSGA3`:** ZDT1 **median 0.053 vs 0.070** (MWU *p*≈0.05) compares the full C# non-dominated front with pymoo `res.F`. DTLZ2 **median 0.0045 vs 0.0028** (~1.6×) compares C# n_var=12 with pymoo's default n_var=10. Neither pair is a same-set, same-problem ranking. Notes: [`docs/ORACLE-RESULTS.md`](docs/ORACLE-RESULTS.md). > Details: [`docs/WILCOXON-RESULTS.md`](docs/WILCOXON-RESULTS.md) · single-seed notes: [`docs/ORACLE-RESULTS.md`](docs/ORACLE-RESULTS.md)