Owner's ruling. Measured over the twelve baseline layouts as realised value per m2 (rate x quality, not the rate alone): as shipped before this room 67.0 terrace 294.6 violates, 4.39x value_supported=100 only room 67.0 terrace 98.2 violates, 1.46x geometric mean only room 132.9 terrace 296.8 violates, 2.23x both room 132.9 terrace 98.9 satisfies The 4.4x is roughly 2.2x aggregation and 2.0x rate, so neither half alone is enough. That is why 39.18's geometric-mean aggregation moves from default-OFF to default-ON here rather than waiting on its own A/B: it is not an optional improvement, it is half of a ruling. value_supported 300 -> 100, and set to value_outside rather than to a number that makes the inequality come out -- back-solving from the corpus's measured mean room quality would rot the moment either changed. Outdoor space is worth the same to an occupant whatever level it sits on; the real difference between a ground garden and a roof terrace is what it takes to BUILD, and cost already says that (outside 10.0 vs outside_supported 110.0). Value describes worth, cost describes structure, and the level belongs in the second. Changed in CONF_DEFAULTS and the four corpus patterns.config files, which all declared 300.0 explicitly. NOT changed in harbor-house-l0 (a shape-curve test fixture) or y51-sweep-* (historical fixtures that exist to reproduce past measurements) -- repricing those would destroy what they are for. Neither change can move a fail, structurally rather than luckily: value rates never enter fail emission, and evaluate_leaf emits each fail from its factor before anything is combined. Verified corpus-wide: identical fail sets, scores +11% to +169% (and -5% once, on a layout that is mostly terrace). tests/test_terrace_value_ruling.py pins the ruling as an invariant of the objective, and asserts that reverting the aggregation breaks it again, so neither half can be quietly dropped. The 500k cold-start baseline (39.12) is superseded -- this changes what "good" means. The layouts stay valid and their fail counts are unchanged, but a fresh corpus run is needed before any new number is compared with them. Still untouched: circulation returns 0.07 per unit cost against a room's 0.66, by far the worst thing a building can contain. That is homemaker-py-hxi. Refs homemaker-py-ecx. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MJ84Feep79Hhm3E4zZJmnB
431 lines
6.8 KiB
Text
431 lines
6.8 KiB
Text
---
|
|
# 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:
|
|
usage: living
|
|
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:
|
|
usage: none
|
|
name: Entrance Foyer
|
|
size:
|
|
- 15.0
|
|
- 3.0
|
|
width:
|
|
- 3.0
|
|
- 0.5
|
|
level: 0
|
|
adjacency:
|
|
- c
|
|
|
|
da1:
|
|
usage: living
|
|
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:
|
|
usage: kitchen
|
|
name: Kitchen
|
|
size:
|
|
- 30.0
|
|
- 5.0
|
|
width:
|
|
- 4.0
|
|
- 1.0
|
|
level: 0
|
|
adjacency:
|
|
- da1
|
|
- c
|
|
|
|
ws1:
|
|
usage: living
|
|
name: Workshop Space
|
|
size:
|
|
- 40.0
|
|
- 6.0
|
|
width:
|
|
- 5.0
|
|
- 1.0
|
|
proportion:
|
|
- 1.8
|
|
- 0.5
|
|
level: 0
|
|
adjacency:
|
|
- c
|
|
- o
|
|
|
|
la1:
|
|
usage: utility
|
|
name: Laundry Room
|
|
size:
|
|
- 20.0
|
|
- 4.0
|
|
width:
|
|
- 3.0
|
|
- 0.8
|
|
level: 0
|
|
adjacency:
|
|
- c
|
|
|
|
me1:
|
|
crinkliness: none # no window needed
|
|
usage: utility
|
|
name: Mechanical/Electrical Room
|
|
size:
|
|
- 25.0
|
|
- 4.0
|
|
width:
|
|
- 3.5
|
|
- 0.8
|
|
level: 0
|
|
adjacency:
|
|
- c
|
|
|
|
ur1:
|
|
crinkliness: none # no window needed
|
|
usage: utility
|
|
name: Ground Floor Storage
|
|
size:
|
|
- 22.0
|
|
- 4.0
|
|
width:
|
|
- 3.0
|
|
- 0.8
|
|
level: 0
|
|
adjacency:
|
|
- c
|
|
|
|
rc1:
|
|
usage: none
|
|
name: Reception Office
|
|
size:
|
|
- 14.0
|
|
- 3.0
|
|
width:
|
|
- 3.0
|
|
- 0.6
|
|
level: 0
|
|
adjacency:
|
|
- c
|
|
|
|
ph1:
|
|
usage: bedroom
|
|
name: Clinic Room
|
|
size:
|
|
- 18.0
|
|
- 3.5
|
|
width:
|
|
- 3.0
|
|
- 0.6
|
|
level: 0
|
|
adjacency:
|
|
- c
|
|
|
|
gh1:
|
|
usage: living
|
|
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:
|
|
usage: living
|
|
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:
|
|
usage: toilet
|
|
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:
|
|
usage: living
|
|
name: Library Corner
|
|
size:
|
|
- 20.0
|
|
- 4.0
|
|
width:
|
|
- 3.5
|
|
- 0.8
|
|
level: 1
|
|
adjacency:
|
|
- c
|
|
|
|
lo1:
|
|
usage: living
|
|
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:
|
|
usage: bedroom
|
|
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:
|
|
usage: bedroom
|
|
name: Neighborhood
|
|
size:
|
|
- 60.0
|
|
- 8.0
|
|
width:
|
|
- 5.0
|
|
- 1.0
|
|
proportion:
|
|
- 2.0
|
|
- 0.6
|
|
level: 1
|
|
adjacency:
|
|
- c
|
|
count: 4
|
|
|
|
ur2:
|
|
crinkliness: none # no window needed
|
|
usage: utility
|
|
name: First Floor Storage
|
|
size:
|
|
- 18.0
|
|
- 3.5
|
|
width:
|
|
- 3.0
|
|
- 0.8
|
|
level: 1
|
|
adjacency:
|
|
- c
|
|
|
|
en1:
|
|
usage: living
|
|
name: TV / Media Room
|
|
size:
|
|
- 22.0
|
|
- 4.0
|
|
width:
|
|
- 3.5
|
|
- 0.8
|
|
level: 1
|
|
adjacency:
|
|
- c
|
|
|
|
# Therapy rooms - anonymous (2 total)
|
|
py:
|
|
usage: bedroom
|
|
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:
|
|
usage: bedroom
|
|
name: Individual Room
|
|
size:
|
|
- 10.0
|
|
- 2.0
|
|
width:
|
|
- 2.5
|
|
- 0.5
|
|
level: 2
|
|
adjacency:
|
|
- c
|
|
count: 12
|
|
|
|
gy1:
|
|
usage: living
|
|
name: Exercise Room
|
|
size:
|
|
- 28.0
|
|
- 5.0
|
|
width:
|
|
- 4.0
|
|
- 0.8
|
|
proportion:
|
|
- 1.8
|
|
- 0.5
|
|
level: 2
|
|
adjacency:
|
|
- c
|
|
- o
|
|
|
|
ut1:
|
|
crinkliness: none # no window needed
|
|
usage: utility
|
|
name: Utilities Closet
|
|
size:
|
|
- 14.0
|
|
- 3.0
|
|
width:
|
|
- 2.5
|
|
- 0.6
|
|
level: 2
|
|
adjacency:
|
|
- c
|
|
|
|
ur3:
|
|
crinkliness: none # no window needed
|
|
usage: utility
|
|
name: Second Floor Storage
|
|
size:
|
|
- 16.0
|
|
- 3.0
|
|
width:
|
|
- 3.0
|
|
- 0.8
|
|
level: 2
|
|
adjacency:
|
|
- c
|
|
|
|
# Second-floor bathrooms (4 total)
|
|
tt:
|
|
usage: toilet
|
|
name: Upper Bathroom
|
|
size:
|
|
- 6.0
|
|
- 1.5
|
|
width:
|
|
- 2.0
|
|
- 0.5
|
|
level: 2
|
|
adjacency:
|
|
- c
|
|
- r # Brand: a WC beside sleeping space can be knocked through later
|
|
count: 4
|
|
|
|
q1:
|
|
usage: bedroom
|
|
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
|
|
# homemaker-py-ecx (DESIGN.md §39.19): an upper-level terrace is worth what
|
|
# outdoor space is worth (value_outside); it is the COST that differs by level
|
|
# (outside 10.0 vs outside_supported 110.0), not the value. At 300.0 -- the
|
|
# `value_inside` rate -- a terrace was worth more per square metre than a real
|
|
# internal room, which the owner ruled out.
|
|
value_supported: 100.0
|