Demo
Pick a regime preset (Evening / Morning / High arrival) → Stay → Start, then Compare all and Batch N=100. Prefer Open full screen if the embed feels tight.
Elevator Parking Simulator — fixed scenario compare
Open full screenProblem
Where should idle elevators wait in an apartment bank? Parking placement is a policy choice; rankings depend on traffic regime.
| Strategy | Idle cars go to… |
|---|---|
| Stay | Last stop |
| Lobby | Floor 1 |
| Mid | Mid-building |
| Spread | Even homes along the shaft |
| Demand | Recent call-heat floors |
Approach
- Traffic knobs + scenario seed define one passenger stream
- Replay / Compare all hold that stream fixed so only parking policy changes
- Batch N=100 (seeds 42…141) ranks strategies with sticky hall dispatch
- Change one Policy knob; re-run Batch before claiming a win
Metrics: avg / max wait (ticks), empty travel (floors), IdleFrac (parking-sensitive / mixed / saturated), ticks, completed. Rank-by picks the objective — there is no single score.
Results
Evening default vs morning vs saturated high-arrival (REGIME):
| Regime | IdleFrac | 1st by avgWait | Stay−best gap |
|---|---|---|---|
| Evening (arr 15%, target 80) | 54% | Lobby 1.60 | 4.63 |
| Morning (arr 15%, target 80) | 50% | Spread 4.36 | 4.16 |
| High arrival (arr 90%, target 200) | 5% | Mid ≈ pack ~34–35 | 0.90 |
Pick parking by regime (Lobby for evening ingress; Spread for morning egress). When IdleFrac is saturated, stop tuning parking — next lever is zoning (documented, not coded). Do not ship a “global best” from one Replay. Parking needs idle time; parking policy is not the same as hall dispatch.
Limitations
Synthetic lab: Bernoulli arrivals, tick time, distance+load hall cost (not group ETA), no real-building calibration. Use for lever separation and fair A/B — not as a vendor-controller replacement study. Batch winRate can exceed 100% on ties.
Stack
Vanilla HTML · CSS · JavaScript · /elevator/
Notes
Takeaways, sticky vs reassign, traffic model
Takeaways
- No universal best parking policy — evening Lobby, morning Spread; gaps collapse when saturated
- IdleFrac diagnoses parking-sensitive vs saturated regimes
- Sticky orphans vs reassign thrash (Mid worse on N=100 sticky vs reassign A/B)
- Re-run Batch N=100 before/after one Policy change
Full tree + interview Q&A: /elevator/INSIGHTS.md · 한국어.
Sticky vs reassign: Sticky keeps the first car; Reassign rescores each tick.
E1: MOVING ↑ load 4/8 pickup #76 @16→L1
E3: IDLE @ 20
E4: IDLE @ 20Evening sticky vs reassign A/B: Stay max wait improves under reassign; Mid mean wait worsens (4.17→5.02) — myopic idle steal.
Traffic model (apartment default): Passenger OD is generated once from the seed + traffic knobs, then reused for Replay / Compare all.
| Period | Origin mix (approx.) | Story |
|---|---|---|
| Morning egress | ~90% upper, ~10% lobby | Leaving |
| Evening ingress | ~90% lobby, ~10% upper | Coming home |
| Midday / off-peak | ~45% lobby, ~55% upper | Mixed |
Arrival rate = per-tick Bernoulli (default 15%). Interfloor % = upper→upper chance (default 10%).