Owner: "maybe plot_ratio is having unintended consequences, Alexander simply says that all levels should have accessible outside space, he doesn't say how much." Both halves are right, and the codebase had the two rules the wrong way round. ratio_outside is a gaussian on the outdoor FRACTION, applied as a whole-building multiplier, and its declared targets have no stated basis and contradict each other: health-centre targets 0.06 and sits at 0.096-0.129, so it is penalised x0.39-x0.77 for having too MUCH; programme-house targets 0.30 and sits at 0.098-0.293, penalised x0.40-x0.999 for having too LITTLE. Penalties as large as the ratio_circulation ones 39.24 removed, pulling two programmes in opposite directions on the same quantity. force_roof_garden already implements the rule Alexander actually states -- per level, no outdoor space at all is a hard fail, no quantity attached. It has existed all along and was switched OFF in every corpus config. Near-miss worth recording: measuring first, I found zero "no outside space" fails across the twelve baseline runs and briefly read that as the requirement being met everywhere. It meant the check never ran. Same shape as 39.20's parity tests -- no failures from a test that is not executing looks exactly like no failures from a test that passes, and the tell was again the config, not the code. Enabled, it bites on 4 of 25 baseline levels: maple s0 level 1, and programme-house level 0 in all three seeds. A house with no outdoor space on its own ground floor is a fair criticism of the layout, and exactly what a building-level fraction cannot catch, since 22% outdoor concentrated on one storey satisfies it perfectly. The upper side ratio_outside used to provide is covered in a better currency by the minimum-internal-area factor (internal area >= 1.2x the programme's declared room area), which is live -- binding on harbor s0 x0.920 and programme-house s0 x0.787. This is the one change in 39.22-39.25 whose risk is NOT measured: nothing here proves the outdoor fraction will not drift up once the search is free to raise it, and outdoor space is profitable (1.64 return against a room's 0.66). The re-baseline (bk9) is what shows it, and 39.25 asks for the fraction to be recorded there. 4 hard fails added, none removed. 426 passed. Refs homemaker-py-hxi. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MJ84Feep79Hhm3E4zZJmnB
442 lines
7.8 KiB
Text
442 lines
7.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
|
|
# homemaker-py-hxi (DESIGN.md §39.25): ENABLED. Fails a level that has no
|
|
# outdoor space at all -- Alexander's actual requirement, per level and with no
|
|
# quantity attached. It had been off in every corpus config, so the only thing
|
|
# expressing outdoor space was ratio_outside's arbitrary fraction.
|
|
force_roof_garden: 1
|
|
|
|
# Circulation ratio (allow more circulation for larger building)
|
|
# homemaker-py-hxi (DESIGN.md §39.24): disabled. The score is value/cost, a
|
|
# ratio, so the per-m2 economics (circulation worth 50 against a build cost of
|
|
# 200) is ALREADY a proportional pressure against circulation -- this said the
|
|
# same thing a second time, and with a curve where twice the corridor is far
|
|
# more than twice as bad. Its other side, "a building needs some circulation",
|
|
# was worth at most 13% here and is enforced structurally anyway by the access
|
|
# and connectivity checks. Set a [target, sigma] pair to re-enable.
|
|
ratio_circulation:
|
|
|
|
# Outside space ratio (courtyard requirement)
|
|
# homemaker-py-hxi (DESIGN.md §39.25): disabled. Alexander says every level
|
|
# should have accessible outside space; he does not say how much. The
|
|
# qualitative requirement is force_roof_garden below. Set a [target, sigma]
|
|
# pair to re-enable this quantitative one.
|
|
ratio_outside:
|
|
|
|
# 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
|