t = 0 sBottleneck: -
Loading Blender model...

Robot Assembly Line: Throughput, Bottleneck and Queueing

Four robot-arm stations in series (Load, Weld, Paint, Test). Jobs arrive randomly, wait on the conveyor in finite buffers, get blocked when the next buffer is full, and robots break down. Drag to orbit the view.

Presets

Line settings

Live results

Work in progress over time

WIP nowtime average LJackson prediction

Where each robot spends its time

workingblockedbrokenmaintenanceidle (starved)

Experiment: does the simulator match queueing theory?

Runs three independent checks without drawing: (1) one robot as an M/M/1 queue at four loads, (2) three robots in series against Jackson's product form, (3) a failure-prone line pushed past capacity against the effective-service-time bound.

The science

Queue at one station. With Poisson arrivals of rate λ and exponential service of mean s = 1/μ, utilisation is ρ = λs. The M/M/1 queue has closed forms:

L = ρ/(1-ρ)   W = s/(1-ρ)   Lq = ρ²/(1-ρ)

Both blow up as ρ → 1: at 90 % load a job spends ten service times in the system, at 99 % a hundred.

Little's law. For any stable system, L = λeff W (mean WIP = throughput x mean time in system), regardless of distributions. The Little check tile compares the two sides measured independently.

Variability. Kingman's heavy-traffic formula for one station: Wq ≈ [ρ/(1-ρ)] x [(ca² + cs²)/2] x s so halving the service-time CV (exponential 1 → Erlang-4 0.5) cuts the waiting by 37 % at equal load. It is an approximation for general (G/G/1) queues; the exact Pollaczek-Khinchine result for Poisson arrivals is Wq = ρs(1+cs²)/(2(1-ρ)).

Series line. With infinite buffers and exponential service, departures of an M/M/1 queue are again Poisson (Burke), so each station is an independent M/M/1 with the same λ (Jackson): L = Σ ρi/(1-ρi). The green line appears only while those assumptions hold (exponential times, infinite buffers, no failures).

Bottleneck and capacity. The line can never output more than the slowest station allows: Xmax = 1 / maxi seff,i. Making any other robot faster does not change throughput, it only moves where jobs wait. A bottleneck is the station with the highest working fraction; the station just before it is often blocked and the ones after it starved.

Failures. Breakdowns here strike only while a robot is working (rate 1/MTBF of working time) and repair takes an exponential time of mean MTTR. The expected occupation time of a job is exactly seff = s (1 + MTTR/MTBF), so availability is MTBF/(MTBF+MTTR) in the long run. Preventive maintenance trades planned stops for fewer failures; here it reduces the failure rate 4-fold (an assumption, not a measured value) and costs 10 s per 150 s of work.

Finite buffers. Blocking-after-service: a finished job stays on the robot until the next buffer has room, so a full buffer passes the stall upstream. Larger buffers cushion randomness and failures but raise WIP and cycle time (Little's law again). Jobs arriving to a full first buffer are lost.

Simplifications. Single server per station, one job type, FIFO, travel time on the conveyor ignored (it is drawn, not simulated), exponential repairs, arrivals Poisson. The 3D arm motion is a visual of the service progress, not a robot dynamics model. The experiment tab uses 1 to 3 million simulated seconds so that its statistical error is of the order of 1 %.

Made with 🟠 Blender · Three.js