Gompels Warehouse — Racking Layout Optimiser

Packed right→left from the right wall (datum). Racks alternate with aisles along the length (6 m pillar axis); each rack run spans the full width. Goal: maximise rack rows with every pillar out of the aisles.

Building footprint

Right wall (datum)

Gap behind the single rack against the right wall (200–500 mm).

Racking (fixed kit)

Back-to-back block 2d + f = m  (storage 2d = m)

Aisles

Aisles vary freely in [amin, amax]. Keep ≤ 3 m unless it adds rows.

Pillars

Grid spacing (long axis) P₀ m
Down-run spacing Py m

Optimiser

0 = max racking (remove pillars freely). Higher = keep more pillars (less steel, maybe fewer rows). Removal pattern is chosen automatically per pillar.
double rack (d each side) single rack (right wall) flue gap (f) aisle (labelled, m) pillar kept (in rack) ✓ pillar removed (costs steel)
1-D cross-section — long axis (right wall at right)

Racking ↔ steel frontier (rows achievable per number of pillars removed, current kit)

Pillars removedRack rows RRack-fill %Total rack run
Model & packing rule

Module. Double block depth = 2d + f (two racks + flue), then an aisle a ≥ a_min. A pillar is "safe" anywhere inside the block (rack or flue). The rightmost rack is single-depth (d), flush to the right wall behind a gap c_R.

Ceiling. rack-fill_max = 2d/(2d+f+a_min); storage counts only the 2d, the flue is dead space. R_max = (L − c − c_R + a_min)/(2d+f+a_min). Independent of width W_y (it cancels).

Pillar capture. A pillar (full width w_p) may sit anywhere inside a block — it can touch the aisle edge, it need not be centred. If a pillar ends up in an aisle it is removed (a costed choice), not a violation.

Optimiser (dynamic program). Sweeping right→left on a 5 cm grid, the DP chooses every block position and every aisle width in [a_min, a_max] to maximise rows + λ·(pillars kept). So aisles vary, the keep/remove pattern is chosen per pillar (any mix of 6/12/18/24 m spans), and λ trades racking against saved steel. The "frontier" table above is this DP swept over λ.

Scenario presets (click to apply — results computed live)

Fixed: d = 1.1 m, amin = 2.05 m, flue per scenario, clearances 0.30 m, single rack at the right wall, 6 m pillar grid, L = 132 m, W = 108 m. The optimiser chooses aisle widths and the per-pillar keep/remove pattern automatically. Rows and pillars removed below are computed live.

ScenarioFlueRack-fillRowsRemoved

Read of it: at the preferred 300 mm flue the optimiser reaches the ~29-row ceiling but must remove several pillars to do it; raise λ to trade a row or two for far fewer removals. Dropping the flue to 250 mm gives the same racking for fewer removals — the single best lever. Use the frontier table above to read exactly how many pillars you must pull for each row count, then pick the point that justifies the steel.