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
126
docs/forbehold.md
Normal file
126
docs/forbehold.md
Normal file
|
|
@ -0,0 +1,126 @@
|
|||
# Forbehold
|
||||
|
||||
Forbeholdene ved modellen, diagnosen, forløpet og de norske eksempeltallene. De er hentet fra notatet *Den dynamiske
|
||||
rettsstaten* (avsnitt 9.8 og 10, vedlegg C), README i notatets repo og koden i `modell/kjerne/` (commit 2badc25).
|
||||
Ferdighetene tar med de forbeholdene som gjelder for svaret de gir.
|
||||
|
||||
## Modellen som helhet
|
||||
|
||||
- **Ikke kalibrert på norske data.** Parameterne er stiliserte (tabell 3 i notatet). Simuleringene illustrerer
|
||||
mekanismer. De er ikke prognoser. Notatet sier at modellen verken er kalibrert eller validert, og at tre av premissene
|
||||
ikke er påvist: at norsk rettshåndhevelse pendler mellom over- og underhåndhevelse, at domstolen er kjedens bindende
|
||||
ledd, og at måleproblemet kan løses slik modellen forutsetter.
|
||||
- **Simuleringene regner på kjernen, ikke hele rammeverket.** Av notatets 39 nummererte ligninger er 18 implementert,
|
||||
12 forenklet og 9 ikke implementert (vedlegg C). Ikke implementert er blant annet forskyvning mellom kategorier,
|
||||
lovbryternes strategiske tilpasning, måleligningen, de makroøkonomiske driverne, målfunksjonen og lovgivers
|
||||
handlingsrom. Se `docs/modellkart.md`.
|
||||
- **Feilfrie observasjoner.** Alle simuleringer antar et feilfritt estimat; forsinkelsen er eneste
|
||||
måleimperfeksjon. Resultatene er enkeltbaner uten parameterusikkerhet.
|
||||
- **Bare ett ledd har kø.** I notatets simuleringer er det domstolen; i `forlop` er det leddet som binder i dine tall.
|
||||
Etterforskning, påtale og straffegjennomføring har ellers verken kø, frafall eller kapasitet i modellen.
|
||||
- **Kostnader er ikke regnet i kroner.** Målfunksjonen er stilt opp, men ikke brukt. Ingen kostnader eller gevinster
|
||||
er tallfestet, og modellens størrelser er normaliserte, ikke årsverk eller kroner.
|
||||
- **Beslutningsreglene er stiliserte.** Reglene for påtale og budsjett er representasjoner av hvordan myndighetene kan
|
||||
svare på det de ser, ikke beskrivelser av dagens praksis. Nivåene avhenger av terskler, forsterkninger og
|
||||
ledetider; det som er robust, er mekanismene.
|
||||
- **Andelen som kan ledes utenom** er i praksis bestemt av sakenes art og av hjemlene i straffeprosessloven. Den er
|
||||
et rettspolitisk valg, ikke en styringsparameter.
|
||||
|
||||
## Diagnosen (`diagnose`)
|
||||
|
||||
- **Saksbeh.tid** er restanse delt på kapasitet, ikke målt saksbehandlingstid. Kolonnen vises bare når målet er
|
||||
oppgitt som saksbehandlingstid (`maal_tid`).
|
||||
- **Bevilget kapasitet som ikke virker ennå, regnes ikke med.** Oppgi kapasiteten som virker nå, og trekk det som
|
||||
allerede er bevilget, fra behovet.
|
||||
- **Behovet er et grovt anslag.** Det dimensjoneres etter prognosen for strømmen (eller strømmen nå, når ingen prognose
|
||||
er oppgitt), med restansen over målet avviklet over 24 måneder og 95 % utnyttelse som mål. Tallene 24 og 0,95 er
|
||||
faste valg i notatets koordinerte regel, ikke noe som er målt.
|
||||
- **«Utnytt leddet»** (fjerne tapt tid i skranken) er første tiltak, men regnes ikke.
|
||||
- **Like ledd skilles ikke.** Har to ledd samme utnyttelse på to desimaler, velger verktøyet leddet der restansen vokser
|
||||
raskest i forhold til kapasiteten, og sier at forskjellen er for liten til å skille leddene.
|
||||
- **Leddene etter skranken** viser bare det som slipper gjennom den. Når skranken løses, kan innstrømningen dit øke.
|
||||
- **Saksenheter.** Hvert ledd har sine egne enheter; bare utnyttelsen kan sammenlignes på tvers av ledd.
|
||||
- **Verktøyet regner på tallene slik de er oppgitt.** Det vurderer ikke om de er riktige eller hvor usikre de er.
|
||||
|
||||
## Forløpet over tid (`forlop`)
|
||||
|
||||
- **Hva som er dine tall, og hva som er modellens.** Kapasitet, restanse og saksbehandlingstid følger tallene i fila.
|
||||
Kriminalitet, tillit og politiets innsats følger modellens stiliserte parametere, som ikke er kalibrert på norske
|
||||
data. Rekkefølgen og retningen er poenget, ikke tallene.
|
||||
- **Leddet regnes som domstolen i notatet.** Leddet som binder, legges inn som modellens ledd med kø, det som tar imot
|
||||
sakene politiets innsats gir. For leddene etter regner skriptet bare hva flere avgjorte saker betyr hvis de får
|
||||
sakene sine gjennom skranken. Hvor sakene som ledes utenom havner, er ikke regnet. Leddene foran vises som politiets
|
||||
innsats og andelen ledet utenom.
|
||||
- **Restansen legges inn direkte.** Forløpet starter i restansen i fila, også når den har vokst i årevis. Kriminalitet,
|
||||
tillit og politiets innsats starter likevel fra modellens egen forhistorie: et ledd i balanse, en varig økning og
|
||||
første budsjettvedtak høyst 15 måneder senere. For en restanse som har vokst lenger enn det, kommer virkningen av
|
||||
lang saksbehandlingstid først etter start i modellen. Skriptet sier fra når det gjelder. Er restansen i fila lavere
|
||||
enn det modellen kan ha med denne kapasiteten, starter forløpet i modellens minste restanse, og skriptet sier fra.
|
||||
- **Store restanser.** Modellen legger halvparten av virkningen av en sak til tidspunktet saken avgjøres. Når en stor
|
||||
restanse avvikles, faller kriminaliteten i modellen derfor under nivået før økningen, og skriptet skriver ut et
|
||||
forbehold. Med tallene i eksempelfila skjer det ved en restanse mellom 3 750 og 4 000 saker at forløpet ikke lenger
|
||||
regnes (se under).
|
||||
- **Sammenligningen uten tiltak** får samme tillegg eller fradrag i restansen som forløpet med tiltak. Den starter
|
||||
høyere når modellen har ledet saker utenom før første vedtak, og skriptet skriver ut hvor den starter.
|
||||
- **Stabilitetssjekken** gjelder likevekten før økningen og bruker modellens stiliserte tall for hvor fort innsatsen
|
||||
virker: innsatsen fjerner 10 % av kriminaliteten per måned, og 2 % faller fra av seg selv.
|
||||
- **«Nå»** er første budsjettvedtak etter økningen. Tallene det bygger på, er 3 måneder gamle, som tallene i fila.
|
||||
- **Innstrømningen før økningen** antas å være 95 % av kapasiteten når `innstromning_for_okning` ikke er oppgitt.
|
||||
- **Kapasitet som blir stående.** Kapasitet som ble bestilt for å avvikle restansen, kan bli stående etterpå, fordi
|
||||
regelen først bygger ned når utnyttelsen er under 0,85. Skriptet sier fra når det skjer.
|
||||
|
||||
### Når forløpet ikke regnes
|
||||
|
||||
Skriptet skriver «Forløp: ikke regnet» med grunnen, og stabilitetssjekken står fortsatt, når:
|
||||
- **styringen er ustabil**: forsinkelsen er lengre enn den kritiske. Da finnes det ingen ny balanse å dimensjonere
|
||||
etter. Styringen må rettes først;
|
||||
- **prognosen ikke faller til ro** innen 36 måneder (prognosen med dobbel horisont avviker mer enn 1 %): styringen er
|
||||
for nær grensen eller for treg;
|
||||
- **kriminaliteten i modellen faller under 0,80 eller politiets innsats under 0,50** av nivået før økningen mens
|
||||
restansen avvikles. Da gjelder diagnosen alene.
|
||||
|
||||
Skriptet skriver «Forløp: ingen ledd binder» når ingen ledd er over full utnyttelse og ingen restanse vokser.
|
||||
|
||||
Det stopper med en melding, uten forløp, når tallene ligger utenfor det modellen dekker: innstrømningen før økningen
|
||||
ligger utenfor 86–98 % av kapasiteten, prognosen er ikke høyere enn innstrømningen før økningen eller mer enn om lag 3
|
||||
ganger så høy, eller modellens regel ville gjort vedtak før økningen var observert. Se `docs/inndata.md`.
|
||||
|
||||
## De norske eksempeltallene (`eksempler/norge_2025.json`)
|
||||
|
||||
Fra README i notatets repo:
|
||||
- **Fengselstallene er anslag.** Kriminalomsorgen oppgir ikke direkte hvor mange dommer som ble iverksatt i fengsel.
|
||||
Avgangen er regnet fra at 5 180 iverksatte saker i samfunn var 58 % av alle iverksatte saker i 2025, altså om lag
|
||||
3 750 i fengsel. Innstrømningen er avgangen pluss køveksten fra oktober 2025 til oktober 2026. Utnyttelse over 1
|
||||
betyr derfor bare at dommer kom inn raskere enn de ble iverksatt. Den sier ikke hvor fulle fengslene er: belegget
|
||||
var 91 % ved utgangen av oktober 2026.
|
||||
- **Fengselstallet er følsomt for hva som regnes med.** Køen er uten dem som venter på soning med fotlenke. Med hele
|
||||
soningskøen (657 mot 284) blir utnyttelsen 1,10. Regnes fotlenke med både i køen og i avgangen, blir den 1,06, og da
|
||||
ligger politi og påtale høyest.
|
||||
- **Politiets tall og SSBs tall teller ikke det samme.** Politiets driftsstatistikk har 348 534 anmeldte lovbrudd og
|
||||
349 450 påtaleavgjorte saker. SSBs offisielle statistikk har 308 438 etterforskede lovbrudd og holder utenfor om lag
|
||||
35 300 anmeldelser som ble henlagt utenfor straffesak. Regnes kapasitetshenleggelsene som SSBs andel (9,8 % av de
|
||||
etterforskede lovbruddene) i stedet for som et antall, blir utnyttelsen for politi og påtale 1,11 i stedet for 1,09.
|
||||
- **Kapasitetshenleggelsene er en registrert begrunnelse.** Det meldes om forholdsvis store forskjeller mellom
|
||||
politidistriktene i bruken av henleggelseskoder. Riksadvokatens rundskriv om henleggelser (nr. 2/2025) gjelder fra
|
||||
1. januar 2026, så tall fra 2026 kan ikke uten videre sammenlignes med tidligere år.
|
||||
- **Politi og påtale og fengsel ligger likt (1,09).** Forskjellen mellom de to leddene er mindre enn usikkerheten i
|
||||
tallene, så diagnosen skiller dem ikke. Regnes kapasitetshenleggelsene ikke som saker som ikke ble behandlet, er
|
||||
utnyttelsen for politi og påtale 1,00.
|
||||
- **Kapasitetsbehovet for fengsel** (om lag 15 % mer, 358 mot 313 iverksettelser i måneden) er et grovt anslag. Om lag
|
||||
9 % skal til for å holde følge med strømmen; resten er margin, fordi verktøyet dimensjonerer til 95 % utnyttelse.
|
||||
- **Forløpet for fengsel** (15 % mer kapasitet nå og 7 % til året etter) er modellens stiliserte dynamikk lagt på norske
|
||||
størrelser, ikke en prognose. Det starter i køen på 596 dommer, som er under målet på to måneder (625).
|
||||
- **Ingen uavhengig bekreftelse.** Diagnosen bygger på de samme kildene som notatet.
|
||||
|
||||
## Hva pluginen ikke gjør
|
||||
|
||||
- Den erstatter ikke budsjettarbeidet. Den viser hvor kjeden binder, hvilken type tiltak som følger, og omtrent hvor
|
||||
stort tiltaket bør være.
|
||||
- Den sier ingenting om enkeltsaker eller enkeltpersoner. Modellen brukes på kategorier og aggregerte tall, aldri til å
|
||||
forutsi enkeltpersoners atferd (notatet, avsnitt 9.8). Bruk bare aggregerte tall, aldri persondata.
|
||||
- Den beslutter ikke. Modellen anbefaler; ansvarlige myndigheter beslutter og begrunner eventuelle avvik.
|
||||
- Den foreslår ikke å endre straffebud eller strafferammer. Straffebud og strafferammer ligger fast. Det som tilpasses,
|
||||
er prioriteringer, innsats, organisering, prosess og valg av reaksjon innenfor lovens rammer.
|
||||
- Den lager ikke prognoser og kalibrerer ikke modellen mot norske tidsserier.
|
||||
- Den regner ikke kostnader eller gevinster i kroner.
|
||||
- Forebygging er ikke en beslutningsvariabel i modellen, så den kan bare anbefale tiltak i straffesakskjeden.
|
||||
168
docs/inndata.md
Normal file
168
docs/inndata.md
Normal file
|
|
@ -0,0 +1,168 @@
|
|||
# Inndata for `diagnose` og `forlop`
|
||||
|
||||
`diagnose` og `forlop` leser samme fil: en JSON-fil med ett objekt per ledd i straffesakskjeden. Denne siden
|
||||
beskriver hvert felt slik kjernens kode leser det (`modell/kjerne/diagnose.py`: `sjekk`, `analyser`, `TALLFELT`;
|
||||
`modell/kjerne/forlop.py`: `les_styring`, `modell`). Kjernen er en uendret kopi av koden i notatet *Den dynamiske
|
||||
rettsstaten* (commit 2badc25).
|
||||
|
||||
## Enheter
|
||||
|
||||
| Hva | Enhet |
|
||||
|---|---|
|
||||
| Strømmer (innstrømning, kapasitet, skjult avgang) | saker per **måned** |
|
||||
| Beholdninger (restanse, restansemål) | saker (et antall, ikke per måned) |
|
||||
| Tider (mål for saksbehandlingstid, forsinkelse) | måneder |
|
||||
| Andeler | desimaltall mellom 0 og 1 (0.2 betyr 20 %) |
|
||||
|
||||
Tall skrives med punktum som desimaltegn og uten tusenskille: `29044.5`, ikke `29 044,5`.
|
||||
|
||||
## Oppbygning
|
||||
|
||||
```json
|
||||
{
|
||||
"merknad": "fri tekst, valgfritt",
|
||||
"styring": {"forsinkelse": 3, "reaktivitet": 3},
|
||||
"ledd": [
|
||||
{"navn": "Politi", "innstromning": 150, "kapasitet": 175, "restanse": 300, "maal_tid": 2},
|
||||
{"navn": "Domstol", "innstromning": 134.32, "kapasitet": 105.263, "restanse": 588.95, "maal_tid": 3,
|
||||
"prognose_innstromning": 134.32, "maks_andel_utenom": 0.2}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
- `ledd` (påkrevd): en liste med minst ett ledd, **i kjedens rekkefølge**. Rekkefølgen brukes: leddene etter
|
||||
skranken omtales som leddene som får sakene sine gjennom den, og `forlop` regner hva flere avgjorte saker betyr
|
||||
for dem.
|
||||
- `styring` (valgfritt): brukes bare av `forlop`. Se under.
|
||||
- Andre felt på øverste nivå (for eksempel `merknad` og `kilder`) leses ikke av koden. Bruk dem til å skrive ned
|
||||
hvor tallene kommer fra.
|
||||
|
||||
## Feltene i hvert ledd
|
||||
|
||||
| Felt | Påkrevd | Enhet | Standard | Brukes til |
|
||||
|---|---|---|---|---|
|
||||
| `navn` | ja | tekst | – | navnet i utskriften; `forlop` kan velge leddet med dette navnet |
|
||||
| `innstromning` | ja | saker/mnd | – | utnyttelsen, og restanseveksten når `restanse_for_12_mnd` mangler |
|
||||
| `kapasitet` | ja | saker/mnd | – | det leddet kan avgjøre per måned **slik det virker nå** |
|
||||
| `restanse` | ja | saker | – | saker i kø nå |
|
||||
| `maal_tid` | ett av de to | mnd | – | mål for saksbehandlingstid; restansemålet blir `maal_tid` × `kapasitet` |
|
||||
| `restanse_maal` | ett av de to | saker | – | akseptabel restanse; brukes i stedet for `maal_tid` når begge er oppgitt |
|
||||
| `prognose_innstromning` | nei | saker/mnd | `innstromning` | strømmen når balansen er gjenopprettet; kapasiteten dimensjoneres etter den |
|
||||
| `maks_andel_utenom` | nei | andel, under 1 | 0 | hvor stor andel av sakene som kan ledes til forenklede reaksjoner |
|
||||
| `restanse_for_12_mnd` | nei | saker | – | restansen for tolv måneder siden; gir observert vekst i restansen |
|
||||
| `skjult_avgang` | nei | saker/mnd | 0 | saker som avsluttes uten behandling og som er regnet med i `kapasitet` |
|
||||
| `innstromning_for_okning` | nei | saker/mnd | 95 % av kapasiteten | bare `forlop`: strømmen før den begynte å øke |
|
||||
|
||||
Krav som kontrolleres før regningen (`sjekk`):
|
||||
- `navn`, `innstromning`, `kapasitet` og `restanse` må finnes, og `maal_tid` eller `restanse_maal`.
|
||||
- `navn` må være tekst.
|
||||
- Alle tallfeltene må være tall som er 0 eller større og endelige. `true`/`false` godtas ikke.
|
||||
- `kapasitet` minus `skjult_avgang` må være større enn 0.
|
||||
- `maks_andel_utenom` må være mindre enn 1.
|
||||
|
||||
Brudd på kravene gir en norsk melding som sier hvilket ledd og hvilket felt det gjelder, og ingen regning.
|
||||
|
||||
**Feltnavn med skrivefeil blir ikke oppdaget.** Koden leser bare feltene over og ser bort fra alt annet. Står det
|
||||
`prognose_innstrømning` (med ø) eller `maks_andel_utenfor`, regner verktøyet stille med standardverdien. Feltnavnene
|
||||
skrives uten æ, ø og å, nøyaktig som i tabellen.
|
||||
|
||||
## Hvordan feltene brukes i regningen
|
||||
|
||||
Med Z = `kapasitet` − `skjult_avgang` (avgangen med behandling):
|
||||
|
||||
| Størrelse | Regnes som |
|
||||
|---|---|
|
||||
| Utnyttelse | `innstromning` / Z |
|
||||
| Saksbeh.tid | `restanse` / `kapasitet`. Vises bare når målet er `maal_tid`; med `restanse_maal` står det «-». Det er ikke målt saksbehandlingstid |
|
||||
| Restansemål | `restanse_maal`, ellers `maal_tid` × `kapasitet` |
|
||||
| Restansevekst per måned | (`restanse` − `restanse_for_12_mnd`) / 12, ellers `innstromning` − `kapasitet` (minst 0) |
|
||||
| Restanse over målet | `restanse` − restansemålet (minst 0) |
|
||||
| Skranken som binder | høyest utnyttelse på to desimaler; er den lik, leddet der restanseveksten er størst i forhold til Z |
|
||||
| Leddet binder | utnyttelsen er over 1, eller restansen vokser |
|
||||
| Utnyttelse med saker ledet utenom | (1 − `maks_andel_utenom`) × `prognose_innstromning` / Z |
|
||||
| Kapasitetsbehov | ((1 − `maks_andel_utenom`) × `prognose_innstromning` + restanse over målet / 24) / 0,95 |
|
||||
|
||||
Kapasitet bestilles bare når (1 − `maks_andel_utenom`) × `prognose_innstromning` + restanse over målet / 24 er større
|
||||
enn Z. Faste verdier i regningen, som i notatets koordinerte regel (`ENDO` i `sim.py`): målutnyttelse 0,95, restansen
|
||||
avvikles over 24 måneder, og bestilt kapasitet virker gradvis fra 6 til 24 måneder etter vedtak.
|
||||
|
||||
## `styring` (bare `forlop`)
|
||||
|
||||
| Felt | Enhet | Standard | Tillatt | Betyr |
|
||||
|---|---|---|---|---|
|
||||
| `forsinkelse` | mnd | 3 | over 0, høyst 60 | tiden fra kriminalitetsbildet endrer seg til innsatsen er endret (statistikk, beslutning, iverksetting) |
|
||||
| `reaktivitet` | – | 3 | over 0, høyst 50 | prosent mer innsats per prosent avvik fra målet (3 betyr at 10 % over målet gir 30 % mer innsats) |
|
||||
|
||||
Uten `styring` brukes regime A i notatet (3 og 3), og `forlop` sier fra om det. Står `styring` i fila, men ett av
|
||||
feltene mangler, brukes standardverdien for det feltet uten merknad.
|
||||
|
||||
## Hva `forlop` krever i tillegg
|
||||
|
||||
`forlop` legger leddet som binder (eller leddet du velger med navn) inn som modellens ledd med kø. Det stopper med en
|
||||
melding når tallene ligger utenfor det modellen dekker:
|
||||
|
||||
- Innstrømningen før økningen (`innstromning_for_okning`, eller 95 % av Z når feltet mangler) må ligge mellom 86 og
|
||||
98 % av Z. Utenfor det ville modellens regel ha endret kapasiteten allerede før økningen.
|
||||
- `prognose_innstromning` (eller `innstromning`) må være høyere enn innstrømningen før økningen, og ikke mer enn om
|
||||
lag 3 ganger så høy.
|
||||
- Restansemålet må være større enn 0 (`maal_tid` eller `restanse_maal` over 0).
|
||||
|
||||
Leddet velges med navnet slik det står i fila, med samme store og små bokstaver, mellomrom og komma.
|
||||
|
||||
## Vanlige feil
|
||||
|
||||
**Årstall i stedet for månedstall.** Strømmene (`innstromning`, `kapasitet`, `skjult_avgang`, `prognose_innstromning`,
|
||||
`innstromning_for_okning`) er per måned. Årstall deles på 12. Beholdningene (`restanse`, `restanse_for_12_mnd`,
|
||||
`restanse_maal`) deles **ikke** på 12: de er antall saker på et tidspunkt. `maal_tid` er i måneder (60 dager er 2).
|
||||
|
||||
**Kapasitet som ikke virker ennå.** `kapasitet` er det leddet avgjør per måned nå. Kapasitet som er bevilget, men ikke
|
||||
virker ennå, skal ikke med. Trekk den fra behovet verktøyet regner ut.
|
||||
|
||||
**Kapasitet med skjult avgang.** Er tallet for kapasitet hentet fra avgjorte saker, og noen av dem ble avsluttet uten
|
||||
behandling (for eksempel henlagt på grunn av manglende kapasitet), oppgis de som `skjult_avgang`. Verktøyet trekker dem
|
||||
da fra kapasiteten. Trekk dem ikke fra selv i tillegg, og oppgi ikke `skjult_avgang` hvis `kapasitet` ikke inneholder
|
||||
dem.
|
||||
|
||||
**`maal_tid` eller `restanse_maal`.** `maal_tid` passer når restansen er hele køen og målet er en saksbehandlingstid.
|
||||
`restanse_maal` passer når målet er et antall saker, eller når restansen bare er en del av køen (for eksempel saker
|
||||
eldre enn tre måneder). Oppgis begge, brukes `restanse_maal`, og `maal_tid` blir stående ubrukt.
|
||||
|
||||
**Andel som prosent.** `maks_andel_utenom` er en andel: `0.2`, ikke `20`.
|
||||
|
||||
**Saksenheter.** Hvert ledd kan telle i sine egne enheter (anmeldelser, saker, dommer). Bare utnyttelsen sammenlignes
|
||||
på tvers av ledd.
|
||||
|
||||
## Eksempelfilene
|
||||
|
||||
### `eksempler/eksempel_domstol.json`: stiliserte tall
|
||||
|
||||
Tallene er ikke norske. Domstolen er modellens tall i måned 24 i avsnitt 9.5 i notatet (`sim.py`, koordinert regel),
|
||||
ganget med 1000: innstrømning og prognose 134,32 saker/mnd, kapasitet 105,263 (0,10/0,95 × 1000), og restanse 588,95,
|
||||
som er restansen over målet (273,16) pluss 3 × kapasiteten. De tre andre leddene er satt under full utnyttelse for å
|
||||
vise diagnosen. `styring` er regime A (forsinkelse 3, reaktivitet 3).
|
||||
|
||||
| Ledd | Innstrømning | Kapasitet | Restanse | Mål | Annet |
|
||||
|---|---|---|---|---|---|
|
||||
| Politi | 150 | 175 | 300 | 2 mnd | |
|
||||
| Påtale | 140 | 160 | 200 | 1,5 mnd | høyst 10 % utenom |
|
||||
| Domstol | 134,32 | 105,263 | 588,95 | 3 mnd | prognose 134,32; høyst 20 % utenom |
|
||||
| Kriminalomsorg | 90 | 100 | 150 | 2 mnd | |
|
||||
|
||||
`diagnose` gir utnyttelse 1,28 i domstolen og 19 % mer kapasitet, som i avsnitt 9.5. `forlop` gir kritisk forsinkelse
|
||||
7,2 måneder, 19 % mer kapasitet nå og 12 % til året etter.
|
||||
|
||||
### `eksempler/norge_2025.json`: offentlige norske tall
|
||||
|
||||
Årstall delt på 12. Kilden til hvert tall står i feltet `kilder` i fila, og tall merket «anslag» der er utledet, ikke
|
||||
oppgitt i kilden. Tallene for politi og domstoler gjelder 2025. For fengsel er avgangen fra 2025 og køen fra oktober
|
||||
2025 og oktober 2026.
|
||||
|
||||
| Ledd | Slik er feltene brukt |
|
||||
|---|---|
|
||||
| Politi og påtale | `restanse` er saker eldre enn tre måneder, så målet er `restanse_maal` (10 % av innkomne saker). `skjult_avgang` er lovbrudd henlagt på grunn av manglende saksbehandlingskapasitet (30 334 / 12). |
|
||||
| Tingrett, meddomsrett | innkomne og avgjorte saker per måned, `maal_tid` 3; `restanse_for_12_mnd` er et anslag |
|
||||
| Lagmannsrett, bevisanke | to kategorier lagt sammen; `restanse_for_12_mnd` er et anslag |
|
||||
| Fengsel | `kapasitet` (iverksettelser i fengsel) og `innstromning` (avgang pluss køvekst) er anslag; `maal_tid` 2 (60 dager) |
|
||||
|
||||
`diagnose` gir utnyttelse 1,09 for politi og påtale, 1,04 for tingretten, 0,88 for lagmannsretten og 1,09 for fengsel.
|
||||
Forbeholdene ved disse tallene står i `docs/forbehold.md`.
|
||||
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