Your line chief has just handed you a new style: 42 operations, a target of 480 pieces an hour, two hours before the line starts, a stopwatch, and a whiteboard. By 2 p.m. the line is at 78 percent efficiency, three stations are starving while WIP piles up in front of one bottleneck operator, and the floor manager wants to know why the "balanced" line isn't balanced.

This is a line balancing problem (which operation goes on which machine, in which order), and eyeballing it against a whiteboard is a bad way to solve one with 42 items and dozens of valid orderings. Line balancing linear programming solves that search the way a spreadsheet solver finds the cheapest shipping route: define the variables, write the constraints, let the solver find the assignment.

This article gives you the formulation, in notation you can type into Excel Solver or a short Python script, a worked example you can follow by hand, and where the math stops matching your floor.

The Decision You're Actually Making

There are two versions of the problem, and mixing them up is the single most common reason a "linear programming" line balancing exercise produces a number nobody can use.

Type 1 fixes your cycle time and asks: what is the minimum number of stations needed to hit it? This is the version taught in most operations research courses. Type 2 fixes your number of stations, because you have already hired 36 operators, and asks: what is the minimum cycle time achievable with that headcount? This is the version factories actually want, since manpower is a sunk cost by the time balancing happens. Decide which one you're solving before you write a single constraint, much as a two-machine job shop needs to settle its objective before applying something like Johnson's rule for sequencing jobs across two stages.

The Line Balancing LP Formulation

No proofs, no summation notation you need a textbook to parse: just the variables, the objective, and the four constraint families that do the actual work.

Decision variables: x[i,k] = 1 if operation i is assigned to station k, otherwise 0. C = cycle time in minutes per piece, the value being minimised.

Minimise  C

Constraint 1 (Completeness): every operation assigned to exactly one station
For every operation i:  sum over all k of x[i,k]  =  1

Constraint 2 (Capacity): no station's workload exceeds the cycle time
For every station k:  sum over all i of ( t[i] × x[i,k] )  ≤  C

Constraint 3 (Precedence): if a must happen before b, a's station ≤ b's station
sum over k of ( k × x[a,k] )  ≤  sum over k of ( k × x[b,k] )

Constraint 4 (Bounds):  x[i,k] ∈ {0,1}     C ≥ 0

Here t[i] is the SMV of operation i, drawn from a properly run standard minute value calculation, not a figure estimated for this exercise. That's the whole model: four constraint families, two variable types, one objective. It fits in an Excel Solver sheet with operations as rows and stations as columns, or in PuLP, Python's open-source LP library, in under 40 lines. For Type 1, flip the objective to minimising stations used, and Constraint 2 becomes a hard cap against the cycle time you were handed.

The Constraints Nobody Writes Down

Three more constraints need to go in before a solved solution survives the floor. Machine compatibility: an overlock operation cannot land on a flatlock station, so hard-fix x[i,k] = 0 for every incompatible pair before you solve. Skill matrix: a helper cannot be handed a precision topstitch on a customer-facing panel, so build a reusable skill matrix and zero out the same way. Zoning: a matching pair of topstitch passes shouldn't split across two stations because it doubles handling and creates a defect point, so enforce with x[i,k] = x[j,k]. Add these three and you remove most "the model is wrong" objections from the floor.

A Worked Example: Ten Operations, One Cycle Time

Full 42-operation models are hard to follow by hand, so here is a slice you can check with a calculator: the collar-and-neckline sub-assembly of a basic polo shirt, ten operations, real standard minute values. Precedence is a single chain, except 4 and 5, which can go in either order but must both finish before 6 begins.

#

Operation

SMV (min)

Must follow

1

Attach interlining to collar band

0.42

None

2

Fuse collar

0.35

1

3

Trim and turn collar

0.28

2

4

Topstitch collar edge

0.48

3

5

Mark collar point

0.15

3

6

Attach collar to neckline

0.62

4, 5

7

Understitch neck seam

0.38

6

8

Attach main label

0.22

7

9

Topstitch neckline

0.44

8

10

Trim thread and final inspect

0.18

9

Total content: 3.52 minutes. Target: 480 pieces in an 8-hour shift, so required cycle time = 480 ÷ 480 = 1.00 minute/piece. Minimum stations: 3.52 ÷ 1.00 = 3.67, rounded up to 4. Solving the model against the precedence chain above gives this assignment:

Station

Operations assigned

Station time (min)

Idle time vs. cycle

1

1, 2

0.77

