feat: model core, launcher, reproduction check and the first two skills
The core in modell/kjerne/ is an unmodified copy of sim.py, diagnose.py and forlop.py from den-dynamiske-rettsstaten @2badc25, pinned by sha256. kjor.py is the single entry point; kontroll.py reproduces the note's 22 data files and printed results. Skills: diagnose and forlop (Norwegian). Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
This commit is contained in:
commit
464ad38b49
51 changed files with 11207 additions and 0 deletions
269
docs/modellkart.md
Normal file
269
docs/modellkart.md
Normal file
|
|
@ -0,0 +1,269 @@
|
|||
# Modellkart
|
||||
|
||||
Kartet beskriver modellen i notatet *Den dynamiske rettsstaten* slik koden i `modell/kjerne/` regner den, ved
|
||||
**commit 2badc25** i notatets repo (`2badc25e5134ee26309bd8c3bd008ac64afe55a4`). Filene i `modell/kjerne/` er
|
||||
byte-like kopier av `paper/sim.py`, `paper/diagnose.py` og `paper/forlop.py` ved den commiten, så linjenumrene i
|
||||
notatets vedlegg C gjelder `modell/kjerne/sim.py` direkte. Verdiene under er lest fra koden. Ligningsnumre, tabeller og
|
||||
avsnitt er notatets.
|
||||
|
||||
Kartet er for den som vil endre modellen: hva tilstanden er, hvor parameterne står, hvilke ligninger koden regner, og
|
||||
hvilke kontroller som skal holde etter en endring.
|
||||
|
||||
## (a) Tilstandsvariabler og avledede størrelser
|
||||
|
||||
Tidsenhet: måned. Nivåene er normalisert slik at referanselikevekten har K = 1, T = 1 og Λ = 0,80.
|
||||
|
||||
| I koden | Symbol | Betyr | Merknad |
|
||||
|---|---|---|---|
|
||||
| `t` | t | tid i måneder | Euler-steg `DT` = 0,05 |
|
||||
| `K` | K_obj | vektet objektiv kriminalitetsbelastning | 1 i referansen; i `simulate_chain2` er K = K_A + K_B |
|
||||
| `KA`, `KB` | K_A, K_B | belastning fra alvorlige (A) og øvrige (B) saker | bare `simulate_chain2`; startverdier 0,4 og 0,6 |
|
||||
| `U` | U | opplevd trygghet | start 0,80 |
|
||||
| `L` | Λ | tillit | start 0,80; holdes innenfor [10⁻⁴, 1 − 10⁻⁴] etter hvert steg |
|
||||
| `T` | T | innsats (politiets) | proporsjonal regel T = T₀ + k_p (K(t − τ) − K*), begrenset til [0, T_max]; eller MPC |
|
||||
| `Q` | Q_D | kø i domstolen (modellens ledd med kø) | normaliserte enheter; aldri negativ |
|
||||
| `QA`, `QB` | Q_A, Q_B | kø per sakstype | bare `simulate_chain2` |
|
||||
| `tauD` | τ_D | saksbehandlingstid = m_D + Q_D / Z_D | `tauA`, `tauB` per sakstype |
|
||||
| `JD` | J_D | innstrømning til domstolen = ξ_D F | lign. (27) |
|
||||
| `RD` | R_D | avgjorte saker = Z_D Q_D / (Q_D + m_D Z_D) | lign. (28) |
|
||||
| `Fa`, `F` | F | fjerningsstrøm = `removal(K, L, T)` | lign. (12) og (12′) |
|
||||
| `Z` | Z_D | kapasitet i domstolen | `ZD0` = 0,10 / 0,95 før sjokket; endogen i `simulate_endo` |
|
||||
| `xi` | ξ_D | andel saker til domstolen (1 − andel ledet utenom) | ≥ `xi_min` = 0,8 i reglene |
|
||||
| `q` | q | prosessuell kvalitet | bare kvalitetssløyfen i `simulate_endo` |
|
||||
| `g` | g | virkning av lang saksbehandlingstid = D / (D + τ_h), D = max(0, τ_D − τ_D^ref) | lign. (30) |
|
||||
| `Omega(t, p)` | Ω | strukturelt pådrag | Ω₀, ganget med `shock` fra `t_shock` |
|
||||
| `tau_ref` | τ_D^ref | saksbehandlingstid i utgangslikevekten | 3 måneder |
|
||||
| `tau` | τ | forsinkelse i politiets sløyfe | argument; et helt antall tidssteg |
|
||||
| `kp` | k_p | reaktivitet i den proporsjonale regelen | argument, standard 3,0 |
|
||||
|
||||
Ligningene slik koden regner dem (`deriv`, `deriv_chain`, `deriv_chain_xz`, `court`):
|
||||
|
||||
- K′ = Ω (1 + χ_D g) − (1 − ξ_D ϑ) F − ϑ R_D − δ K. Uten kjede (`deriv`): K′ = Ω − F − δ K.
|
||||
- F = γ′ Λ^η T K / (1 + K / K_sat), γ′ = γ (1 + 1 / K_sat). Med K_sat = ∞ er F = γ Λ^η T K.
|
||||
- U′ = κ_U (U_eq − U), U_eq = U₀ − ψ (K − 1), begrenset til [0, 1].
|
||||
- Λ′ = κ_Λ (Λ₀ + μ₁ (U − U₀) + μ₃ q − μ₄ g − Λ) − μ₂ Λ · max(0, T − T_prop K)², T_prop = 1,6.
|
||||
- Q_D′ = J_D − R_D − ς_D Q_D.
|
||||
|
||||
## (b) Parameterne
|
||||
|
||||
### `P`: grunnmodellen (`sim.py`, l. 27–40; tabell 3)
|
||||
|
||||
| Navn | Verdi | Enhet | Betyr | I notatet |
|
||||
|---|---|---|---|---|
|
||||
| `gamma` | 0,125 | per mnd | effektivitet per enhet tiltak; gir γΛT = 0,10 i likevekt | γ; lign. (12), avsnitt 4.3 |
|
||||
| `eta` | 1,0 | – | tillitselastisitet | η; lign. (12) |
|
||||
| `delta` | 0,02 | per mnd | naturlig avgang | δ; lign. (12) |
|
||||
| `Omega0` | 0,12 | per mnd | strukturelt pådrag ved referansen (gir K = 1 ved T = 1, Λ = 0,8) | Ω₀; lign. (6), avsnitt 3 |
|
||||
| `shock` | 1,30 | faktor | varig økning i Ω (0,12 → 0,156) | avsnitt 8.1 |
|
||||
| `t_shock` | 12,0 | mnd | når økningen begynner | avsnitt 8.1 |
|
||||
| `T0` | 1,0 | – | grunninnsats | T₀; lign. (11), avsnitt 4.2 |
|
||||
| `Tmax` | 3,0 | – | kapasitetstak for innsatsen | T^max; lign. (11), (23) |
|
||||
| `Kstar` | 1,0 | – | målnivå for K | K*; lign. (11) |
|
||||
| `kU` | 0,25 | per mnd | trygghetens tilpasningsrate | κ_U; lign. (20), avsnitt 6.1 |
|
||||
| `U0` | 0,80 | – | trygghet i referansen | U₀; lign. (20) |
|
||||
| `psiU` | 0,30 | – | hvor mye trygghet faller per enhet K over 1 | ψ; lign. (20) |
|
||||
| `kL` | 0,10 | per mnd | tillitens tilpasningsrate | κ_Λ; lign. (21), avsnitt 6.1 |
|
||||
| `mu1` | 0,50 | – | tillitens følsomhet for trygghet | μ₁; lign. (21) |
|
||||
| `mu2` | 0,30 | – | tillitstap ved uforholdsmessig innsats | μ₂; lign. (21) |
|
||||
| `Tprop` | 1,6 | – | grense for forholdsmessig innsats, T_prop(K) = 1,6 K | T_prop; lign. (21) |
|
||||
| `Lam0` | 0,80 | – | tillit i referansen | Λ₀; lign. (21) |
|
||||
| `ksat` | ∞ | – | politiets halvmetningsnivå (Holling type II); 3 og 1,5 i robusthetsanalysen | K_sat; lign. (12′), avsnitt 8.3, tabell 5 |
|
||||
|
||||
Andre konstanter i `sim.py`:
|
||||
|
||||
| Navn | Verdi | Betyr |
|
||||
|---|---|---|
|
||||
| `DT` | 0,05 mnd | tidssteg (eksplisitt Euler) |
|
||||
| `TEND` | 120,0 mnd | horisont for `simulate`, `simulate_chain`, `simulate_chain2`, `simulate_soc`; standard for `simulate_endo` |
|
||||
| `UPS0` | 0,95 | domstolens utnyttelse før sjokket |
|
||||
| `TAU_REF` | 3,0 mnd | saksbehandlingstid i utgangslikevekten |
|
||||
| `ZD0` | 0,10 / 0,95 ≈ 0,105 | domstolens kapasitet før sjokket |
|
||||
| `VARSIGMA` | 0,01 per mnd | frafall fra køen (henleggelse, foreldelse) |
|
||||
| `J0` | 0,10 | fjerningsstrømmen i referansen, γ Λ₀ T₀ |
|
||||
| `MD` | ≈ 0,233 mnd | ren behandlingstid m_D, kalibrert i lukket form slik at τ_D = 3 i utgangslikevekten (l. 155) |
|
||||
|
||||
MPC (`mpc_step`, `mpc_step_chain`; lign. (24), avsnitt 6.3 og 8.1): horisont `H` = 24 mnd, vekt på innsatsavvik
|
||||
`lamT` = 0,05, vekt på tillitsbrudd `lamL` = 20, myk tillitsgrense Λ₀ − 0,05 = 0,75. Beslutningen tas hver måned.
|
||||
|
||||
### `CH0`: domstolen som ledd med kø (l. 157–158; tabell 3, avsnitt 7.3 og 8.2)
|
||||
|
||||
| Navn | Verdi | Betyr | I notatet |
|
||||
|---|---|---|---|
|
||||
| `Z` | `ZD0` ≈ 0,105 | kapasitet | Z_D; lign. (28) |
|
||||
| `m` | `MD` ≈ 0,233 mnd | ren behandlingstid | m_D; lign. (28) |
|
||||
| `theta` | 0,5 | andel av virkningen som krever dom | ϑ; lign. (29) |
|
||||
| `chi` | 0,15 | største økning i Ω av lang saksbehandlingstid (celerity) | χ_D; lign. (30), tabell 4 |
|
||||
| `mu4` | 0,12 | største tillitstap av lang saksbehandlingstid | μ₄; lign. (30) |
|
||||
| `tauh` | 9,0 mnd | halvmetningstid for g | τ_h; lign. (30) |
|
||||
| `varsigma` | 0,01 per mnd | frafall fra køen | ς_D; lign. (28) |
|
||||
| `xi` | 1,0 | andel saker til domstolen | ξ_D; lign. (27) |
|
||||
| `Zfun`, `xifun` | `None` | tidsplan for kapasitet og andel (funksjoner av t) | scenario 3–5, avsnitt 8.2 |
|
||||
| `dbr` | `None` | trommel–buffer–tau: innsatsen begrenses slik at J_D ≤ `dbr` · Z_D (0,95 i scenario 6 og 7) | lign. (32) |
|
||||
|
||||
### `CH2`: domstol med to sakstyper (l. 352–354; avsnitt 8.3, tabell 6)
|
||||
|
||||
| Navn | Verdi | Betyr |
|
||||
|---|---|---|
|
||||
| `Z`, `m`, `chi`, `mu4`, `tauh`, `varsigma` | som `CH0` | |
|
||||
| `c` | 1 | antall parallelle spor (10 i robusthetsanalysen, med `m` kalibrert av `calibrate_m`) |
|
||||
| `prio` | `True` | A-saker har forrang; `False` gir felles kø (FIFO) |
|
||||
| `piA` | 0,4 | alvorlige sakers andel av K |
|
||||
| `thetaA`, `thetaB` | 0,8, 0,3 | andel av virkningen som krever dom, per sakstype (vektet 0,5) |
|
||||
| `xiA`, `xiB` | 1,0, 1,0 | andel saker til domstolen, per sakstype |
|
||||
| `Zfun`, `xiBfun` | `None` | tidsplaner |
|
||||
| `dbr` | ikke satt | leses med `ch2.get("dbr")`; trommel–buffer–tau via T |
|
||||
|
||||
Lign. (33). `c` = 1 gir R = Z Q / (Q + m Z) eksakt; `c` > 1 bruker Erlang C (`erlang_L`, `rho_of_L`).
|
||||
|
||||
### `SOC`: rekruttering og vippepunkt (l. 439; avsnitt 8.4, figur 8)
|
||||
|
||||
| Navn | Verdi | Betyr |
|
||||
|---|---|---|
|
||||
| `eps` | 0,30 | styrken i rekrutteringsleddet ε |
|
||||
| `Kh` | 2,0 | halvmetningsnivå K_h |
|
||||
| `pexp` | 4 | bratthet ϱ |
|
||||
|
||||
Lign. (34): Ω_soc = ε K^ϱ / (K_h^ϱ + K^ϱ). `simulate_soc` rekalibrerer Ω₀ slik at K = 1 fortsatt er likevekt, og har et
|
||||
forbigående sjokk: faktor `shock` = 1,6 i månedene `t_on` = 12 til `t_off` = 36.
|
||||
|
||||
### `ENDO`: beslutningsreglene (l. 515–530; tabell 3, avsnitt 8.5)
|
||||
|
||||
| Navn | Verdi | Betyr | I notatet |
|
||||
|---|---|---|---|
|
||||
| `lagD` | 3,0 mnd | observasjonsforsinkelse for kjedestatistikk | τ_D^obs |
|
||||
| `xi_min` | 0,8 | gulv: høyst 20 % av sakene til forenklede reaksjoner | ξ_min; lign. (35), (37) |
|
||||
| `tau_thr` | 6,0 mnd | terskel for observert saksbehandlingstid (desentral regel) | τ_D^gr; lign. (35) |
|
||||
| `k_xi` | 0,2 / 12 per mnd | forsterkning for påtalepraksis (0,2 per år) | k_ξ; lign. (35) |
|
||||
| `tau_xi` | 6,0 mnd | tidskonstant for endring av påtalepraksis | τ_ξ |
|
||||
| `ups_star` | 0,95 | målutnyttelse ved dimensjonering | υ*; lign. (36), (37) |
|
||||
| `ups_hi`, `ups_lo` | 1,0, 0,85 | dødsone: bestill over 1, bygg ned under 0,85 | tabell 3 |
|
||||
| `kZ` | 1,0 | budsjettforsterkning (1 = hele gapet bestilles) | k_Z; lign. (36) |
|
||||
| `L1`, `L2` | 6,0, 24,0 mnd | bestilt kapasitet virker lineært fra 6 til 24 mnd etter vedtak | τ_Z |
|
||||
| `tau_down` | 36,0 mnd | tidskonstant for nedbygging | τ_ned |
|
||||
| `T_clear` | 24,0 mnd | restansen avvikles over denne tiden (koordinert regel) | H_Q; lign. (37) |
|
||||
| `H_pred` | 36,0 mnd | prognosehorisont | H_p; lign. (37) |
|
||||
| `period` | 12,0 mnd | budsjettsyklus | |
|
||||
| `qloop` | `False` | kvalitetssløyfen av eller på | avsnitt 8.5 |
|
||||
| `mu3` | 0,5 | tillitsvirkning av q | μ₃; lign. (21) |
|
||||
| `Lam_star` | 0,78 | tillitsmål for kvalitetssløyfen | Λ* |
|
||||
| `k_q` | 1 / 12 per mnd | forsterkning (1 per år) | k_q |
|
||||
| `q_max` | 0,2 | øvre grense for q | q_max |
|
||||
| `lag_survey` | 3,0 mnd | publiseringsforsinkelse for den årlige tillitsmålingen | |
|
||||
|
||||
### Faste verdier i scenarioene (`if __name__ == "__main__"`)
|
||||
|
||||
`T_TILTAK` = 24 (vedtak i måned 24), `T_UTV` = 24 (utvidelsen realiseres over 24 mnd), `XI_UND` = 0,8, `ZD_UTV` = 1,34
|
||||
(+34 % kapasitet), `XI_B_UND` = 1 − 0,2 / 0,6 ≈ 0,67 (20 % av alle saker er 33 % av klasse B), `TEND4` = 180 mnd for
|
||||
reglene i avsnitt 8.5.
|
||||
|
||||
### Konstanter i `diagnose.py` og `forlop.py`
|
||||
|
||||
`diagnose.py` bruker ingenting fra `sim.py` og har **egne kopier** av regelverdiene: `UPS_STAR` = 0,95, `UPS_HI` = 1,0,
|
||||
`T_CLEAR` = 24,0, `L1`, `L2` = 6,0, 24,0. Endres `ENDO` i `sim.py`, må disse endres likt, ellers regner diagnosen og
|
||||
forløpet med ulike regler. `forlop.py` bruker `ENDO` direkte for regelen og `diagnose.T_CLEAR`/`diagnose.UPS_STAR` for
|
||||
behovet det sammenligner med.
|
||||
|
||||
`forlop.py`: `NAA` = 24 (modellmåneden for første budsjettvedtak), `OBS` = `NAA` − `lagD` = 21, `SLUTT` = 180 mnd,
|
||||
`LAM_MYK` = Λ₀ − 0,05 = 0,75, `K_GULV` = 0,80 og `T_GULV` = 0,50 (under dette regnes forløpet ikke), `UPS_FOR_MIN` =
|
||||
`ups_lo` + 0,01 = 0,86 og `UPS_FOR_MAKS` = 0,98 (tillatt utnyttelse før økningen), `RADER` (månedene i tabellen).
|
||||
`forlop.py` har en egen kopi av regnestegene i `simulate_endo` (`simuler`, bare `koord` og `sched`) og kontrollerer i
|
||||
hver kjøring at den gir bit for bit samme svar som `simulate_endo` når restansen ikke legges inn. Endres
|
||||
`simulate_endo`, må `simuler` endres likt.
|
||||
|
||||
## (c) Ligning → funksjon → status
|
||||
|
||||
Fra notatets vedlegg C (tabell 12). Av de 39 nummererte ligningene er 18 implementert, 12 forenklet og 9 ikke
|
||||
implementert. *Implementert*: koden regner ligningen slik den står, i aggregert form (n = 1). *Forenklet*: koden regner
|
||||
et spesialtilfelle eller en enklere form. *Ikke implementert*: ligningen hører til rammeverket, men ingen simulering
|
||||
bruker den.
|
||||
|
||||
| Ligning | Avsnitt | Hva | Kode (`sim.py`) | Status |
|
||||
|---|---|---|---|---|
|
||||
| (1) | 1 | naiv beslutningsregel T ← f(K, O) | `simulate`, l. 66–86; regelen l. 73–75 | forenklet: f er proporsjonalregelen (11), O er K forsinket med τ |
|
||||
| (2) | 2.1 | vektet objektiv kriminalitet K_obj | `simulate_chain2`, l. 369–428 (K = K_A + K_B, l. 395) | forenklet: to kategorier, allerede alvorlighetsvektet; ellers n = 1 |
|
||||
| (3) | 2.3 | effektivt kriminalitetspress K̃ | – | ikke implementert: reglene svarer på K_obj |
|
||||
| (4) | 2.4 | måleligningen | – | ikke implementert: feilfritt estimat |
|
||||
| (5) | 3 | makrovektor E | – | ikke implementert |
|
||||
| (6) | 3 | strukturelt pådrag Ω | `Omega`, l. 45–46; `simulate_soc`, l. 466 | forenklet: eksogent, Ω₀ = 0,12, +30 % fra måned 12 (+60 % i månedene 12–36 i figur 8) |
|
||||
| (7) | 4.1 | tiltaksvektoren v | `simulate_endo`, l. 564–653 | forenklet: (T, ξ_D, Z_D, q), én kategori, bare domstolsleddet |
|
||||
| (8) | 4.1 | observasjonene O | `simulate_endo`, l. 582–588 og 609–611 | forenklet: K forsinket med τ, kjedestatistikk med 3 mnd, tillit årlig med 3 mnd |
|
||||
| (9) | 4.1 | beslutningsregelen Ψ | `simulate_endo`, l. 590–641 | forenklet: reglene i 8.5; tilstanden er den sanne, forsinket |
|
||||
| (10) | 4.2 | forsinkelsen τ | `simulate`, l. 70, og tilsvarende | forenklet: én parameter (3, 6 eller 11 mnd) |
|
||||
| (11) | 4.2 | styringsregelen (PID) | `simulate`, l. 75; `simulate_chain`, l. 218; `simulate_chain2`, l. 397; `simulate_soc`, l. 463; `predict_F`, l. 557; `simulate_endo`, l. 583 | forenklet: bare det reaktive leddet og metningen (k_i = k_d = 0, T_max = 3) |
|
||||
| (12) | 4.3 | kriminalitetsdynamikken | `deriv`, l. 57–58, med `removal`, l. 49–54; Euler-steget l. 82 | implementert |
|
||||
| (12′) | 4.3 | fjerning med metning F_sat | `removal`, l. 49–54 | implementert (γ′ = γ(1 + 1/K_sat)); Z_E regnes ikke ut særskilt |
|
||||
| (13) | 4.4 | dempning a og reaktivitet b | l. 686–688; l. 827–831 | implementert: a = 0,12, b = 0,30 |
|
||||
| (14) | 4.4 | kritisk forsinkelse τ_c | `critical_delay`, l. 128–132; største stabile k_p, l. 694–695 | implementert: τ_c = 7,2 mnd; k_p ≈ 2,3 ved τ = 11 |
|
||||
| (15) | 4.4 | tommelfingerregelen | l. 696; l. 724–726 | implementert: k_p < 1,4 ved τ = 11 |
|
||||
| (13′) | 4.4 | a og b med metning | l. 839–848; l. 874–876 | implementert |
|
||||
| (16) | 5.1 | forventet nytte | – | ikke implementert |
|
||||
| (17) | 5.1 | oppdagelsesrisiko | – | ikke implementert (fjerningsraten svarer til intensiteten h, l. 399) |
|
||||
| (18) | 5.1 | deltakelse | – | ikke implementert: pådraget er eksogent |
|
||||
| (19) | 5.2 | forskyvning mellom kategorier | – | ikke implementert |
|
||||
| (20) | 6.1 | trygghet U | `deriv`, l. 59–60, og tilsvarende | implementert |
|
||||
| (21) | 6.1 | tillit Λ | `deriv`, l. 61–62; μ₃q i `deriv_chain_xz`, l. 543–544 | implementert; μ₃ = 0 utenom kvalitetssløyfen |
|
||||
| (22) | 6.2 | samfunnsøkonomisk målfunksjon | – | ikke implementert: MPC minimerer et udiskontert kvadratisk tap over 24 mnd (l. 119–120) |
|
||||
| (23) | 6.3 | skranker | metningen i regelen; MPC, l. 120 og 123 | forenklet: bare 0 ≤ T ≤ T_max og Λ ≥ 0,75 (myk) |
|
||||
| (24) | 6.3 | MPC | `mpc_step`, l. 89–125; `mpc_step_chain`, l. 240–265 | forenklet: ett konstant innsatsnivå over H = 24, ingen sluttkostnad |
|
||||
| (25) | 7.1 | lovgivers handlingsrom | – | ikke implementert: T_max er fast |
|
||||
| (26) | 7.2 | utnyttelse og køtid per ledd | `court`, l. 167–178; utskrift l. 732–738 og 783–786 | forenklet: bare domstolsleddet |
|
||||
| (27) | 7.2 | J_D = ξ_D F | `deriv_chain`, l. 182–184; `deriv_chain_xz`, l. 535–536; `simulate_chain2`, l. 407–408 | implementert |
|
||||
| (28) | 7.3 | domstolskøen R_D, τ_D | `court`, l. 167–178; `init_chain`, l. 195–203; m_D l. 154–155 | implementert: m_D = 0,233, τ_D^ref = 3 |
|
||||
| (29) | 7.3 | K med domstol | `deriv_chain`, l. 187 | implementert |
|
||||
| (30) | 7.3 | tilbakekoblingene g, Ω^eff, Λ₀ − μ₄g | `court`, l. 176–177; `deriv_chain`, l. 186 og 191 | implementert |
|
||||
| (31) | 7.3 | a og b med mettet domstol | l. 826–834 | implementert (sluttilstanden i scenario 2) |
|
||||
| (32) | 7.5 | kapasitetsskranker i kjeden | `simulate_chain`, l. 226–230; `simulate_chain2`, l. 400–406 | forenklet: bare J_D ≤ 0,95 Z_D, håndhevet ved å begrense T |
|
||||
| (33) | 8.3 | prioritert kø med to sakstyper | `court2`, l. 329–344; `capfun`, l. 320–326; `simulate_chain2` | implementert; i tillegg FIFO og c = 10 spor |
|
||||
| (34) | 8.4 | rekruttering | `hill`, l. 442–443; `simulate_soc`, l. 451–476; `soc_equilibria`, l. 479–491 | implementert |
|
||||
| (35) | 8.5 | påtalemyndighetens regel for ξ | `simulate_endo`, l. 598–604 og 640 | implementert |
|
||||
| (36) | 8.5 | budsjettregelen for Z | `simulate_endo`, l. 614–621 og 628–639 | implementert |
|
||||
| (37) | 8.5 | den koordinerte regelen | `simulate_endo`, l. 605–608 og 622–634; `predict_F`, l. 548–561 | implementert |
|
||||
| – | 8.5 | sløyfen for q | `simulate_endo`, l. 609–612 og 641 | implementert |
|
||||
|
||||
Merknadene i vedlegg C sier mer om hvert punkt, blant annet hvor koden avviker fra teksten i små ting (grensen på
|
||||
3 k_ξ per måned i (35), at nedbyggingsmålet i (36) står til ny kapasitet bestilles, og at q også justeres ned).
|
||||
|
||||
## (d) De fem simulatorene
|
||||
|
||||
Alle integreres med eksplisitt Euler, `DT` = 0,05. Alle tar parameterne som `p` (standard `P`), så en endring gjøres
|
||||
med `dict(P, navn=verdi)`. `simulate`, `simulate_chain`, `simulate_chain2` og `simulate_soc` bruker den globale `TEND`;
|
||||
`simulate_endo` har argumentet `tend`, med standardverdien `TEND` slik den var da `sim.py` ble lest inn.
|
||||
|
||||
| Funksjon | Dekker | Styring | Datafiler i notatets kjøring | Figur / tabell |
|
||||
|---|---|---|---|---|
|
||||
| `simulate(controller, tau, p, kp)` | grunnmodellen uten kjede: K, U, Λ, T | `"P"` eller `"MPC"` | `p3`, `p6`, `p11`, `mpc11`, `p11d`; `sat_B`, `sat_C` (med `ksat` 3 og 1,5) | figur 4 (regime A–E); figur 7 venstre (`sat_C`); tabell 5 |
|
||||
| `simulate_chain(controller, tau, ch, p, kp, mpc_knows_chain)` | domstolen som ledd med kø, med tidsplaner (`Zfun`, `xifun`) og trommel–buffer–tau (`dbr`) | `"P"` eller `"MPC"` | `kjede_s1`–`kjede_s5` | figur 6; tabell 4 |
|
||||
| `simulate_chain2(tau, ch2, p, kp)` | domstol med to sakstyper, forrang eller FIFO, c spor | proporsjonal regel | `prio_s2`, `prio_s3`, `prio_s5` | figur 7 høyre; tabell 6 |
|
||||
| `simulate_soc(controller, tau, p, s, kp, shock, t_on, t_off)` | rekruttering og vippepunkt, forbigående sjokk | `"P"`, ellers fast T = T₀ | `vippe` | figur 8 |
|
||||
| `simulate_endo(policy, tau, p, ch, e, kp, tend, xi_sched, Z_sched)` | endogene tiltak: ξ_D, Z_D og q bestemt av regler | politiet: proporsjonal regel; kjeden: `"sched"`, `"desentral"`, `"desentral_prog"`, `"koord"` | `endo_e5`, `endo_des`, `endo_desp`, `endo_ko` | figur 9; tabell 7 og 10 |
|
||||
|
||||
Regimene i figur 4: A = `p3` (k_p = 3, τ = 3), B = `p6` (τ = 6), C = `p11` (τ = 11), D = `mpc11` (MPC, τ = 11), E =
|
||||
`p11d` (k_p = 1,2, τ = 11). `stab.dat` og `thumb.dat` (figur 5) kommer fra `critical_delay` og tommelfingerregelen, ikke
|
||||
fra en simulering. `sat_B` og `prio_s5` skrives, men brukes ikke i figurene. Det er 22 datafiler i alt.
|
||||
|
||||
Kolonner: `p*`, `p11d`: `t K U L T`; `kjede_s*`: `t K U L T Q tauD`; `sat_*`: `t K Ks3 Ks15`; `prio_s*`: `t K KA KB tauA
|
||||
tauB tauF KF KAF`; `vippe`: `t fast p3 p6 p3cap p6cap`; `endo_*`: `t K L T Z xi tauD q` (Z relativt til `ZD0`);
|
||||
`stab`, `thumb`: `kp tauc`. Tidsseriene skrives med hver tiende rad (`write_csv`, hver halve måned).
|
||||
|
||||
I tillegg: `pure_capacity_loop` (ren kapasitetssløyfe, merknad 4; bare utskrift), `predict_F` (prognosen den
|
||||
koordinerte regelen bruker) og `soc_equilibria` (likevektene i avsnitt 8.4).
|
||||
|
||||
## (e) Grensetilfellene koden skriver ut
|
||||
|
||||
Regelen i notatet: hver utvidelse har et grensetilfelle som gjenskaper grunnmodellen. `sim.py` skriver ut avviket.
|
||||
Tallene under er fra en kjøring av `modell/kjerne/sim.py` med notatets låste versjoner (numpy 2.5.4, scipy 1.18.1), der
|
||||
alle 22 datafilene ble byte-like notatets.
|
||||
|
||||
| Kontroll | Utskrift | Største avvik |
|
||||
|---|---|---|
|
||||
| `simulate_chain` med Z_D = ∞ gjenskaper regime A–D (`p3`, `p6`, `p11`, `mpc11`) | Del 2, «grensetilfelle: reproduksjon av regime A-D» | 0 for `p3`; høyst 3,8·10⁻¹⁵ i K og 2,9·10⁻¹⁴ i T |
|
||||
| `simulate_chain` med endelig Z_D og ϑ = χ_D = μ₄ = 0 gjenskaper regime A (køen regnes, men virker ikke tilbake) | samme sted | 0 |
|
||||
| `simulate_chain` med stor, endelig Z_D (1 og 10) nærmer seg regime A | samme sted | 4,7·10⁻³ og 3,6·10⁻³ i K (ikke et eksakt grensetilfelle) |
|
||||
| `simulate` med K_sat = ∞ gjenskaper regime A–C; `simulate_chain` gjenskaper scenario 2 | Del 3 (a) | 0 |
|
||||
| `simulate_chain2` med FIFO, ϑ_A = ϑ_B = 0,5 og c = 1 gjenskaper scenario 2 | Del 3 (b), «kontrolltall» | 2,2·10⁻¹⁵ i K, 2,8·10⁻¹³ i τ |
|
||||
| `calibrate_m` med c = 1 gir `MD` | samme sted | 0,2330 mot 0,2330 |
|
||||
| `simulate_endo("sched")` gjenskaper scenario 2, og med tidsplanene scenario 5 | Del 4, «faste tidsplaner gjenskaper scenario 2 og 5» | 0 |
|
||||
|
||||
`simulate_soc` har ingen utskrevet grensetilfelle. `forlop.py` kontrollerer sin egen kopi mot `simulate_endo` i hver
|
||||
kjøring (bit for bit, se over). Den som endrer kjernen, kjører kontrollene på nytt og ser at avvikene fortsatt er 0
|
||||
eller på avrundingsnivå, og at de 22 datafilene er byte-like med mindre endringen skal endre resultatene.
|
||||
Loading…
Add table
Add a link
Reference in a new issue