Module nsga2_bench
Expand description
The NSGA-II oracle’s driver: prove Nsga2 finds a Pareto front, not a
point.
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/extending/sampler.md), 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::try_new_with_zdt1 | 2 | convex, f₂ = 1 − √f₁ | the standard baseline; a knowable answer to converge to |
MoProblem::try_new_with_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::try_new_with_dtlz2 | 3 | the unit sphere octant | three objectives: crowding distance and the hypervolume sweep both change shape at m = 3 |
MoProblem::try_new_with_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.
§The extended suite
The four fixtures above are what the NSGA-II oracle gates on. The rest of
the standard continuous ZDT and DTLZ families — ZDT3, ZDT4, ZDT6 and DTLZ1,
DTLZ3–DTLZ7 — are built the same way (an analytic front, a fixed reference
point, the same three axes) by the suite submodule, so any of them can be
handed to run; MoProblem::suite lists the whole family at the
literature’s canonical dimensions. They are benchmark problems, not gate
fixtures: no oracle threshold is asserted on them.
§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/project/contributing.md#numerical-validation). 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/concepts/determinism.md).
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/NSGA-III population size (ignored by the samplers that have no population).