hackathon_code4change / docs /simulation.md
RoyAalekh's picture
refactored project structure. renamed scheduler dir to src
03a506a

Simulation Module — Engine, Allocator, and Policies

Directory: scheduler/simulation/

This package provides a discrete‑event simulation of the court scheduling system. It generates synthetic case flows (or consumes real‑like parameters), evaluates scheduling/ripeness policies, and produces quantitative outputs and reports.

Files overview

  • engine.py

    • Purpose: Main simulation loop and state transition engine.
    • Key classes:
      • CourtSimConfig: Parameters (capacity, stage transition matrices, adjournment params, filings, horizon, etc.).
      • CourtSimResult: Aggregated outputs produced by a run.
      • CourtSim: The engine orchestrating daily cycles:
        • _init_stage_ready(): initializes stage readiness from configuration.
        • _evaluate_ripeness(current): classify cases using core.ripeness.RipenessClassifier.
        • _choose_cases_for_day(current): select candidates (potentially via policies/priority).
        • _file_new_cases(current, n): generate new cases based on expected filings.
        • _day_process(current): core daily loop combining filings, ripeness, scheduling, hearings, adjournments, and disposals.
        • run(): iterate over the configured horizon; write metrics and event logs.
    • Interactions: Uses domain models in scheduler/core/*, policies in scheduler/simulation/policies/*, and allocator.
  • allocator.py

    • Purpose: Allocate prioritized cases to available courtroom capacity.
    • Typical responsibilities: respect per‑courtroom limits, avoid duplicate bookings, ensure eligibility constraints.
    • Interactions: Invoked by both the simulation engine and the core scheduling algorithm.
  • policies/

    • Purpose: Pluggable case selection strategies.
    • Files:
      • age.py: age‑based prioritization (older cases first, possibly weighted).
      • fifo.py: first‑in first‑out ordering respecting readiness.
      • readiness.py: prioritization by computed readiness or ripeness score.
    • Interface: Each policy exposes a common callable/signature expected by engine.py and the core algorithm’s policy abstraction (core/policy.py).

Simulation flow (high level)

  1. Initialize CourtSimConfig from data defaults and parameters.
  2. Seed a case population and stage readiness.
  3. For each simulated day: file new cases, evaluate ripeness, select cases, allocate to courtrooms, conduct hearings, sample adjournments/next stages/disposals.
  4. Persist daily summaries, metrics, and event logs to outputs/simulation_runs/<version_timestamp>/.