Grid, time step and one robot per cell
The hall is a grid of 1.2 m cells. A robot crosses one cell per tick τ = 1.2 m / v (v = 1.5 m/s gives 0.8 s). At most one robot may occupy a cell at a tick, and two robots may not swap cells between ticks. Acceleration, turning time and the robot footprint are ignored, so speeds are slightly optimistic.
Space-time A* with a reservation table
A robot plans in the state space (cell, tick). Waiting costs the same as moving, so the cost is the arrival tick g = t. The heuristic h = d(cell, goal) is the free-flow breadth-first distance on the directed lane graph, which never overestimates, so the first goal state popped is time-optimal given the other robots. Every planned step is written into a table R[(cell,t)] = robot; later robots treat entries as obstacles (vertex conflicts) and refuse a move that exchanges positions with another robot (edge conflicts). The final cell is held until the robot plans its next leg. This is prioritised planning: it is fast and conflict-free by construction, but not complete. A robot can wait for a cell that a parked robot will only release after it has itself moved, so deadlocks are possible; they are suppressed by admission control at the stations, dead-end charging pockets, and a yield/tow fallback that is counted.
The "no reservations" option replaces this with a static shortest path and stop-if-blocked movement. Head-on meetings in one-wide aisles then deadlock until a timeout forces a detour. The counter shows how often.
Task assignment
Free robots are matched to pending tote requests by travel distance. FIFO gives the oldest task to its nearest robot, Greedy repeatedly takes the globally nearest pair, and Hungarian solves min Σ d(r,t(r)) exactly in O(n³), so its total pickup distance is never larger than the others'. Verified against brute force on 6×6 matrices.
Batching and slotting
Batching releases b orders together and merges their lines by shelf bay, so one tote visit can serve several lines (service time t₀ + t₁·lines). Demand per bay follows a Zipf law pk ∝ k-s (with about 200 bays, s = 0.8 puts 60 % of picks on the top 20 % of bays and s = 1.2 reaches the classic 80/20 Pareto split). ABC slotting sorts bays by round-trip distance to the stations and gives the fastest movers the closest ones. The demand-weighted mean round trip Σ pkdk is shown as a computed number and compared with the measured loaded travel.
Queueing: Little's law and the finite-source model
Little's law L = λW is an operational identity for any stable system: the time-average number of orders in the system equals the completion rate times the mean time in system. With N robots cycling between "travel and handling" (mean Z, treated as a delay) and S pick stations (service mean s, exponential), the probability of n robots at the stations is pn ∝ ∏k=1..n (N-k+1)/Z / (min(k,S)/s) and the throughput is X = Σ pn(N-n)/Z. It obeys the bounds X ≤ min(N/(Z+s), S/s); the two lines cross at the knee N* = S(Z+s)/s. Beyond N* extra robots only queue. Real aisles add congestion, so Z grows with N and the measured curve falls below the ideal one. The measured gap is the price of traffic.
Batteries
Robots charge at their dock when idle, and must recharge below the low threshold, so the available fraction of the fleet is about trun/(trun+tcharge) under heavy use. Defaults are compressed (tens of minutes) so the effect is visible; real AMRs run for hours.
What is simplified
Tote shuttles replace pod-lifting robots; every bay holds unlimited stock; picking is an arm cycle with sampled duration; orders arrive as a Poisson stream; one tote is moved per trip; no picking errors, no human zones, no wireless latency. Prioritised planning is one of several lifelong-MAPF approaches and gives no optimality guarantee for the whole fleet. Equipment is generic and not affiliated with any manufacturer.