Module nsga2_bench
Expand description
The M4.4 NSGA-II oracle’s driver: prove Nsga2 finds a Pareto front,
not a point (docs/design/09-implementation.md §13).
This is to NSGA-II what cmaes_bench is to CMA-ES and
dehb_bench is to DEHB, with one difference that changes
everything about how quality is measured: a multi-objective study has no
best value. StudyView::best
deliberately answers None (docs/design/03-architecture.md §3.1), so the
best-so-far Curve every other oracle here compares
does not exist. What is compared instead is the front, along the three axes
the multi-objective literature separates on purpose:
| Axis | Question | Measured by |
|---|---|---|
| Coverage | how much objective space does the front dominate? | MoReport::hypervolume |
| Convergence | how far is the front from the true one? | MoReport::convergence |
| Diversity | is the front spread, or one point cloned? | MoReport::spread, MoReport::spacing |
Hypervolume alone is not enough, which is the whole reason the other two are
here: it is a single scalar that a front can raise either by converging or by
spreading, so a sampler that collapses onto one excellent corner and a sampler
that scatters weakly can score alike. Crowding distance — NSGA-II’s entire
diversity mechanism — is only visible on the third row, and
CrowdlessNsga2 is the sentinel
that proves the third row bites.
§The problems, and why each one is here
| Problem | Objectives | True front | What it is for |
|---|---|---|---|
MoProblem::zdt1 | 2 | convex, f₂ = 1 − √f₁ | the standard baseline; a knowable answer to converge to |
MoProblem::zdt2 | 2 | non-convex, f₂ = 1 − f₁² | the case a scalarizing (weighted-sum) searcher provably cannot cover — only dominance-based ranking reaches the interior of a concave front |
MoProblem::dtlz2 | 3 | the unit sphere octant | three objectives: crowding distance and the hypervolume sweep both change shape at m = 3 |
MoProblem::constr_ex | 2 + 2 constraints | piecewise analytic | feasibility-first: the unconstrained optimum is infeasible, so a constraint-blind front is full of points that look better and are not allowed |
All four are in-house (D4): the canonical formulae come from Deb’s papers, no reference implementation’s code is used.
§How the claims are stated
Win-rates over a seed set with thresholds taken from a measured 64-seed
sweep, never per-seed universals (docs/design/09-implementation.md §8.3). The
measured numbers live in the nsga2_oracle integration test’s doc comments,
next to the thresholds they justify.
§Determinism
Every run is single-worker with a fixed study seed, a
ManualClock and a pure objective, so run is a pure function of
(searcher, problem, budget, population, seed). NSGA-II is population-based
and therefore history-dependent: that is single-worker determinism plus
replayability, never trial-number-indexed determinism
(docs/design/09-implementation.md §5).
Structs§
- MoProblem
- A multi-objective benchmark problem: a boxed continuous domain, a vector objective, optional constraints, and a known Pareto front.
- MoReport
- One searcher’s run over one multi-objective problem, and the front metrics computed from it.
Enums§
- MoSearcher
- Which searcher a
rundrives.
Constants§
- POPULATION
- The population size every NSGA-II comparison in this oracle runs.
Functions§
- run
- Runs
searcheronproblemforbudgettrials under study seedseed, with the defaultPOPULATION. - run_
with_ population runwith an explicit NSGA-II population size (ignored by the samplers that have no population).