Skip to content

fix: land three-objective NSGA selection on main and document it - #18

Merged
rasros merged 2 commits into
mainfrom
fix/land-three-objectives
Jul 28, 2026
Merged

fix: land three-objective NSGA selection on main and document it#18
rasros merged 2 commits into
mainfrom
fix/land-three-objectives

Conversation

@rasros

@rasros rasros commented Jul 28, 2026

Copy link
Copy Markdown
Owner

Re-lands PR #17, whose changes never reached main. #16 merged at 08:46:36 (nsga-n-objectives -> main); #17 merged 12 seconds later into nsga-n-objectives, which main had already taken. So #17's content landed on an already-merged branch and never propagated — structural_complexity was absent from main and the DOT/Typst bug was still live.

bbdd47e is a clean cherry-pick of 4aec365; the resulting tree is byte-identical to the reviewed #17 tip, so there is nothing new to review in that commit beyond what was already approved.

850d749 is new: the README documented two objectives and would have been wrong the moment this landed, so the docs ship with the code.

The README's objectives section now lists all three (visual error, visual complexity, structural complexity), states that each is normalized by its own pool maximum so no weighting between them exists, and records that adding a fourth objective needs only a longer vector. That last claim is verified rather than asserted: non_dominated_sort, crowding_distance, pareto_select and pareto_front were all exercised at arity 3, 4 and 5 with no code changes. It also explains why structural complexity counts source characters instead of compressed size, since that decision is not self-evident from the code.

One deliberate omission. The old text claimed the constraint-first gate treats "the top 25% by visual error" as feasible, but _percentile_75 actually makes roughly the best 75% feasible — measured, 7 of 10 candidates. Writing "75%" would document what may well be a bug as intended behaviour, and writing "25%" would be false, so the new text says the gate is a percentile of the pool without naming it. The specific number is a separate open decision about whether the README or the code is authoritative; when that is settled this line gets the number.

Also corrects the lineage.csv description in the output-layout tree, which no longer carries a single complexity column.

400 passed, 13 skipped, ruff clean.

@rasros
rasros merged commit ba76d45 into main Jul 28, 2026
1 check passed
@rasros
rasros deleted the fix/land-three-objectives branch July 28, 2026 09:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant