docs: correct disconnected-front and sequencing guidance from compare results

The `compare` harness contradicts two recommendations in the decision
trees:

- "Disconnected or non-convex front -> AGE-MOEA, KnEA, IBEA" had it
  backwards. Added KnEA to the ZDT3 table (the disconnected-front
  benchmark) so the claim is actually exercised: AGE-MOEA and KnEA
  finish *last and second-last*; IBEA wins, MOEA/D and NSGA-II follow.
  The trees now split "disconnected" from "non-convex contiguous",
  lead disconnected with IBEA, and note the geometry-aware methods
  trail when the front is in pieces.
- The book filed Simulated Annealing on permutations as a "one-decision
  baseline" and led the JSS row with GA. On the harness SA *wins* the
  FT06 job-shop table and ties for the TSP optimum; SA/Tabu edge out
  the GA. Reframed SA/Tabu as strong sequencing methods.

Also regenerated examples/compare-results.md for the new ZDT3 row.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-14 08:43:55 -06:00
co-authored by Claude Opus 4.7
parent 7004a572c8
commit a9d72b94f4
4 changed files with 63 additions and 15 deletions
+24
View File
@@ -1574,6 +1574,29 @@ fn zdt3_age_moea(seed: u64) -> MoRun {
}
}
fn zdt3_knea(seed: u64) -> MoRun {
let problem = zdt3_problem();
let bounds = vec![(0.0, 1.0); ZDT3_DIM];
let initializer = RealBounds::new(bounds.clone());
let variation = CompositeVariation {
crossover: SimulatedBinaryCrossover::new(bounds.clone(), 15.0, 0.5),
mutation: PolynomialMutation::new(bounds, 20.0, 1.0 / ZDT3_DIM as f64),
};
let pop = 100;
let config = KneaConfig {
population_size: pop,
generations: ZDT3_BUDGET / pop,
seed,
};
let mut opt = Knea::new(config, initializer, variation);
let t0 = Instant::now();
let result = opt.run(&problem);
MoRun {
front: result.pareto_front,
wall_ms: t0.elapsed().as_millis(),
}
}
// -----------------------------------------------------------------------------
// DTLZ1 runners (curated many-obj subset)
// -----------------------------------------------------------------------------
@@ -1998,6 +2021,7 @@ fn run_zdt3_comparison() {
("MOEA/D", zdt3_moead),
("IBEA", zdt3_ibea),
("AGE-MOEA", zdt3_age_moea),
("KnEA", zdt3_knea),
];
let mut rows: Vec<(f64, Vec<String>)> = Vec::new();
for (name, runner) in runners {