From ee7b17da5ebd0d4cec0c70fad1ee47fcc3e3b27f Mon Sep 17 00:00:00 2001 From: tegwick Date: Mon, 12 Oct 2026 08:27:08 +0200 Subject: [PATCH] ASSEMBLY-WP-0006-T02: ground organism depreciation, robustness checks - dO grounded at 0.20/yr (software, R&D capital, AI hardware evidence); investment/learning rescaled so the baseline organism path is unchanged - robustness.py: key readings hold for grounded dO and brackets on channel self-reinforcement and wealth conversion; P3 effect size grows at strong self-reinforcement - models/ParameterGrounding.md: register of grounded / bracketed / assumed / calibrated parameters, open grounding needs Co-Authored-By: Claude Opus 5.5 Assistant: claude-code Assistant-Model: opus Assistant-Process: 1494246@bnt-lap001 Assistant-Session: caf6de6f-f9e4-47ce-a584-49baa271fa4b --- .custodian-brief.md | 12 ++- AGENTS.md | 1 + WORK-RECORDS.md | 4 +- models/GADM-0.4.md | 26 +++++- models/ParameterGrounding.md | 76 ++++++++++++++++ models/README.md | 3 +- simulations/README.md | 2 +- simulations/gadm02/gadm04.py | 5 + .../gadm02/results/life_cycle_gadm04.md | 44 ++++----- simulations/gadm02/results/robustness.md | 16 ++++ simulations/gadm02/robustness.py | 91 +++++++++++++++++++ workplans/ASSEMBLY-WP-0006-gadm-0.4.md | 2 +- 12 files changed, 252 insertions(+), 30 deletions(-) create mode 100644 models/ParameterGrounding.md create mode 100644 simulations/gadm02/results/robustness.md create mode 100644 simulations/gadm02/robustness.py diff --git a/.custodian-brief.md b/.custodian-brief.md index 9c8e8bb..331e4dd 100644 --- a/.custodian-brief.md +++ b/.custodian-brief.md @@ -2,12 +2,20 @@ # Custodian Brief — assembly-economics **Domain:** communication -**Last synced:** 2026-10-12 05:38 UTC +**Last synced:** 2026-10-12 06:24 UTC **State Hub:** http://127.0.0.1:8000 *(adjust if running on a remote machine)* ## Active Workstreams -*(none — repo may need first-session setup)* +### GADM-0.4: durable capability, cohort agency, estimated parameters +Progress: 1/6 done | workplan_id: `0016caec-fec5-5943-b565-a2c3d66b750f` + +**Open tasks:** +- · Ground key parameters `d4603db8` +- · Global sensitivity on GADM-0.3 `c33dd30b` +- · Equilibrium initialisation `16c2bb94` +- · Agency per cohort `788c4143` +- · Sectors and rival goods `a0a25ecb` ## Inbox Hygiene diff --git a/AGENTS.md b/AGENTS.md index 7666cab..14d4ab7 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -25,6 +25,7 @@ cd simulations/gadm02 && python3 -B wealth.py # GADM-0.3 wealth vs. power cd simulations/gadm02 && python3 -B organism_grid.py # GADM-0.3 organism grid cd simulations/gadm02 && python3 -B life_cycle.py # GADM-0.3 cohorts cd simulations/gadm02 && python3 -B life_cycle.py --model gadm04 # GADM-0.4 durable capability +cd simulations/gadm02 && python3 -B robustness.py # GADM-0.4 robustness of key readings ``` Use `python3 -B` after quick edits; a stale bytecode cache once masked a change. diff --git a/WORK-RECORDS.md b/WORK-RECORDS.md index d4c0020..8f248b1 100644 --- a/WORK-RECORDS.md +++ b/WORK-RECORDS.md @@ -13,7 +13,7 @@ | workplan | ASSEMBLY-WP-0003 | finished | — | workplans/ASSEMBLY-WP-0003-seed-integration.md | | workplan | ASSEMBLY-WP-0004 | finished | — | workplans/ASSEMBLY-WP-0004-gadm-0.2-modeling.md | | workplan | ASSEMBLY-WP-0005 | finished | — | workplans/ASSEMBLY-WP-0005-gadm-0.3.md | -| workplan | ASSEMBLY-WP-0006 | proposed | — | workplans/ASSEMBLY-WP-0006-gadm-0.4.md | +| workplan | ASSEMBLY-WP-0006 | active | — | workplans/ASSEMBLY-WP-0006-gadm-0.4.md | | task | ASSEMBLY-WP-0001-T01 | done | — | workplans/ASSEMBLY-WP-0001-statehub-bootstrap.md | | task | ASSEMBLY-WP-0001-T02 | done | — | workplans/ASSEMBLY-WP-0001-statehub-bootstrap.md | | task | ASSEMBLY-WP-0001-T03 | done | — | workplans/ASSEMBLY-WP-0001-statehub-bootstrap.md | @@ -47,7 +47,7 @@ | task | ASSEMBLY-WP-0005-T04 | done | — | workplans/ASSEMBLY-WP-0005-gadm-0.3.md | | task | ASSEMBLY-WP-0005-T05 | done | — | workplans/ASSEMBLY-WP-0005-gadm-0.3.md | | task | ASSEMBLY-WP-0005-T06 | done | — | workplans/ASSEMBLY-WP-0005-gadm-0.3.md | -| task | ASSEMBLY-WP-0006-T01 | todo | — | workplans/ASSEMBLY-WP-0006-gadm-0.4.md | +| task | ASSEMBLY-WP-0006-T01 | done | — | workplans/ASSEMBLY-WP-0006-gadm-0.4.md | | task | ASSEMBLY-WP-0006-T02 | todo | — | workplans/ASSEMBLY-WP-0006-gadm-0.4.md | | task | ASSEMBLY-WP-0006-T03 | todo | — | workplans/ASSEMBLY-WP-0006-gadm-0.4.md | | task | ASSEMBLY-WP-0006-T04 | todo | — | workplans/ASSEMBLY-WP-0006-gadm-0.4.md | diff --git a/models/GADM-0.4.md b/models/GADM-0.4.md index e2f7fef..6d3c9e1 100644 --- a/models/GADM-0.4.md +++ b/models/GADM-0.4.md @@ -7,7 +7,8 @@ the code is the reference if the two ever disagree. # Generative Assembly Dynamics Model — GADM-0.4 **Status:** in development, exploratory. Implemented so far: durable human -capability (§ 1, ASSEMBLY-WP-0006-T01). +capability (§ 1, ASSEMBLY-WP-0006-T01), grounded organism depreciation and +robustness checks (§ 2, T02). GADM-0.4 builds on the GADM-0.3 cohort model (`GADM-0.3.md` § 5), which stays unchanged and reproducible in `gadm03c.py`. Time unit: one year. @@ -49,6 +50,9 @@ identical to GADM-0.3 (unit-tested). ### 1.3 Results +Computed at T01, before `dO` was grounded (§ 2). The grounded values differ +by at most 0.004. + | | GADM-0.3 cohorts | GADM-0.4 | |---|---|---| | Baseline VFAC (t = 100) | 0.323 | 0.323 | @@ -83,9 +87,29 @@ Full tables: `simulations/gadm02/results/life_cycle_gadm04.md`. - `hform` was chosen so that baseline children's durable capability settles near 0.6. It has no empirical anchor yet (see T02). +--- + +## 2. Parameter grounding (T02) + +Details and sources: `ParameterGrounding.md`. + +- **Organism depreciation is grounded:** `dO` = 0.20 per year (evidence range + 0.15–0.35, from software, R&D-capital and AI-hardware depreciation), instead + of 0.06. Investment, learning and seeding are rescaled (×3.33) so the + baseline organism path is unchanged. The evidence changes the timescale; + the level of organism capability remains ungrounded. +- **The key readings are robust** to the grounded `dO` and to brackets on the + ungrounded channel self-reinforcement (0.15–0.45) and wealth conversion + (0.02–0.20). One exception: P3's effect size grows to −0.078 at strong + self-reinforcement. +- With grounded `dO`: baseline VFAC 0.325, generative regime 0.665. The life-cycle results + are essentially unchanged: L3 half-time 17 years, final ΔH working age +0.032; + L1 ΔH −0.028 (ageing, strong mentoring) against −0.038 (stable, none). + ## Reproduce ```bash python3 -B -m unittest discover -s simulations/gadm02 cd simulations/gadm02 && python3 -B life_cycle.py --model gadm04 +cd simulations/gadm02 && python3 -B robustness.py # T02 robustness checks ``` diff --git a/models/ParameterGrounding.md b/models/ParameterGrounding.md new file mode 100644 index 0000000..2e73a2e --- /dev/null +++ b/models/ParameterGrounding.md @@ -0,0 +1,76 @@ + + +# Parameter Grounding Register + +**Status:** v0.1. Most GADM parameters are still assumptions. This register +says which ones have evidence behind them, which are bracketed by +sensitivity analysis only, and which are open. + +Status codes: **G** grounded in external evidence · **B** bracketed: not +grounded, but key readings checked across a range · **A** assumed, not yet +checked · **C** calibration choice (set to reproduce a target behaviour). + +| Parameter | Meaning | Value | Status | Basis | +|---|---|---|---|---| +| time unit | one period | 1 year | C | WP-0005-T01; implied timescales checked in `GADM-0.2.md` § 3.4 | +| `dO` | depreciation of organism capability | 0.20 (range 0.15–0.35) per year; GADM-0.2/0.3: 0.06 | **G** | Software depreciates geometrically over roughly 3–10 years (CBO-based summary); business R&D capital depreciation is generally above the traditional 15 % (Li & Hall 2020, *Review of Income and Wealth* 66(1)); economic life of AI GPUs is about 2–6 years. Organism capability combines all three. | +| `aO`, `ell`, `oseed` | organism investment, learning with use, seeding | 0.50, 0.83, 0.033 (×3.33) | C | Rescaled with `dO` so the baseline organism path stays as before (0.46 at t = 25, 0.37 at t = 100). The **level** of organism capability is therefore still ungrounded. | +| `aext` | attention extraction | 0.275; GADM-0.2: 0.12 | **G** (order of magnitude) | ATUS 2023: 5.2 h/day leisure, 2.7 h TV; social media about 2 h 20 min/day. Engagement media take about half of discretionary time (`GADM-0.3.md` § 4.1). | +| `r_k` | channel self-reinforcement | 0.3 (0.4 discovery) | **B** | Not grounded. Readings checked for 0.15–0.45 (`results/robustness.md`). | +| `k_w` | wealth → control conversion | 0.04 | **B** | Not grounded. Readings checked for 0.02–0.20. | +| `birth`, ageing and death rates | demography | 1/45; 1/20, 1/45, 1/15; 1/8 | C | Gives a stationary structure of about 23 / 51 / 17 / 9 % at replacement fertility, plausible for an aged high-income society. | +| `hform` | durable capability formation | 0.15 | C | Chosen so children's durable capability settles near 0.6. | +| `v0`, `aK`, `n1` | experimentation, capacity build, entry | 2.5, 0.35, 0.30 | C | Keep the GADM-0.2 baseline from collapsing (`GADM-0.2.md` § 3.4). | +| all other rates | — | see code | A | First guesses in the 0.03–0.3 per-year range. | + +## Robustness of key readings (T02) + +`simulations/gadm02/results/robustness.md`, GADM-0.4 with cohorts and +durable capability. Channel counters are recalibrated for every variant. + +| Reading | dO 0.06 → 0.20 | r 0.15 / 0.45 | k_w 0.02 / 0.20 | +|---|---|---|---| +| Generative regime best, automated capitalism worst | holds | holds | holds | +| Scenario ranking (Spearman ρ vs. grounded) | 1.00 | 0.98 / 1.00 | 1.00 / 1.00 | +| Generative regime has the lowest domination | holds | holds | holds | +| Organism lever order lineage > membrane > attention | holds | holds | holds | +| P3: full wealth tax lowers P by < 0.06 where membrane/lineage dominate | holds (−0.055) | holds (−0.035) / **fails (−0.078)** | holds | + +Readings: + +1. **Grounding `dO` changes almost nothing**, because the organism level was + held fixed by rescaling. The GADM-0.2 Sobol result ("dO explains a third of + baseline variance") really measures sensitivity to the **level** of + organism capability, which `dO` sets together with investment and learning. + That level is the next thing to ground, for example from AI-capital or + task-automation shares. +2. **The structural readings are robust** across the brackets for the two + ungrounded power parameters. +3. **P3 is robust in direction, but its size depends on r.** With strong + self-reinforcement, market and political channels sit closer to their + tipping points, so a wealth tax tips them down and becomes more effective + (ΔP −0.078). Even then, total domination stays dominated by membrane and + lineage control. + +## Open grounding needs + +1. The level of organism capability K_Ω (AI capital share, task-automation + share). +2. The channel self-reinforcement r_k (persistence of market leadership, + platform tipping evidence). +3. The wealth → influence conversion k_w (political-economy evidence on + lobbying and influence). +4. Durable capability formation `hform` and the ½ / ½ durable/current split + (human-capital literature on the persistence of early education). + +## Sources + +- Li, W. C. Y. & Hall, B. H. (2020). Depreciation of Business R&D Capital. *Review of Income and Wealth* 66(1): 161–180. https://www.bea.gov/research/papers/2016/depreciation-business-rd-capital +- BEA, Estimation of Software in the US National Accounts. https://www.bea.gov/sites/default/files/2018-05/Estimation-of-Software-in-the-US-National-Accounts.pdf +- Software depreciation schedule (CBO-based summary). https://www.route-fifty.com/digital-government/2002/05/by-the-numbers/286193/ +- AI GPU economic life: https://siliconangle.com/2025/11/22/resetting-gpu-depreciation-ai-factories-bend-dont-break-useful-life-assumptions/ ; https://drops.mts.now/ai-capex/wiki/economics/gpu-depreciation/ +- BLS American Time Use Survey. https://www.bls.gov/news.release/PDF/atus.pdf diff --git a/models/README.md b/models/README.md index 36e4d28..c994016 100644 --- a/models/README.md +++ b/models/README.md @@ -12,7 +12,8 @@ exploratory: they generate hypotheses and are not established results. | [GADM-CLD.md](GADM-CLD.md) | v0.1 | causal-loop diagram, loops, signed link table (ASSEMBLY-WP-0004-T01/T02) | | [GADM-0.2.md](GADM-0.2.md) | GADM-0.2 | extensions decision, equations, scenario and sensitivity findings (ASSEMBLY-WP-0004) | | [GADM-0.3.md](GADM-0.3.md) | GADM-0.3 | power channels (P1/P2) wealth separated from power (P3), attention recalibration, organism grid, life-cycle cohorts (ASSEMBLY-WP-0005) | -| [GADM-0.4.md](GADM-0.4.md) | in development | durable human capability (ASSEMBLY-WP-0006-T01) | +| [GADM-0.4.md](GADM-0.4.md) | in development | durable human capability, grounded organism depreciation (ASSEMBLY-WP-0006) | +| [ParameterGrounding.md](ParameterGrounding.md) | v0.1 | which parameters are grounded, bracketed, assumed or calibrated | | [GADM-0.3-Candidates.md](GADM-0.3-Candidates.md) | outline | life-cycle and power extensions, deferred items (ASSEMBLY-WP-0004-T08) | ## Conventions diff --git a/simulations/README.md b/simulations/README.md index f741cb3..3ce8e32 100644 --- a/simulations/README.md +++ b/simulations/README.md @@ -8,7 +8,7 @@ model version it implements. | `gadm02/` | GADM-0.2 (`models/GADM-0.2.md`) | `run_scenarios.py`, `sensitivity.py`, `gsa.py`, `test_gadm02.py` | | `gadm02/gadm03.py` | GADM-0.3: power channels, wealth, attention (`models/GADM-0.3.md`) | `power_channels.py`, `wealth.py`, `organism_grid.py`, `test_gadm03.py` | | `gadm02/gadm03c.py` | GADM-0.3 with life-cycle cohorts (`models/GADM-0.3.md` § 5) | `life_cycle.py`, `test_gadm03c.py` | -| `gadm02/gadm04.py` | GADM-0.4 (in development): durable capability (`models/GADM-0.4.md`) | `life_cycle.py --model gadm04`, `test_gadm04.py` | +| `gadm02/gadm04.py` | GADM-0.4 (in development): durable capability (`models/GADM-0.4.md`) | `life_cycle.py --model gadm04`, `robustness.py`, `test_gadm04.py` | Python 3.10+, standard library only. Use `python3 -B` after quick edits: a stale bytecode cache can mask same-size changes made within the same second. diff --git a/simulations/gadm02/gadm04.py b/simulations/gadm02/gadm04.py index 33f552d..cb13bbb 100644 --- a/simulations/gadm02/gadm04.py +++ b/simulations/gadm02/gadm04.py @@ -44,6 +44,11 @@ PARAMS.update({ "dDd": 0.04, # very old "ll": 0.005, # lifelong durable formation for working-age adults "lbl": 1.0, # strength of "learning begets learning" (0 = off) + # T02 grounding: organism capability depreciates like software / R&D / AI + # hardware (geometric 0.15-0.35 per year), not 0.06. Investment, learning and + # seeding are rescaled by 3.33 so the baseline organism path stays as before + # (K_Omega ~0.46 at t=25, ~0.37 at t=100): evidence changes the timescale. + "dO": 0.20, "aO": 0.50, "ell": 0.83, "oseed": 0.033, }) diff --git a/simulations/gadm02/results/life_cycle_gadm04.md b/simulations/gadm02/results/life_cycle_gadm04.md index b4b53ca..7445b32 100644 --- a/simulations/gadm02/results/life_cycle_gadm04.md +++ b/simulations/gadm02/results/life_cycle_gadm04.md @@ -7,12 +7,12 @@ t = 100 years. Ageing demography: births at 75 % of replacement. | Demography | T_g (tg) | seniors + very old (share, t=100) | H (t=0) | H (t=100) | ΔH | |---|---|---|---|---|---| -| stable | 0.00 | 0.26 | 0.502 | 0.463 | -0.039 | -| stable | 0.05 | 0.26 | 0.502 | 0.469 | -0.034 | -| stable | 0.15 | 0.26 | 0.502 | 0.479 | -0.023 | -| ageing | 0.00 | 0.29 | 0.502 | 0.456 | -0.047 | -| ageing | 0.05 | 0.29 | 0.502 | 0.462 | -0.041 | -| ageing | 0.15 | 0.29 | 0.502 | 0.473 | -0.029 | +| stable | 0.00 | 0.26 | 0.502 | 0.464 | -0.038 | +| stable | 0.05 | 0.26 | 0.502 | 0.470 | -0.033 | +| stable | 0.15 | 0.26 | 0.502 | 0.480 | -0.022 | +| ageing | 0.00 | 0.29 | 0.502 | 0.457 | -0.046 | +| ageing | 0.05 | 0.29 | 0.502 | 0.463 | -0.040 | +| ageing | 0.15 | 0.29 | 0.502 | 0.474 | -0.028 | ## L2: care load and attention @@ -21,14 +21,14 @@ initial cohort attention is not at its own equilibrium). | Demography | care_sen (seniors' care share) | cp | A working age | A seniors | care load per working-age person | per senior | |---|---|---|---|---|---|---| -| stable | 0.1 | 0.00 | 0.399 | 0.438 | 0.0432 | 0.0144 | -| stable | 0.1 | 0.15 | 0.441 | 0.465 | 0.0238 | 0.0079 | -| stable | 0.3 | 0.00 | 0.417 | 0.395 | 0.0336 | 0.0432 | -| stable | 0.3 | 0.15 | 0.452 | 0.439 | 0.0185 | 0.0238 | -| ageing | 0.1 | 0.00 | 0.402 | 0.443 | 0.0407 | 0.0128 | -| ageing | 0.1 | 0.15 | 0.443 | 0.467 | 0.0224 | 0.0070 | -| ageing | 0.3 | 0.00 | 0.420 | 0.403 | 0.0317 | 0.0383 | -| ageing | 0.3 | 0.15 | 0.454 | 0.444 | 0.0174 | 0.0210 | +| stable | 0.1 | 0.00 | 0.402 | 0.442 | 0.0432 | 0.0144 | +| stable | 0.1 | 0.15 | 0.444 | 0.469 | 0.0238 | 0.0079 | +| stable | 0.3 | 0.00 | 0.420 | 0.398 | 0.0336 | 0.0432 | +| stable | 0.3 | 0.15 | 0.456 | 0.442 | 0.0185 | 0.0238 | +| ageing | 0.1 | 0.00 | 0.405 | 0.447 | 0.0407 | 0.0128 | +| ageing | 0.1 | 0.15 | 0.446 | 0.472 | 0.0224 | 0.0070 | +| ageing | 0.3 | 0.00 | 0.423 | 0.406 | 0.0317 | 0.0383 | +| ageing | 0.3 | 0.15 | 0.458 | 0.448 | 0.0174 | 0.0210 | ## L3: lag from education to working-age capability @@ -37,15 +37,15 @@ Run difference: education intensity 1.5 vs. 1.0, everything else equal. | t | ΔH children | ΔH working age | ΔH aggregate | |---|---|---|---| | 0 | +0.000 | +0.000 | +0.000 | -| 5 | +0.071 | +0.004 | +0.018 | +| 5 | +0.070 | +0.004 | +0.018 | | 10 | +0.085 | +0.010 | +0.025 | -| 15 | +0.084 | +0.015 | +0.027 | -| 20 | +0.081 | +0.018 | +0.029 | -| 25 | +0.080 | +0.020 | +0.030 | -| 30 | +0.079 | +0.022 | +0.032 | -| 40 | +0.079 | +0.025 | +0.034 | -| 50 | +0.079 | +0.027 | +0.036 | -| 75 | +0.080 | +0.030 | +0.039 | +| 15 | +0.085 | +0.015 | +0.028 | +| 20 | +0.083 | +0.018 | +0.029 | +| 25 | +0.081 | +0.021 | +0.031 | +| 30 | +0.080 | +0.023 | +0.032 | +| 40 | +0.080 | +0.026 | +0.034 | +| 50 | +0.080 | +0.028 | +0.036 | +| 75 | +0.080 | +0.031 | +0.039 | | 100 | +0.081 | +0.032 | +0.040 | Half of the final effect is reached after 3 years for children and 17 years for working-age capability. diff --git a/simulations/gadm02/results/robustness.md b/simulations/gadm02/results/robustness.md new file mode 100644 index 0000000..5d10579 --- /dev/null +++ b/simulations/gadm02/results/robustness.md @@ -0,0 +1,16 @@ +# GADM-0.4-dev: robustness of key readings + +Generated by `simulations/gadm02/robustness.py`. t = 100 years. +Readings checked: (1) scenario VFAC ranking (Spearman ρ against the grounded +variant), (2) generative regime lowest P, (3) organism lever order on the +baseline background, (4) P3: full wealth tax lowers P by < 0.06 in the +membrane/lineage-dominated case. + +| Variant | best scenario | worst scenario | ρ ranking | generative P | lineage / membrane / attention effect | lever order holds | P3 ΔP | P3 holds | +|---|---|---|---|---|---|---|---|---| +| old dO = 0.06 | Generative regime (0.660) | Automated capitalism (0.264) | 1.00 | 0.11 (lowest) | +0.127 / +0.086 / +0.031 | yes | -0.055 | yes | +| grounded dO = 0.20 | Generative regime (0.665) | Automated capitalism (0.263) | 1.00 | 0.10 (lowest) | +0.123 / +0.084 / +0.032 | yes | -0.055 | yes | +| grounded, r = 0.15 | Generative regime (0.653) | Automated capitalism (0.284) | 0.98 | 0.15 (lowest) | +0.115 / +0.063 / +0.032 | yes | -0.035 | yes | +| grounded, r = 0.45 | Generative regime (0.671) | Automated capitalism (0.255) | 1.00 | 0.08 (lowest) | +0.126 / +0.094 / +0.033 | yes | -0.078 | no | +| grounded, k_w = 0.02 | Generative regime (0.665) | Automated capitalism (0.261) | 1.00 | 0.10 (lowest) | +0.120 / +0.082 / +0.032 | yes | -0.038 | yes | +| grounded, k_w = 0.20 | Generative regime (0.663) | Automated capitalism (0.273) | 1.00 | 0.11 (lowest) | +0.126 / +0.082 / +0.032 | yes | -0.046 | yes | diff --git a/simulations/gadm02/robustness.py b/simulations/gadm02/robustness.py new file mode 100644 index 0000000..ae68e0d --- /dev/null +++ b/simulations/gadm02/robustness.py @@ -0,0 +1,91 @@ +"""Robustness of key GADM readings to grounded and bracketed parameters (T02). + +Variants: GADM-0.4 with the old organism depreciation (dO = 0.06), with the +grounded value (dO = 0.20, rescaled), and the grounded value with brackets on +the ungrounded channel self-reinforcement r and wealth conversion k_w. Channel +counters are recalibrated for every variant so each starts in equilibrium. + +Usage: python3 -B simulations/gadm02/robustness.py +""" + +from __future__ import annotations + +import itertools +import sys +from pathlib import Path + +sys.dont_write_bytecode = True + +import gadm03 as g3 # noqa: E402 +import gadm04 as g # noqa: E402 +from scenarios import load_all # noqa: E402 + +OUT = Path(__file__).resolve().parent / "results" +R_KEYS = ("r_m", "r_i", "r_mem", "r_lin", "r_pol") +OLD_DO = {"dO": 0.06, "aO": 0.15, "ell": 0.25, "oseed": 0.01} + + +def variant(extra: dict) -> dict: + return {**extra, **g3.calibrate(extra)} + + +VARIANTS = [ + ("old dO = 0.06", variant(OLD_DO)), + ("grounded dO = 0.20", variant({})), + ("grounded, r = 0.15", variant({**{k: 0.15 for k in R_KEYS}, "r_d": 0.2})), + ("grounded, r = 0.45", variant({**{k: 0.45 for k in R_KEYS}, "r_d": 0.6})), + ("grounded, k_w = 0.02", variant({"k_w": 0.02})), + ("grounded, k_w = 0.20", variant({"k_w": 0.20})), +] +GRID = {"lineage": ({"L": 0.1, "lin_open": 0.1}, {"L": 0.8, "lin_open": 0.8}), + "membrane": ({"m": 0.2}, {"m": 0.8}), + "attention": ({"x_att": 0.9}, {"x_att": 0.2})} + + +def main() -> None: + OUT.mkdir(exist_ok=True) + scs = load_all() + names = list(scs) + ref_rank = None + lines = [f"# {g.MODEL_VERSION}: robustness of key readings", "", + "Generated by `simulations/gadm02/robustness.py`. t = 100 years.", + "Readings checked: (1) scenario VFAC ranking (Spearman ρ against the grounded", + "variant), (2) generative regime lowest P, (3) organism lever order on the", + "baseline background, (4) P3: full wealth tax lowers P by < 0.06 in the", + "membrane/lineage-dominated case.", "", + "| Variant | best scenario | worst scenario | ρ ranking | generative P | lineage / membrane / attention effect | lever order holds | P3 ΔP | P3 holds |", + "|---|---|---|---|---|---|---|---|---|"] + rows = [] + for label, prm in VARIANTS: + res = {n: g.simulate({**scs[n]["params"], **prm}, scs[n]["init"])[-1] for n in names} + order = sorted(names, key=lambda n: -res[n]["VFAC"]) + rank = {n: i for i, n in enumerate(order)} + rows.append((label, prm, res, order, rank)) + ref_rank = rows[1][4] + k = len(names) + for label, prm, res, order, rank in rows: + rho = 1 - 6 * sum((rank[n] - ref_rank[n]) ** 2 for n in names) / (k * (k * k - 1)) + gen_lowest = min(names, key=lambda n: res[n]["P"]) == "generative_regime" + base = scs["baseline"] + out = {} + for lv in itertools.product((0, 1), repeat=3): + p = {**base["params"], **prm} + for ax, l in zip(GRID, lv): + p.update(GRID[ax][l]) + out[lv] = g.simulate(p, base["init"])[-1]["VFAC"] + eff = [sum((1 if lv[i] else -1) * v for lv, v in out.items()) / 4 for i in range(3)] + order_ok = eff[0] > eff[1] > eff[2] > 0 + mem = scs["generative_concentrated_lineages"] + p0 = g.simulate({**mem["params"], **prm, "wtax": 0.0}, mem["init"])[-1]["P"] + p1 = g.simulate({**mem["params"], **prm, "wtax": 1.0}, mem["init"])[-1]["P"] + lines.append(f"| {label} | {scs[order[0]]['title']} ({res[order[0]]['VFAC']:.3f}) | " + f"{scs[order[-1]]['title']} ({res[order[-1]]['VFAC']:.3f}) | {rho:.2f} | " + f"{res['generative_regime']['P']:.2f}{' (lowest)' if gen_lowest else ''} | " + f"{eff[0]:+.3f} / {eff[1]:+.3f} / {eff[2]:+.3f} | {'yes' if order_ok else 'no'} | " + f"{p1 - p0:+.3f} | {'yes' if p0 - p1 < 0.06 else 'no'} |") + (OUT / "robustness.md").write_text("\n".join(lines) + "\n") + print("\n".join(lines)) + + +if __name__ == "__main__": + main() diff --git a/workplans/ASSEMBLY-WP-0006-gadm-0.4.md b/workplans/ASSEMBLY-WP-0006-gadm-0.4.md index d1a185d..56269d8 100644 --- a/workplans/ASSEMBLY-WP-0006-gadm-0.4.md +++ b/workplans/ASSEMBLY-WP-0006-gadm-0.4.md @@ -38,7 +38,7 @@ education-formed component next to the current one, then re-test L3. ```task id: ASSEMBLY-WP-0006-T02 -status: todo +status: done priority: high state_hub_task_id: "d4603db8-b302-5f86-ac75-649f82b6a43e" ```