FForgeWorks

Measured, not asserted

What the optimiser actually achieves

Rebar software does not usually publish how good its cutting plans are. We do, because the plan is a heuristic rather than a proven optimum, and a quality claim you cannot check is not a quality claim. Every figure below is printed by the verification harness that runs before a release — including the cases where it does worst.

How this is measured

The harness loads the calculation kernel out of the shipped application — the same code that runs in your browser, not a reimplementation — and puts it against a brute-force exact optimum on randomised schedules. Brute force is branch-and-bound with an optimistic zero-waste bound, so it is only affordable on small schedules; where it runs, the comparison is against the genuine best answer that exists, not another heuristic. Larger schedules are bounded from above instead, and that is labelled where it happens. Seeds are fixed, so a run is reproducible.

Single stock length — the shipped default

Most rebar packages are cut from one stock length. Across 250 randomised schedules on 12 m bar with no kerf:

Hit the exact optimum96.40% of schedules
Mean gap from optimum1.40%
Median gap0.00%
95th-percentile gap0.00%
Worst case50.00%

The median and the 95th percentile are both zero: on the large majority of schedules the plan is not close to optimal, it is optimal. The worst case is real and is explained below rather than dropped.

Two stock lengths, and what the multi-pass selector bought

Offering 12 m and 15 m is harder than offering one length, because the optimiser must also choose which bar to open. An earlier build considered only the mixed stock list, which meant it opened the smallest bar that fit each piece and never chose a longer bar as a packing decision. It now packs each diameter several ways — the mixed list, each stock size on its own, and one mark per bar — and keeps the cheapest. Same schedules, same seed, one difference:

12 m / 15 m stockMixed list onlyShipped
Hit the exact optimum37.50%56.50%
Mean gap14.22%5.27%
95th-percentile gap33.33%15.38%
Worst case60.00%25.00%

Both arms run 200 schedules on an identical seed. The packing itself is unchanged between them — the only difference is how many candidate plans the selector is allowed to compare. That is why this is worth publishing: it is the measurement that decided the design, and it is repeatable on demand rather than remembered from a changelog.

The worst cases, and why they stay small

A 50% overshoot sounds alarming until you look at what produces it. The worst single-stock schedule in the run was six pieces where the optimum is 24000 mm — two 12 m bars — and the plan bought 36000 mm, which is three. One surplus bar.

That is the whole of it. On a schedule with two bars in it, one extra bar is fifty percent. The multi-stock worst case is the same shape of arithmetic: a nine-piece schedule where the optimum is 36000 mm and the plan bought 45000 mm, having opened 15 m bars where 12 m ones would have served.

The reason this cannot survive to bid scale is that the error is bounded in bars, not in percent. A surplus bar is a fixed cost; the schedule it sits in is not. The demo package buys 242 stock bars — one surplus bar there would be a fraction of one percent, and the measured gap on schedules of that size is smaller still. The percentages below are what the same optimiser does once a schedule is the size of a real rebar package:

Pieces in the scheduleBought more than a theoretically perfect pack
25–605.02%
150–4001.39%
600–1,2000.75%

A perfect pack is a plan with literally no waste — normally unachievable, since pieces rarely tile a bar exactly — so the true distance from the best reachable plan is smaller than these figures. They are an upper bound, and they fall as schedules grow. Publishing a worst case with its arithmetic is more use to a buyer than omitting it; the same reasoning is why the limitations are on the homepage.

Two things that hold by construction

Nesting never loses to cutting mark by mark

Cutting each mark from its own bars is what a yard does without software, so it is the only comparison worth quoting. Packing one mark per bar is one of the candidate plans the selector compares, which means the result can never be worse than that baseline — not usually, ever. Across 420 randomised schedules the harness counted 0 in which nesting bought more steel than the mark-by-mark baseline.

Adding a longer stock length never makes it worse

A sound optimiser given strictly more options cannot do worse, because the old solution is still available to it. Configuring 12 m and 15 m against 12 m alone, across 750 schedules: 0 worse, 431 identical, 319 better. Before the multi-pass selector this test was the one that failed — every schedule came out byte-identical to 12 m alone, which is how we knew the stock mix was being silently ignored.

The bar mass table

Every tonnage depends on mass per metre, so the table is checked against the standard nominal formula 0.0061654·d² — the 7850 kg/m³ basis that BS 4449 and ASTM bar tables are built on. Across every diameter the app carries, the worst deviation is 0.16%, and all of them sit within 0.5% of nominal.

This is a small check that catches a large class of error. A single wrong entry in that table would quietly bias every schedule that used the diameter, and no amount of optimiser quality would show it.

What this does not tell you

These are measurements of the cutting plan and the mass table, on randomised and demo schedules. They are not a warranty about your job. The gap on your package depends on your marks, your quantities and the stock your supplier actually carries, which is why the app shows you your own figures rather than quoting ours. Nothing here certifies the output for fabrication — the limitations are published in full, and a responsible engineer still verifies hooks, radii, laps and machine dimensions before anything is cut.

Open ForgeWorks and check your own schedule How the plan is chosen