Skip to content

How many pallets, against the fewest possible.

A density figure for one pallet is not what a freight bill depends on. This is: pallets used divided by the lower bound, over 8 generated orders of 240 cases in each of 6 profiles, packed by engine 0.5.0. Including the profile this engine is worst at.

Order profileMedianp90WorstDensityEvery pallet admissible
long_tail
A few large cases and a long tail of small ones, with dimension jitter.
2.67×2.67×2.67×41.6%yes
beverage
Few SKUs, similar heights, heavy — the easy case, and the common one.
1.33×1.33×1.33×80.0%yes
mixed_heights
The adversarial case: heights that do not divide into layers.
1.33×1.33×1.33×79.8%yes
ecomm
Many small SKUs, wide spread of shapes: high mix, low volume per line.
1.00×1.50×1.50×73.9%yes
heavy
Dense goods: the mass budget binds before the height does.
1.00×1.14×1.14×87.0%yes
fragile
A fragile third that may not be built on, which costs layers.
1.00×1.33×1.33×81.4%yes

What the ratio means

The bound is total volume and total mass over one pallet’s capacity, each rounded up. It assumes cases behave like a liquid, so no real plan can reach it — 1.00 is not a target, and a profile sitting at 1.00 means its bound was loose rather than that the packing was perfect. What the table is for is the spread: which kinds of order this engine handles tightly and which it does not.

The number we are worst at

long_tail — a few large cases and a long tail of small ones, with a few per cent of dimension jitter, so almost every case is a unique size. A layer packer is at its worst there: a layer is as tall as its tallest case, and with no two heights alike the waste compounds down the stack. It is on this page because leaving it off would make the other five numbers worthless.

What this does not measure

Any other software. This project has no access to a competitor’s results and will not invent them; the comparison is against the bound, which cannot be chosen to flatter anybody. Nor does it measure anything physical — no pallet in this benchmark has been built, wrapped, driven anywhere or lifted by a robot.

Run it yourself

pip install palletizer-full-stack
palletizer benchmark orders                 # this table
palletizer benchmark orders --format json   # every order, individually

The orders come from a seeded generator that uses only random.random(), so the same seed produces the same order anywhere. The published figures, the generator and the test that keeps them honest are all in the repository. Seeds: 11, 23, 37, 41, 59, 67, 73, 89.

The profiles are ours; your orders are not. Run one of your real ones and see which column you are in.

The engine is Apache-2.0 and unmetered on your own machines — what the hosted plans add is a signature only this service can make, state it keeps for you, and compute on its hardware.

Related: how the packers and the split work · what else is still wrong with this software