Both floors run an identical fleet: robots drain battery while traveling and working a scattered set of tasks, and recharge only at the single charging pad in the corner. The left fleet is naive — every robot keeps grabbing tasks until its battery hits zero mid-task. It freezes on the spot, raises a red flag, and its unfinished task resets and goes back into the pool for someone else to start from scratch. That is a stranded incident.
The right fleet runs a predictive scheduler. For every robot it is working, it continuously estimates "time left to finish this task, plus time to drive back to the charger" and compares that to the robot's actual remaining battery. The moment the margin gets thin, it proactively pulls that robot off the task before it would run out, reassigns the unfinished task to another robot that has spare capacity, and routes the low robot to recharge. No robot in the managed fleet is ever allowed to physically die on the floor.
- Robots per fleet / Task load — raise either to see the naive fleet's stranded-incident count climb and its throughput sag, while the managed fleet keeps completing tasks at a steady rate.
- Battery bar above each robot — green/yellow/red fill shows charge; a robot heading to the pad turns cyan.
- Reassigned — how many times the managed scheduler handed an in-progress task to a different robot ahead of a predicted strand.