Sessions

No sessions yet — this campaign has a brief but no execution.

Brief

Question

Does the multi-group walker reproduce a plausible day-in-the-life of a real multi-room floor — staggered arrival waves seeking seats across six rooms, dwelling, standing up and leaving, seats being reused by later arrivals, and through-traffic threading the same doorways — and can we watch all of it in the run artefacts?

This is the first campaign where the crowd simulator is exercised as a crowd simulator, not as a trajectory feeder: heterogeneous agent types, time-structured demand, a stateful seat ledger with reuse, and (since 2026-06-04) movement surfaces on every run — the animated group-coloured Plotly replay, the footfall heatmap, and per-agent speeds.

What we already know

  • maury2018_d24a — free walking speed is Gaussian, 1.30 ± 0.21 m/s (uncongested), Weidmann's density law u = 1.34(1 − e^{−1.913(1/ρ − 1/5.4)}). This anchors the kinematic gate: a mean walking speed outside ≈0.8–1.6 m/s means the integrator (or our walkable derivation) is wrong, not the crowd.
  • hughes2002_57b4 — Hypothesis 1A: in multiple-type flow each type's speed is governed by the total density. The multi-group scenario is precisely this regime; the intensity sweep tests whether time-to-seat degrades with total load, not per-group load.
  • jebrane2026_3e34 — the FD slowdown is monotonic; flow peaks near 2 ped/m² and congestion grows nonlinearly. At intensity 2.0 (48 people, doorway choke points) we expect a visible super-linear time-to-seat increase.
  • zhong2022_7cb2 — FD comparison and in/out-flow counts are the standard validation instruments for simulated crowds; this campaign's criteria are exactly those instruments scaled to a furnished floor.
  • The EXP-S1 fundamental-diagram session (01KS7ZS50AQTVF9RTGH101FQNR, 37 runs) already validated the CFSM integrator against the published FD band on the parametric corridor — this campaign validates the scenario layer above the integrator (goals, ledger, waves), not the physics again.
  • 2026-06-04 coupled-chain findings baked into the base params: agent_clearance_cm ≈ 0–5 (larger seals door gaps), explicit agent_radius_m, spawn_bbox_cm for genuine traversal, park-on-arrival so seated bodies persist (they must remain scatterers for any downstream channel sim).

Prerequisites

  1. The rebuilt walk-notebook image. The groups scenario (kind: groups, arrival windows, after_dwell: return, seat reuse, scenario.intensity) and the movement surfaces ship with the 2026-06-04 floor_walk.py; the GHCR :latest predates it. Local: sim build walk-notebook; CI: merged to master → docker.yml rebuild.
  2. The structure artifact. Staged automatically: the launcher's stage_floor_bundle exports floor: resplan-12439-floor-0 from PostGIS to inputs/floor_geometry.json whenever the chain contains walk-notebook and the config dispatches geometry: from_floor. The floor carries 16 analysis-placed seats across 6 rooms — the only furnished floor today.
  3. Nothing else — all scenario state (ledger, occupancy, waves) is run-side; PostGIS is never touched by the container.

What the supervisor does

Phased fan-out (IP-081 supervisor; sim-runner subagents per cell):

  1. Phase A — gate run. One run at intensity: 1.0, seed: 0. Verify the movement surfaces are present and the kinematic gate holds (criteria 1–2) before spending the grid: a missing trajectory.html or a non-zero n_outside_walkable is a platform/image finding that fails fast.
  2. Phase B — grid. Remaining 8 cells (3 intensities × 3 seeds minus the gate run), fanned out.
  3. Phase C — synthesis. Analysis-writer reads domain_metrics.groups per run (per-group spawned / seated / departed / turned_away / mean_time_to_seat_s), checks the lifecycle criterion per intensity, computes the intensity→time-to-seat monotonicity, and cites run_ids + the replay artefacts. Campaign-critic reviews; weak claims get flagged before the session seals.

Figure render request

crowd_motion_mix — (a) the footfall heatmap at the three intensities side by side (doorway hotspots emerging with load), (b) time-to-seat vs intensity (per seed + pooled), (c) a timeline of on-floor population by group (entries/exits reconstructable from trajectory.parquet agent first/last frames) — plus a pointer to the best trajectory.html replay as the headline artefact.

Out of scope

  • CSI/BLE coupling. Once this scenario layer is validated, the natural follow-on is re-running c-csi-crowd-temporal with kind: groups — mixed seated/moving crowds are exactly the regime where temporal CSI variance and the BLE-anchored static regime separate. Not here.
  • FIIT library floor. fiit-library-floor-0 has no occupiable seats yet; when furnished, this campaign re-runs there unchanged (the brief is floor-agnostic via the staged bundle) — see c-fiit-find-a-seat.
  • FD calibration. The integrator physics are EXP-S1's concern (c-exps1-fundamental-diagram).
  • Entrance/exit semantics from the DB. Spawn/goal regions are scenario-side bboxes until transition subtypes (main_entry) are tagged in PostGIS.

Expected interpretation

  1. All criteria met → "The walker supports heterogeneous, time-structured crowd scenarios on a real multi-room floor with a working seat-reuse ledger, wall-tight kinematics in the published walking-speed band, and full visual replays." Unlocks scenario-grade upstreams for every coupled CSI campaign and the FIIT-library replication.
  2. Criteria 1–2 met, lifecycle gaps → a scenario-layer finding: name which leg breaks (late-wave starvation = reuse timing; turned_away at low intensity = ledger bug; departed < spawned = return-journey pathing, likely door congestion). The replay makes the failure visually diagnosable — cite the artefact.
  3. Kinematic gate fails (n_outside_walkable > 0 or speeds off-band) → a geometry/integrator finding on the walls-subtracted walkable derivation; freeze the grid and report.

Notes

  • The scenario knobs (groups, arrival_window_units, after_dwell, intensity) live in floor_walk.py::_normalise_groups — canonical at monad_knowledge/notebooks/python-jupedsim/floor_walk.py, build-context mirror in the image. Legacy kind: seek_and_occupy configs normalise to a single stay-wave, so c-fiit-find-a-seat and the c-csi-crowd-temporal chain are untouched.
  • A person keeps one stable agent_id across sit-down/stand-up (JuPedSim re-adds bodies under fresh internal ids; the walker aliases them back), so trajectory.parquet stays per-person continuous for replays and downstream channel synthesis.