docs(readme): align decision tree with v0.3.0 comparison results

The compare harness (re-run on 2026-05-05 produced bit-identical
results to the v0.3.0 snapshot) doesn't square with four claims in
the DT. Adjust:

- BayesianOpt: was "gold standard". At 60 evals on 5-D Rosenbrock
  with the default RBF kernel it produces f≈3172 (worse than
  RandomSearch). Add the caveat that BO is the gold standard *with*
  per-problem kernel tuning, not out of the box.
- MOPSO: was buried under "swarm style". On ZDT1 it wins HV outright
  and beats every dominance-based method on convergence by ~100×.
  Promote to its own "smooth real-valued 2-obj front" branch.
- SMS-EMOA: was "great on 2–3 obj at higher per-step cost". On these
  benches it loses to NSGA-II on both ZDT1 (HV 102.9 vs 118.3) and
  DTLZ2 (mean dist 0.048 vs 0.033). Reframe as "elegant in theory but
  underperforms NSGA-II on these benches at our budgets".
- NSGA-III: was "strong default" for many-objective. On DTLZ1 (the
  canonical linear-simplex test) it gets beaten by GrEA 3× and
  MOEA/D 2×. Split the many-obj branch by front geometry: linear /
  simplex → GrEA + MOEA/D; curved / unknown → NSGA-III + AGE-MOEA +
  RVEA.

