Skip to main content

Module nsga2_bench

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:

AxisQuestionMeasured by
Coveragehow much objective space does the front dominate?MoReport::hypervolume
Convergencehow far is the front from the true one?MoReport::convergence
Diversityis 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

ProblemObjectivesTrue frontWhat it is for
MoProblem::zdt12convex, f₂ = 1 − √f₁the standard baseline; a knowable answer to converge to
MoProblem::zdt22non-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::dtlz23the unit sphere octantthree objectives: crowding distance and the hypervolume sweep both change shape at m = 3
MoProblem::constr_ex2 + 2 constraintspiecewise analyticfeasibility-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 run drives.

Constants§

POPULATION
The population size every NSGA-II comparison in this oracle runs.

Functions§

run
Runs searcher on problem for budget trials under study seed seed, with the default POPULATION.
run_with_population
run with an explicit NSGA-II population size (ignored by the samplers that have no population).