0.23

2

3, 4, 5

0.91

0.09

3

6, 7

1.00

0.00

4

8, 9, 10

0.84

0.16

Line efficiency = total content ÷ (stations × cycle time) = 3.52 ÷ (4 × 1.00) = 88.0 percent. Balance loss is the remaining 12 percent, concentrated on stations 1 and 4, the mathematical floor for this SMV distribution and station count, not a rounding error or a supervisor's failure. Whether that idle time justifies adding a fifth station is a separate capital question, better answered with decision tree analysis for capacity investment decisions run against demand uncertainty than by re-solving this LP.

Reading the Balance Loss Number

On a full 42-operation polo shirt line with 36 stations and 18.6 minutes of total standard content, the theoretical minimum cycle time works out to roughly 0.517 minutes, a ceiling of about 116 pieces per hour. Solved against real precedence and machine constraints, the achievable cycle time lands closer to 0.55–0.58 minutes: 103 to 109 pieces per hour, a balance loss in the 7–10 percent range.

A well-constrained model should land inside that 7–10 percent band; if yours reports under 2 percent, distrust it before you celebrate it: that almost always means a precedence or machine-compatibility constraint was left out, not that you found a genuinely tighter line.

Field note: A denim-shirt line I audited in Chattogram showed a solver output of 96.4 percent efficiency, suspiciously high for 38 operations. The model had no zoning constraint, so it had split a matching double-topstitch pass across two stations to shave 0.02 minutes off cycle time. On the floor that created a bundle-move delay between stations. Actual output ran 11 percent below the model's prediction until we added the zoning rule and re-solved.

If predicted and actual output diverge by more than that band, the gap is rarely the balancing itself, but usually absenteeism, an unbalanced feed rate out of cutting (often solved with a kanban pull system linking cutting and sewing), or quality rework pulling pieces back into the line. Check those before re-running the solver.

Where Pure LP Breaks Down on the Shop Floor

High operator variability: above roughly 0.25 operator time coefficient of variation (common with mixed tenure and skill grades), the model gets optimistic, assuming every operator hits the average every cycle. Mixed-model lines: if two or three styles run through the same stations in one shift, a single-style LP is answering the wrong question. Machine changeover and absenteeism: the LP assumes every station is always staffed and ready, with no concept of a helper out sick or a changeover eating the first twenty minutes. No amount of extra constraints turns a static LP into a live simulation.

What Practitioners Actually Do Instead

The honest answer is not "abandon the LP." It's: use it to find the mathematical floor, then adjust by hand for what the model can't see.

  • Solve the LP first, with machine compatibility, skill matrix and zoning included: this gives the best-case assignment and the honest balance-loss number to expect.

  • Overlay a heuristic pass, most commonly the largest-candidate-rule: assign the longest remaining operation to the station with the most idle time first, respecting precedence. When the two roughly agree, trust the model; when they diverge sharply, a constraint is usually missing.

  • Rebalance on the worst-performing style, not the best, which flatters your method and hides where the line struggles.

  • Re-solve weekly for the first two weeks of a new style, then monthly once stable, since early learning curves shift real SMVs enough to change the optimal assignment.

  • Treat every solved model as a starting position for the supervisor, and track the resulting efficiency alongside your other floor metrics rather than as a one-off exercise.

Line Balancing LP: Setup Checklist

Step

What to check

Why it matters

Time study current

SMVs from the current style cycle, not stale data

Stale SMVs invalidate the model

Precedence mapped

Every "must follow" pair documented

Missing pairs inflate efficiency

Machine compatibility fixed

Incompatible operation-station pairs set to zero

Prevents unrunnable solutions

Skill matrix built

Operator grade vs. operation matrix, current

Prevents unqualified assignments

Zoning rules added

Paired operations forced to one station

Prevents hidden handoff delays

Balance loss in 7–10% band

Compare solved efficiency to benchmark

Under 2% signals a missing constraint

CV checked

Operator time CV under 0.25

Above this, deterministic LP is unreliable

Largest-candidate cross-check

Heuristic pass vs. solver output

Flags gaps before floor rollout

Re-solve schedule set

Weekly for two weeks, then monthly

Captures the learning-curve shift

Final Word

Linear programming will not balance your line for you. It will tell you, precisely and honestly, the best that an assignment of operations to stations can do, worth having because it replaces a whiteboard guess with a defensible target. The gap between that number and what your line actually runs is where the real management work starts, and no solver closes it for you.