Each pick task arrives at a random pickup station on a Poisson process at the chosen rate. The scheduler assigns it with a greedy nearest-available-robot rule: among robots that are idle or heading home, it picks the one whose true shelf-grid shortest-path distance to the pickup (precomputed by breadth-first search from every cell) is smallest — not straight-line distance, since racks block direct paths.
Once assigned, a robot plans its route with time-expanded A* (also called cooperative A*): the search state is (cell, tick), not just cell, so the planner can see that a cell is free now but occupied two ticks from now, and route around it or insert a wait move instead. Every robot's committed path — and every parked robot's cell — is written into a shared reservation table; a robot moving into a cell another robot reserves at the same tick, or swapping cells head-on with another robot in the same interval, is rejected by the search outright. If no conflict-free route exists within the search budget, the robot waits one tick and replans (counted below).
f(cell,t) = g(cell,t) + h(cell) h = true BFS distance to goal
reject successor (cell',t+1) if reserved(cell',t+1) != none
reject if edge (cell,t)→(cell',t+1) reverses a reservation
- Robots — fleet size; more robots clear the queue faster but contend harder for shared aisles, so throughput does not scale linearly.
- Task arrival rate — how many pick tasks appear per minute; push it past what the fleet can clear and the pending queue grows without bound, exactly like an overloaded queueing system.
- Reserved paths — toggle whether the time-expanded reservation table is enforced; switch it off to see robots ignore each other and collide/overlap in the aisles.
Real-world relevance: this is the same three-layer stack — distance-based dispatch, single-agent pathfinding, multi-agent conflict resolution — that automated warehouse fleets (AGVs/AMRs) run to keep pick-and-place throughput high without gridlocking their own aisles.