Skills ask before using a working copy found in the user's folder and state its check level first. The drift of the queue models before the shock is stated in the caveats and the README. README shows how to run the check and the tests. The drift line names the month a gradual drive begins. Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
21 KiB
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 modellene med kø i
domstolen er starttilstanden nesten, men ikke helt, en likevekt: ved start er K′ = ϑ ς_D Q_D > 0, fordi det som faller
fra køen, aldri trekkes fra K (ligningen for K′ under). Uten sjokk kryper K og τ_D derfor sakte oppover; se
forbehold.md for hvor mye.
| 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.
kjor.py kontroll gjør dette og mer: den måler kjernen og fasiten mot notatets sjekksummer, kjører diagnosen,
forløpet, hele sim.py, grensetilfellene i utvidelsene og scenariokjøreren, og sier hvilke av notatets resultater som
har flyttet seg.