Facility Layout & Assembly Line Balancing

Arranging work for smooth flow. Learn layout types (process, product, cellular, fixed-position), from–to charts and load–distance analysis, systematic layout planning (SLP) and relationship charts, material handling, cycle/takt time, precedence diagrams, line balancing heuristics (largest candidate rule, ranked positional weight), efficiency and balance delay, mixed-model lines and U-lines — with Python balancing an 8-task line.

Layout determines how far materials and people travel, how visible problems are, and how much WIP piles up between steps. Moving from a functional layout to a product-flow or cellular layout often cuts lead time by 50–90%.

On assembly lines, work must be divided among stations so each finishes within the takt time set by customer demand. Line balancing assigns tasks to stations while respecting precedence, minimising the number of stations and idle time.

An analogy

Line balancing is like dividing chores among housemates so everyone finishes at about the same time: if one person has much more to do, everyone else waits (the bottleneck) and the household's pace is set by the slowest.

Layout types

Choose by volume and variety:

Designing layouts

Collect product–quantity data and routings; build from–to charts of material flows; evaluate layouts by load × distance; use systematic layout planning (SLP) with activity relationship charts (A, E, I, O, U, X closeness ratings) and space requirements; iterate with block layouts, then detailed layouts including aisles, handling equipment (conveyors, AGVs, forklifts) and safety.

Line balancing

Compute takt time from demand; draw the precedence diagram; assign tasks to stations without exceeding the cycle time or violating precedence; aim for the minimum number of stations and balanced loads. Measure efficiency and balance delay. If a single task exceeds takt, parallel stations or task redesign are needed.

Advanced line design

Mixed-model lines build several variants with sequencing to smooth workload (heijunka); U-shaped lines let operators tend stations on both sides, improving balance and flexibility; buffers decouple stations with variable times; stochastic task times require lower target loads; SALBP/ALBP integer programs optimise; simulation validates throughput under breakdowns and variability.

Formulas

Worked example: Takt time

Given: 450 min available, demand 300 units

Find: Takt.

Answer: 1.5 min/unit

Worked example: Minimum stations

Given: Σt = 7.2 min, C = 1.5 min

Find: N_min.

Answer: 5 stations

Worked example: Load–distance

Given: Flows 100 trips at 30 m, 40 trips at 50 m

Find: LD score.

Answer: 5000 trip-m (compare alternatives)

Largest-candidate-rule line balancing

import math
# Assembly line balancing with the largest-candidate rule
tasks = {"A": (0.20, []), "B": (0.40, ["A"]), "C": (0.70, ["A"]), "D": (0.10, ["B"]),
         "E": (0.30, ["B", "C"]), "F": (0.50, ["C"]), "G": (0.40, ["D", "E"]), "H": (0.30, ["F", "G"])}
demand_per_shift, shift_min = 420, 420
cycle = shift_min / demand_per_shift              # takt time, min/unit
total = sum(t for t, _ in tasks.values())
print(f"takt time {cycle:.2f} min, work content {total:.2f} min, theoretical min stations {math.ceil(total/cycle)}")
done, stations = set(), []
while len(done) < len(tasks):
    load, st = 0.0, []
    while True:
        cand = [k for k, (t, pre) in tasks.items() if k not in done and all(p in done for p in pre) and load + t <= cycle + 1e-9]
        if not cand: break
        k = max(cand, key=lambda k: tasks[k][0])
        st.append(k); done.add(k); load += tasks[k][0]
    stations.append((st, load))
for i, (st, load) in enumerate(stations, 1):
    print(f"station {i}: {'+'.join(st):7s} load {load:.2f} min, idle {cycle-load:.2f}")
eff = total / (len(stations) * cycle)
print(f"{len(stations)} stations, line efficiency {eff*100:.1f}%, balance delay {(1-eff)*100:.1f}%")
# takt time 1.00 min, work content 2.90 min, theoretical min stations 3
# station 1: A+C     load 0.90 min, idle 0.10
# station 2: F+B+D   load 1.00 min, idle 0.00
# station 3: E+G+H   load 1.00 min, idle 0.00
# 3 stations, line efficiency 96.7%, balance delay 3.3%

The heuristic reaches the theoretical minimum of 3 stations with 96.7% efficiency. At each step it picks the longest task whose predecessors are done and which still fits. Other heuristics (ranked positional weight, Kilbridge–Wester) or integer programming handle harder instances; real lines also consider zoning, tools and ergonomics.

Common mistakes

Applications

Key takeaways

Going further