G1–G10: document forensic-audit gaps without rewriting the 15-seed table - #8
Merged
Merged
Conversation
C# Dtlz2Problem(k:10) uses n_var=12. pymoo's default is n_var=10 (k=8). The pymoo oracle now passes n_var=12. Seed 1 was remeasured; the 15-seed table stays the published mismatched run. Co-authored-by: Jason <jkbennitt@users.noreply.github.com>
C# scores the full non-dominated front. The pymoo oracle scores res.F. Seed 1 was remeasured on a shared reference front. One-per-direction thinning is a cardinality aid, not a parity claim. Co-authored-by: Jason <jkbennitt@users.noreply.github.com>
When the objective span stays at most 1e-6, nadir becomes ideal+1.
pymoo 0.6.2 stops at the worst point in the population. A unit test
locks {2, 2+1e-8} to nadir 3.
Co-authored-by: Jason <jkbennitt@users.noreply.github.com>
RankNicheDistance stays the default and prefers lower niche count across niches. PymooCompatible matches the paper's same-niche split and pymoo's distance-tie coin flip. pc stays 1.0; the paper's experiments use 0.9. Co-authored-by: Jason <jkbennitt@users.noreply.github.com>
Ideal and worst still come from the whole pool. A feasible (1, 1) next to an infeasible (0, 0) keeps ideal at (0, 0). The rule is unchanged. Co-authored-by: Jason <jkbennitt@users.noreply.github.com>
PrepareForSelection normalizes survivors again and overwrites niche ids. pymoo keeps the ids from survival. A five-point fixture locks the current ids and shows the mating call rewrites them. Co-authored-by: Jason <jkbennitt@users.noreply.github.com>
A single objective has one Das-Dennis direction, so the default population size is 1 and the constructor throws. Callers pass populationSize for that degeneration. N = 1 stays rejected. Co-authored-by: Jason <jkbennitt@users.noreply.github.com>
Euclidean distance rejects unequal vector lengths. IGD+ has a hand-case test. Single-point ZDT samplers throw. ZDT6's truncated f1 floor and ZDT3's second endpoint stay as they are and are locked by tests. Co-authored-by: Jason <jkbennitt@users.noreply.github.com>
The fallback accepted a duplicate only for the last empty slot, so a mutation that cannot change x spun forever. Attempts are now capped and the rest of the slots may be duplicates. The decision key is G12 significant digits, not 12 decimal places. Co-authored-by: Jason <jkbennitt@users.noreply.github.com>
The Wilcoxon notes now cite the published Mann-Whitney results. The DTLZ2 seed-1 bar is 2x the mismatched 0.00350 scalar, so a regression to about 2.9x fails. Das-Dennis Count uses a checked 64-bit combination. Two-layer reference directions stay absent. Co-authored-by: Jason <jkbennitt@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Ten commits, one per verified finding from the 2026-09-22 forensic audit. Docs, protocol, fixtures, and guards come first. The default tournament stays
RankNicheDistance. The 15-seed Wilcoxon number table is not regenerated. No version bump.Commits
n_var=12(k=10), matchingDtlz2Problem. pymoo’s defaultn_var=10(k=8) is documented as the published mismatch. Seed 1 remeasured;docs/WILCOXON-RESULTS.mdnumbers left as published.res.Fis the niche optimum. Seed 1 remeasured on a shared reference front.ReferenceDirectionThinning.OnePerDirectionis a cardinality aid, not a parity claim.{2, 2+1e-8}→ nadir 3. pymoo 0.6.2 stops at worst-of-population.RankNicheDistanceis not Seada & Deb Algorithm 2.PymooCompatiblematches the same-niche split and pymoo’s distance-tie coin flip.pcstays 1.0 (paper experiments use 0.9). Default tournament unchanged.PrepareForSelectionre-normalizes survivors and overwrites niche ids. pymoo keeps the survival ids. Five-point fixture locks the current ids.WithDasDennis(1, 1)throws because N must be ≥ 2. Single-objective runs passpopulationSize. N=1 is not accepted.Zdt1(1)and the other one-point samplers throw. ZDT6 floor0.280775and ZDT3 endpoint0.1822287280are documented and locked (pymoo writes0.182228780).G12significant digits, not 12 decimal places.ReferenceDirections.Countuses a checkedlongand throws pastInt32. Two-layer reference directions stay absent.Measured seed 1 (pasted from this run, pymoo 0.6.2)
DTLZ2, p=12, pop=92, 150 gen,
PymooCompatible, n_var=12:Ratio of the meta values: 1.30732. One seed, fronts still differ by one point. The 15-seed pymoo column remains the old n_var=10 run (seed 1 there is C# 0.00403168 / pymoo 0.00349879).
ZDT1, p=12, pop=52, 100 gen, default tournament. Shared 100-point pymoo PF:
res.FC# on the library 500-point sampler reprinted 0.0514307. Not an algorithm ranking.
Docs vs code
n_var=12; optional thinning helper; Euclidean length check; single-point sampler guards; duplicate-elimination attempt cap; Das–DennisCountcheckedlong; DTLZ2 CI factor 3× → 2×. No survival/mating/nadir formula change. Default tournament unchanged.Checklist
dotnet test Unsga3.slnx -c Releasepasses locally (66 tests)Test plan
dotnet test Unsga3.slnx -c Release— 66 passed.docs/WILCOXON-RESULTS.mdnumeric rows were not regenerated.