Phase 7 §12.1: larger-than-house benchmark maple-court + baseline (leu.1)

26 programme entries / 52 rooms / 3 storeys (~1015 m2 internal). Mirrors
harbor's adjacency-to-c load + secondary adjacencies; room codes avoid the
generic c/o/s leading-letter trap. Staged adjacency-aware baseline (20000
evals, URB_NO_OCCLUSION=1): 145/158/152 fails, mean 151.7; all native
re-score OK. Best (145) saved as generated.dom. Recorded in DESIGN.md §12.1.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Bruno Postle 2026-06-19 14:00:21 +01:00
parent 73b9e2ae23
commit 7d7994e7a3
5 changed files with 1164 additions and 7 deletions

File diff suppressed because one or more lines are too long

View file

@ -1107,3 +1107,62 @@ core as `fixed_circ`; threaded through `search_staged(seed_adjacency_aware=True)
residual is geometry- and shape-bound (size/proportion/crinkliness on the
denser, more-circulation layouts), which is the canonical-encoding /
shape-feasibility territory of `homemaker-py-9gp`.
## 12. Phase 7 — scaling validation & residual reduction (post-c4c)
**Epic:** `homemaker-py-leu`. **Status:** opened 2026-06-19. Continuation of the
closed Phase 6 (§11). Phase 6 evidence located the leverage in *construction /
seed quality* (§11.6/§11.7 wins) rather than search machinery (§11.4/§11.5 both
regressed); the harbor residual is now geometry/shape-bound at ~85 fails. This
section is the experiment ledger for Phase 7, same discipline as §11: each
subsection records the command, the numbers, and a one-line verdict.
### 12.1 Larger-than-house benchmark: `maple-court` (`homemaker-py-leu.1`) — DONE
**Why.** Harbor (16 programme entries, 2 storeys) was the biggest real programme
in `examples/`. `homemaker-py-9gp`'s headline claim is scaling **>16 rooms** and
its acceptance criterion demands "a larger-than-house programme" to measure on —
so a bigger benchmark is a prerequisite, not optional. Proportion-aware seeding
(`leu.2`) and re-scoped 9gp are both measured against this baseline.
**The benchmark.** `examples/maple-court/` — a three-storey assisted-living /
co-housing facility: **26 distinct programme entries / 52 room instances** across
**3 required storeys** (`storey_minimum: 3`), ~1015 m² target internal area on a
~790 m²/floor plot. It mirrors harbor's structure deliberately — a dominant
adjacency-to-`c` load on nearly every room plus a handful of secondary
adjacencies (`da1↔k1`, `da1↔o`, `lr1/ws1/lo1/gh1/gy1 ↔ o`), anonymous
interchangeable room families (`m`×3, `t`×6, `n`×4, `r`×12, `em`×2, `py`×2,
`tt`×4), and `staircase_min/max: 2`. Code letters avoid the generic `c`/`o`/`s`
leading-letter trap (those are reserved in `fitness.py`/`graph.py` for
circulation/outside/sahn): no *room* code starts with c/o/s, so harbor's quirk of
typing Common Room / Storage / Office as quasi-generic (`cr1`/`st1`/`of`) is not
reproduced. `init.dom` is a single `O` footprint; storeys are built by the search
from `storey_minimum`, exactly as harbor.
**Baseline (current default search: adjacency-aware seeding + staged, §11.7).**
Reproduce (`URB_NO_OCCLUSION=1`, 20000 evals, staged, `ADJ=1` default):
```bash
URB_NO_OCCLUSION=1 python3 experiments/run_staged_search.py \
examples/maple-court 20000 <seed> examples/maple-court/init.dom scratch/mc_s<seed>.dom
```
| seed | total fails | best lineage |
|-----:|------------:|---------------------|
| 0 | **145** | rotate 0/rrlr |
| 1 | 158 | core_undivide noop |
| 2 | 152 | swap 0/rrlllr |
| mean | **151.7** | |
Each run executed exactly 20000 native evals across 250 topologies (~36 min,
~9.1 evals/s) and re-scored native-consistent (`→ OK`). The best layout (seed 0,
145 fails) is saved as `examples/maple-court/generated.dom` with its `.fails`.
The single-stage harness (`run_search_scaled.py`) also accepts the programme
unchanged. The score prints near-zero (`0.5^145` fail cliff) — the **fail count**
is the yardstick.
- *Verdict: benchmark established at mean 151.7 fails (best 145).* As expected for
a programme ~3× harbor's room count, the absolute fail floor is well above
harbor's ~85; this is the scaling yardstick `leu.2` (proportion-aware seeding)
and the re-scoped `9gp` are measured against. The residual character is the same
geometry/shape family flagged at the close of §11.7.

View file

@ -0,0 +1,676 @@
node:
- - 0.0
- 0.0
- - 30.0
- 1.5
- - 29.0
- 28.0
- - 0.0
- 27.0
perimeter:
a: private
b: private
c: null
d: null
rotation: 0
division:
- 0.48972134586011995
- 0.48972134586011995
height: 3.0
elevation: 0.0
wall_inner: 0.08
wall_outer: 0.25
l:
rotation: 1
division:
- 0.5289793206995492
- 0.5289793206995492
l:
rotation: 1
division:
- 0.5099021948415419
- 0.5099021948415419
l:
rotation: 1
division:
- 0.49856675334640843
- 0.49856675334640843
l:
rotation: 0
division:
- 0.5178717180846175
- 0.5178717180846175
l:
type: C
rotation: 0
r:
type: da1
rotation: 0
r:
rotation: 1
division:
- 0.618489667221237
- 0.618489667221237
l:
rotation: 1
division:
- 0.31523924613469856
- 0.31523924613469856
l:
type: m
rotation: 0
r:
rotation: 1
division:
- 0.3052306165286658
- 0.3052306165286658
l:
type: t
rotation: 0
r:
type: O
rotation: 0
r:
type: lr1
rotation: 0
r:
rotation: 1
division:
- 0.49581744711565423
- 0.49581744711565423
l:
type: C
rotation: 0
r:
type: ef1
rotation: 0
r:
rotation: 3
division:
- 0.5333949173749062
- 0.5333949173749062
l:
type: me1
rotation: 0
r:
rotation: 0
division:
- 0.5154659819633809
- 0.5154659819633809
l:
rotation: 3
division:
- 0.5403609977908952
- 0.5403609977908952
l:
rotation: 0
division:
- 0.5382440091177163
- 0.5382440091177163
l:
type: t
rotation: 0
r:
type: t
rotation: 0
r:
type: C
rotation: 0
r:
rotation: 2
division:
- 0.6126553743467879
- 0.6126553743467879
l:
rotation: 1
division:
- 0.5354565304111805
- 0.5354565304111805
l:
type: m
rotation: 0
r:
type: gh1
rotation: 0
r:
type: ws1
rotation: 0
r:
rotation: 3
division:
- 0.4440758250781146
- 0.4440758250781146
l:
rotation: 3
division:
- 0.5511311296626411
- 0.5511311296626411
l:
rotation: 1
division:
- 0.3324896567936677
- 0.3324896567936677
l:
rotation: 1
division:
- 0.4512076431357789
- 0.4512076431357789
l:
type: rc1
rotation: 0
r:
rotation: 0
division:
- 0.5660504344192934
- 0.5660504344192934
l:
type: m
rotation: 0
r:
type: t
rotation: 1
r:
type: C
rotation: 0
r:
type: ur1
rotation: 2
r:
rotation: 2
division:
- 0.5043764972194804
- 0.5043764972194804
l:
rotation: 2
division:
- 0.54254576588651
- 0.54254576588651
l:
type: C
rotation: 0
r:
rotation: 1
division:
- 0.5296643220633273
- 0.5296643220633273
l:
rotation: 2
division:
- 0.5322716625080546
- 0.5322716625080546
l:
type: t
rotation: 0
r:
type: t
rotation: 0
r:
type: ph1
rotation: 0
r:
rotation: 1
division:
- 0.5420591912251276
- 0.5420591912251276
l:
rotation: 2
division:
- 0.516378261068275
- 0.516378261068275
l:
type: C
rotation: 0
r:
type: la1
rotation: 0
r:
rotation: 1
division:
- 0.5192607827994244
- 0.5192607827994244
l:
type: C
rotation: 0
r:
type: k1
rotation: 0
above:
rotation: 0
division:
- 0.526998634243673
- 0.526998634243673
height: 3.0
l:
rotation: 1
division:
- 0.5121524009718241
- 0.5121524009718241
l:
rotation: 1
division:
- 0.5129226760797292
- 0.5129226760797292
l:
rotation: 1
division:
- 0.48767769707880537
- 0.48767769707880537
l:
rotation: 0
division:
- 0.5079677883627942
- 0.5079677883627942
l:
type: C
rotation: 0
r:
type: C
rotation: 0
r:
rotation: 1
division:
- 0.587911578810674
- 0.587911578810674
l:
rotation: 1
division:
- 0.29797562403474404
- 0.29797562403474404
l:
type: n
rotation: 0
r:
type: C
rotation: 0
r:
type: C
rotation: 0
r:
rotation: 1
division:
- 0.4770891067286853
- 0.4770891067286853
l:
type: C
rotation: 0
r:
type: n
rotation: 0
r:
rotation: 3
division:
- 0.49408340130895223
- 0.49408340130895223
l:
type: ur2
rotation: 0
r:
rotation: 0
division:
- 0.5115553254069676
- 0.5115553254069676
l:
rotation: 2
division:
- 0.506746320809621
- 0.506746320809621
l:
rotation: 1
division:
- 0.5071046603554075
- 0.5071046603554075
l:
type: py
rotation: 0
r:
type: C
rotation: 0
r:
type: C
rotation: 0
r:
rotation: 3
division:
- 0.5109144093837654
- 0.5109144093837654
l:
rotation: 3
division:
- 0.5027915478837678
- 0.5027915478837678
l:
type: li1
rotation: 0
r:
type: n
rotation: 0
r:
type: C
rotation: 0
r:
rotation: 3
division:
- 0.46690872577815845
- 0.46690872577815845
l:
rotation: 3
division:
- 0.49016627906924726
- 0.49016627906924726
l:
rotation: 1
division:
- 0.5163252145093113
- 0.5163252145093113
l:
rotation: 1
division:
- 0.5303614308268739
- 0.5303614308268739
l:
type: py
rotation: 0
r:
rotation: 0
division:
- 0.499529641462255
- 0.499529641462255
l:
type: C
rotation: 0
r:
rotation: 1
division:
- 0.5117532524721022
- 0.5117532524721022
l:
type: lo1
rotation: 0
r:
type: O
rotation: 0
r:
type: C
rotation: 0
r:
type: C
rotation: 2
r:
rotation: 2
division:
- 0.5042660620564343
- 0.5042660620564343
l:
rotation: 2
division:
- 0.48797371242168397
- 0.48797371242168397
l:
type: C
rotation: 0
r:
rotation: 3
division:
- 0.5015098614145813
- 0.5015098614145813
l:
rotation: 2
division:
- 0.505099762781295
- 0.505099762781295
l:
type: em
rotation: 0
r:
type: em
rotation: 0
r:
type: en1
rotation: 0
r:
rotation: 1
division:
- 0.5085156175178116
- 0.5085156175178116
l:
rotation: 2
division:
- 0.49563732490153656
- 0.49563732490153656
l:
type: C
rotation: 0
r:
type: n
rotation: 0
r:
rotation: 1
division:
- 0.4958321597784836
- 0.4958321597784836
l:
type: C
rotation: 0
r:
type: C
rotation: 0
above:
rotation: 0
division:
- 0.526998634243673
- 0.526998634243673
height: 3.0
l:
rotation: 1
division:
- 0.5121524009718241
- 0.5121524009718241
l:
rotation: 1
division:
- 0.5129226760797292
- 0.5129226760797292
l:
rotation: 1
division:
- 0.48767769707880537
- 0.48767769707880537
l:
rotation: 0
division:
- 0.5079677883627942
- 0.5079677883627942
l:
type: C
rotation: 0
r:
type: C
rotation: 0
r:
rotation: 1
division:
- 0.587911578810674
- 0.587911578810674
l:
rotation: 1
division:
- 0.29797562403474404
- 0.29797562403474404
l:
type: ut1
rotation: 0
r:
type: q1
rotation: 0
r:
type: C
rotation: 0
r:
rotation: 1
division:
- 0.4770891067286853
- 0.4770891067286853
l:
type: C
rotation: 0
r:
type: tt
rotation: 0
r:
rotation: 3
division:
- 0.49408340130895223
- 0.49408340130895223
l:
type: r
rotation: 0
r:
rotation: 0
division:
- 0.5115553254069676
- 0.5115553254069676
l:
rotation: 2
division:
- 0.506746320809621
- 0.506746320809621
l:
rotation: 1
division:
- 0.5071046603554075
- 0.5071046603554075
l:
type: r
rotation: 0
r:
type: r
rotation: 0
r:
type: r
rotation: 0
r:
rotation: 3
division:
- 0.5109144093837654
- 0.5109144093837654
l:
rotation: 3
division:
- 0.5027915478837678
- 0.5027915478837678
l:
type: r
rotation: 0
r:
type: r
rotation: 0
r:
type: C
rotation: 0
r:
rotation: 3
division:
- 0.46690872577815845
- 0.46690872577815845
l:
rotation: 3
division:
- 0.49016627906924726
- 0.49016627906924726
l:
rotation: 1
division:
- 0.5163252145093113
- 0.5163252145093113
l:
rotation: 1
division:
- 0.5303614308268739
- 0.5303614308268739
l:
type: r
rotation: 0
r:
rotation: 0
division:
- 0.499529641462255
- 0.499529641462255
l:
type: gy1
rotation: 0
r:
rotation: 1
division:
- 0.5072714594324588
- 0.5072714594324588
l:
type: r
rotation: 0
r:
type: O
rotation: 0
r:
type: r
rotation: 0
r:
type: C
rotation: 2
r:
rotation: 2
division:
- 0.5042660620564343
- 0.5042660620564343
l:
rotation: 2
division:
- 0.48797371242168397
- 0.48797371242168397
l:
type: C
rotation: 0
r:
rotation: 3
division:
- 0.5015098614145813
- 0.5015098614145813
l:
rotation: 2
division:
- 0.505099762781295
- 0.505099762781295
l:
type: r
rotation: 0
r:
type: tt
rotation: 0
r:
type: tt
rotation: 0
r:
rotation: 1
division:
- 0.5085156175178116
- 0.5085156175178116
l:
rotation: 2
division:
- 0.49563732490153656
- 0.49563732490153656
l:
type: ur3
rotation: 0
r:
type: r
rotation: 0
r:
rotation: 1
division:
- 0.4958321597784836
- 0.4958321597784836
l:
type: tt
rotation: 0
r:
type: r
rotation: 0

View file

@ -0,0 +1,25 @@
---
node:
-
- 0.0
- 0.0
-
- 30.0
- 1.5
-
- 29.0
- 28.0
-
- 0.0
- 27.0
perimeter:
a: private
b: private
c: ~
d: ~
type: O
rotation: 0
height: 3
elevation: 0.0
wall_inner: 0.08
wall_outer: 0.25

View file

@ -0,0 +1,394 @@
---
# Maple Court - Larger-than-house benchmark (homemaker-py-leu.1, DESIGN.md §12.1)
#
# A three-storey assisted-living / co-housing facility. Built to be the first
# benchmark larger than harbor-house (16 programme entries): 26 distinct space
# entries / 52 room instances across 3 required storeys, with a harbor-like
# adjacency-to-c load and a handful of secondary adjacencies (k/da/o clusters).
#
# Code conventions (first letter is semantic in fitness.py): generic c/o/s are
# reserved for circulation / outside / sahn, so no ROOM code starts with c, o or
# s. Living-family rooms lead with l, kitchen k, dining d, bathroom t; everything
# else uses a neutral leading letter (default room scoring).
# Building programme: three-storey community living facility
spaces:
# ---- GROUND FLOOR (level 0): community + service ----
lr1:
name: Common Living Room
size:
- 80.0
- 10.0
width:
- 6.0
- 1.5
proportion:
- 2.0
- 0.5
level: 0
adjacency:
- c
- o
ef1:
name: Entrance Foyer
size:
- 15.0
- 3.0
width:
- 3.0
- 0.5
level: 0
adjacency:
- c
da1:
name: Dining Area
size:
- 60.0
- 8.0
width:
- 5.0
- 1.0
proportion:
- 2.5
- 0.8
level: 0
adjacency:
- c
- k1
- o
k1:
name: Kitchen
size:
- 30.0
- 5.0
width:
- 4.0
- 1.0
level: 0
adjacency:
- da1
- c
ws1:
name: Workshop Space
size:
- 40.0
- 6.0
width:
- 5.0
- 1.0
proportion:
- 1.8
- 0.5
level: 0
adjacency:
- c
- o
la1:
name: Laundry Room
size:
- 20.0
- 4.0
width:
- 3.0
- 0.8
level: 0
adjacency:
- c
me1:
name: Mechanical/Electrical Room
size:
- 25.0
- 4.0
width:
- 3.5
- 0.8
level: 0
adjacency:
- c
ur1:
name: Ground Floor Storage
size:
- 22.0
- 4.0
width:
- 3.0
- 0.8
level: 0
adjacency:
- c
rc1:
name: Reception Office
size:
- 14.0
- 3.0
width:
- 3.0
- 0.6
level: 0
adjacency:
- c
ph1:
name: Clinic Room
size:
- 18.0
- 3.5
width:
- 3.0
- 0.6
level: 0
adjacency:
- c
gh1:
name: Greenhouse
size:
- 24.0
- 4.0
width:
- 3.5
- 0.8
level: 0
adjacency:
- c
- o
# Meeting rooms - anonymous interchangeable (3 total, ground floor)
m:
name: Meeting Room
size:
- 10.0
- 2.0
width:
- 2.5
- 0.5
level: 0
adjacency:
- c
count: 3
# Ground-floor bathrooms (6 total)
t:
name: Bathroom
size:
- 6.0
- 1.5
width:
- 2.0
- 0.5
level: 0
adjacency:
- c
count: 6
# ---- FIRST FLOOR (level 1): residents' shared + neighborhoods ----
li1:
name: Library Corner
size:
- 20.0
- 4.0
width:
- 3.5
- 0.8
level: 1
adjacency:
- c
lo1:
name: Lounge
size:
- 30.0
- 5.0
width:
- 4.0
- 1.0
proportion:
- 2.0
- 0.6
level: 1
adjacency:
- c
- o
# Staff offices - anonymous (2 total)
em:
name: Staff Office
size:
- 12.5
- 2.5
width:
- 2.5
- 0.5
level: 1
adjacency:
- c
count: 2
# Sleeping neighborhoods - anonymous interchangeable (4 total)
n:
name: Neighborhood
size:
- 60.0
- 8.0
width:
- 5.0
- 1.0
proportion:
- 2.0
- 0.6
level: 1
adjacency:
- c
count: 4
ur2:
name: First Floor Storage
size:
- 18.0
- 3.5
width:
- 3.0
- 0.8
level: 1
adjacency:
- c
en1:
name: TV / Media Room
size:
- 22.0
- 4.0
width:
- 3.5
- 0.8
level: 1
adjacency:
- c
# Therapy rooms - anonymous (2 total)
py:
name: Therapy Room
size:
- 16.0
- 3.0
width:
- 3.0
- 0.6
level: 1
adjacency:
- c
count: 2
# ---- SECOND FLOOR (level 2): individual rooms + amenity ----
# Individual resident rooms - anonymous (12 total)
r:
name: Individual Room
size:
- 10.0
- 2.0
width:
- 2.5
- 0.5
level: 2
adjacency:
- c
count: 12
gy1:
name: Exercise Room
size:
- 28.0
- 5.0
width:
- 4.0
- 0.8
proportion:
- 1.8
- 0.5
level: 2
adjacency:
- c
- o
ut1:
name: Utilities Closet
size:
- 14.0
- 3.0
width:
- 2.5
- 0.6
level: 2
adjacency:
- c
ur3:
name: Second Floor Storage
size:
- 16.0
- 3.0
width:
- 3.0
- 0.8
level: 2
adjacency:
- c
# Second-floor bathrooms (4 total)
tt:
name: Upper Bathroom
size:
- 6.0
- 1.5
width:
- 2.0
- 0.5
level: 2
adjacency:
- c
count: 4
q1:
name: Quiet Room
size:
- 12.0
- 2.5
width:
- 2.5
- 0.6
level: 2
adjacency:
- c
# Building constraints
storey_minimum: 3
storey_limit: 4
force_roof_garden: 0
# Circulation ratio (allow more circulation for larger building)
ratio_circulation:
- 0.08
- 0.15
# Outside space ratio (courtyard requirement)
ratio_outside:
- 0.15
- 0.10
# Staircase requirements (main + secondary)
staircase_min: 2
staircase_max: 2
# Economic parameters
value_inside: 300.0
value_circulation: 50.0
value_outside: 100.0
value_supported: 300.0