The quick-reference one-liners below the DT got the matching tweaks
so the table and the tree agree.
This commit is contained in:
2026-05-05 11:40:14 -06:00
parent 4a59041d1a
commit 345e3ea296
+38 -22
View File
@@ -235,7 +235,11 @@ START
│ │ │ │
│ ├─ Yes → sample-efficient regime │ ├─ Yes → sample-efficient regime
│ │ ├─ Standard expensive black-box, single-objective │ │ ├─ Standard expensive black-box, single-objective
│ │ │ → BayesianOpt (GP + Expected Improvement; gold standard) │ │ │ → BayesianOpt (GP + Expected Improvement; gold
│ │ │ standard *with* per-problem kernel
│ │ │ tuning. The default RBF kernel at
│ │ │ 60 evals is honestly bad — give it
│ │ │ more evals or tune the kernel.)
│ │ │ → Tpe (KDE-based; cheaper per-step, │ │ │ → Tpe (KDE-based; cheaper per-step,
│ │ │ more robust without tuning) │ │ │ more robust without tuning)
│ │ │ │ │ │
@@ -292,12 +296,24 @@ START
│ ├─ Strong default, fast, well-understood │ ├─ Strong default, fast, well-understood
│ │ → Nsga2 │ │ → Nsga2
│ │ │ │
│ ├─ Want better front quality than NSGA-II │ ├─ Real-valued, smooth front, want best convergence
│ │ → Ibea (indicator-based; often best of the │ │ → Mopso (multi-objective PSO; on the benches
│ │ here it wins ZDT1 on both HV and
│ │ convergence by 100× over the
│ │ dominance-based methods) │ │ dominance-based methods)
│ │ → SmsEmoa (hypervolume-contribution selection; │ │
│ great on 23 obj at higher per-step cost) ├─ Want better front quality than NSGA-II
│ │ → Ibea (indicator-based; consistently the best
│ │ of the dominance-based methods on these
│ │ benches — wins ZDT3 HV and DTLZ2 mean
│ │ dist by 24×)
│ │ → Spea2 (strength + density) │ │ → Spea2 (strength + density)
│ │ → SmsEmoa (hypervolume-contribution selection;
│ │ elegant in theory but underperforms
│ │ NSGA-II on these benches at our budgets —
│ │ only worth its higher per-step cost on
│ │ fronts where exact HV-contribution is
│ │ the right discriminator)
│ │ │ │
│ ├─ Want decomposition / weight-vector style │ ├─ Want decomposition / weight-vector style
│ │ → Moead (very fast per generation, scales well) │ │ → Moead (very fast per generation, scales well)
@@ -312,19 +328,23 @@ START
│ │ → EpsilonMoea (ε-grid archive, │ │ → EpsilonMoea (ε-grid archive,
│ │ archive size auto-limits) │ │ archive size auto-limits)
│ │ │ │
│ ├─ Real-valued and want swarm style
│ │ → Mopso
│ │
│ └─ Just one starting decision (no population budget) │ └─ Just one starting decision (no population budget)
│ → Paes (1+1 ES with a Pareto archive) │ → Paes (1+1 ES with a Pareto archive)
└─ 4+ (many-objective) └─ 4+ (many-objective)
├─ Strong default ├─ Linear / simplex-shaped front (e.g., DTLZ1)
│ → Nsga3 (reference-point niching, canonical) │ → Grea (grid coords drive ranking; on DTLZ1
→ Moead (decomposition; scales naturally) here it beats NSGA-III by 3× and
│ AGE-MOEA by 2.5×)
│ → Moead (decomposition shines on linear fronts;
│ second on DTLZ1, also among the
│ fastest per generation)
├─ Want geometric structure inferred (vs assumed) ├─ Curved / unknown front geometry
│ → Nsga3 (reference-point niching, canonical;
│ a strong default when the front
│ isn't simplex-shaped)
│ → AgeMoea (estimates L_p geometry per generation) │ → AgeMoea (estimates L_p geometry per generation)
│ → Rvea (reference vectors with adaptive penalty) │ → Rvea (reference vectors with adaptive penalty)
@@ -333,10 +353,6 @@ START
│ at high obj count) │ at high obj count)
│ → Hype (Monte Carlo HV estimation; scales │ → Hype (Monte Carlo HV estimation; scales
│ to arbitrary M) │ to arbitrary M)
└─ Want grid-based diversity
→ Grea (grid coords drive ranking; particularly
good on linear/simplex fronts)
``` ```
### Quick reference ### Quick reference
@@ -345,7 +361,7 @@ START
| Algorithm | Objectives | Decision | Strengths | | Algorithm | Objectives | Decision | Strengths |
|---|---|---|---| |---|---|---|---|
| `BayesianOpt` | 1 | `Vec<f64>` | GP surrogate + Expected Improvement; the gold standard | | `BayesianOpt` | 1 | `Vec<f64>` | GP surrogate + EI; gold standard *with* per-problem kernel tuning (default RBF at 60 evals is honestly bad) |
| `Tpe` | 1 | `Vec<f64>` | KDE surrogate; robust without hyperparameter tuning | | `Tpe` | 1 | `Vec<f64>` | KDE surrogate; robust without hyperparameter tuning |
| `Hyperband` | 1 | any | multi-fidelity; needs `PartialProblem` | | `Hyperband` | 1 | any | multi-fidelity; needs `PartialProblem` |
@@ -381,18 +397,18 @@ START
| `Paes` | 23 | 1+1 ES with Pareto archive | | `Paes` | 23 | 1+1 ES with Pareto archive |
| `Nsga2` | 23 | canonical Pareto-based EA | | `Nsga2` | 23 | canonical Pareto-based EA |
| `Spea2` | 23 | strength + density | | `Spea2` | 23 | strength + density |
| `Mopso` | 23 | multi-objective PSO with archive | | `Mopso` | 23 | multi-objective PSO; best convergence on smooth real-valued 2-obj fronts |
| `Ibea` | 2+ | indicator-based; scales to many-obj | | `Ibea` | 2+ | indicator-based; consistently best of the dominance-based methods |
| `SmsEmoa` | 2+ | hypervolume-contribution selection | | `SmsEmoa` | 2+ | exact HV-contribution selection; high per-step cost, modest gain |
| `Hype` | 2+ | Monte Carlo HV estimation | | `Hype` | 2+ | Monte Carlo HV estimation |
| `EpsilonMoea` | 2+ | ε-grid archive; auto-sized | | `EpsilonMoea` | 2+ | ε-grid archive; auto-sized |
| `PesaII` | 2+ | grid-based region selection | | `PesaII` | 2+ | grid-based region selection |
| `AgeMoea` | 2+ | adaptive front-geometry estimation | | `AgeMoea` | 2+ | adaptive front-geometry estimation |
| `Knea` | 2+ | knee-point favored survival | | `Knea` | 2+ | knee-point favored survival |
| `Moead` | 2+ | decomposition; fast per-gen | | `Moead` | 2+ | decomposition; fast per-gen |
| `Nsga3` | 4+ | reference-point niching | | `Nsga3` | 4+ | reference-point niching; strong on curved fronts |
| `Rvea` | 4+ | reference vectors with penalty | | `Rvea` | 4+ | reference vectors with penalty |
| `Grea` | 4+ | grid coords drive selection | | `Grea` | 4+ | grid coords drive selection; particularly strong on linear/simplex fronts |
## Current algorithms ## Current algorithms