Robotics · Warehouse fleets (goods-to-person)
Fewer Robots, More Output
Hundreds of warehouse robots planned live in your browser. Find the fleet size where adding robots starts to cost output.
Overview
A traffic planner for goods-to-person warehouse robots, running in your browser. Up to 400 simulated grid robots receive new tasks continuously: fetch a storage pod, bring it to one of 16 pick stations, wait while it is picked, then fetch the next. There are no collisions by construction, and no deadlocks in 4,775 seeded runs. Add robots until output stops rising, then paint one-way aisles, which the planner weighs rather than enforces, and watch the top of the curve move.
On our floor, with this planner and a 6-second mean pick time, output tops out at about 5,134 pod presentations per hour. The top is flat: anywhere from 196 to 235 robots is within 0.5% of the best, and the smoothed curve peaks at 214. Past that, every robot costs output, and faster and faster: about 1 presentation per hour for each robot just past the top, about 4 per robot around 250, and about 7 per robot near 400. At 400 robots the floor delivers 20.5% less than at its best, and 48% of the travelling robots are no closer to their goal than they were 8 seconds earlier.
Paint the aisles one way, as preferences and not as rules, and the same floor tops out at 6,439 pod presentations per hour with 191 robots: 25.4% more output with 23 fewer robots. The baseline is two-way traffic in single-lane aisles, which real layouts avoid, so a gain is expected. The interesting part is where it stops. When picking slows to 24 seconds per pod, the stations set the limit, and the paint moves output by at most 2.5% either way.
These numbers belong to a grid model with this planner. Robots move one 1-metre cell per second in lockstep, may follow each other nose-to-tail, and have no acceleration or turning time. Storage blocks are solid (robots never drive under them), a pod's return is folded into the next fetch, and stations have no queue lanes. At its best fleet size the floor is about 40% full, much denser than a real fleet would run. The numbers rely on that nose-to-tail following: with a gap-keeping variant of the planner (no robot may enter a cell in the same second another leaves it), the best fleet size we ran was 80 robots at about 1,880 per hour, and by 160 robots it gridlocks (10 seeded runs per point). Real fleets jam earlier, and a different planner would move the top.
What we built
- A lifelong multi-robot planner based on PIBT (priority inheritance with backtracking, Okumura et al.), written from the paper. It runs in a Web Worker in your browser, and the same planner code ran every simulation behind the main numbers on this page.
- Soft one-way aisles: painted directions become weights on an undirected grid. Going against them costs 3 steps instead of 1, so robots still go against them when the detour would be longer, or when another robot needs the space. A map editor refuses any edit, blocking or unblocking a cell, that would leave a corridor off every loop: the condition PIBT's reachability proof needs. A bridge-finding pass checks it.
- Lockstep execution with random holds. Each second, 1% of planned moves are held back at random before anyone moves, and the robots queued behind a held robot are held with it, so no robot is ever moved into an occupied cell. An independent checker verifies every step.
- Pick stations with a pick time drawn at random for every pod (gamma distribution). In the live view you can switch the mean between 3, 6, 12 and 24 seconds.
- A seeded sweep of 4,740 one-hour runs: 20 to 400 robots on the main floor, plus a larger floor as a check. Every point has 95% confidence bands, and the top has a bootstrap interval.
Tech stack
JavaScript (ES modules) in a Web Worker · three.js · Node.js worker threads for the sweeps · Python and NumPy for the statistics
Numbers
| Number | How we measured it |
|---|---|
| 5,134 per hour | The top of the throughput curve: two-way aisles, 6 s mean pick time. One pod presented at a pick station is one presentation; one grid step counts as one second. It is the maximum of a smoothed curve (LOESS) fitted to 1,400 seeded one-hour runs at 20 to 400 robots (95% interval 5,130 to 5,139). |
| 196 to 235 robots | The flat top: every fleet size in this range is within 0.5% of the best. The smoothed curve peaks at 214 robots (bootstrap interval 213 to 216); other smoothing widths move that point between 212 and 216. |
| −1 → −7 per robot | What each added robot costs, from the fitted curve, with 95% bootstrap intervals:
|
| −20.5% | Throughput at 400 robots (4,080 per hour) against the top, on the same fitted curve. |
| +25.4% | Gain at the top from painted one-way aisles: 6,439 per hour at 191 robots. Measured on another 1,400 seeded runs with the same floor and settings; the 95% bootstrap interval is 25.3% to 25.5%. |
| Within 2.5% | With 24 s pick times, painted and unpainted floors stay within 2.5% of each other at every fleet size (10 seeded runs per point). The 16 stations cap output at 2,400 per hour. |
| 35% → 48% | Share of travelling robots no closer to their goal than 8 s earlier, at 214 and at 400 robots (two-way aisles, 10 seeded one-hour runs each). These are the grey tiles in the film and in the live view. |
| 0 collisions | In 4,775 seeded runs (21.2 million simulated steps, holding back 0 to 5% of planned moves at random), an independent checker found no robot sharing a cell, swapping places or jumping on any step. The planner and the execution rule exclude this by construction. |
| 0 deadlocks in 4,775 runs | Observed, not proven. After a 10-minute warm-up, no run had a 5-minute stretch without a completed pick. With the 6 s pick time no travelling robot stood still longer than 111 s. With 24 s pick times the worst was 316 s, a robot queueing for a busy station. The 4,775 runs include 35 runs of 10 simulated hours each at 400 robots. |
| 0.11 ms | Mean planning time per step for 400 robots (Node.js on an Apple M1 Pro laptop, during the sweep). The same code took 0.13 to 0.4 ms per step in desktop Chrome on that laptop. |
Stills
Try it live
An interactive view that runs in your browser. Nothing loads until you open it.