3DPACK.ING searches for arrangements using simulated annealing. It starts from a workable arrangement and repeatedly makes one small random change — swap two boxes in the loading order, rotate one, move a stack — then keeps or discards it, and it will sometimes keep a change that makes the load slightly worse. The name is borrowed from metallurgy, where cooling a metal slowly lets its crystal structure settle somewhere lower-energy than quenching it ever would.
Accepting a worse arrangement sounds perverse, and the alternative is worse. A search that only ever improves walks into the first local optimum it meets and stops — typically a tidy-looking load with one awkward void it cannot undo, because undoing it means going backwards first. Tolerating a temporary loss is precisely what lets the search climb out of that void and find the arrangement on the far side of it.
There is no claim of optimality here, and there should not be. The solver returns the best arrangement it found within a fixed amount of search, and asking twice for the same load returns the same plan. What it does guarantee is feasibility: every plan it returns physically holds. Nothing intersects, nothing floats, nothing exceeds the payload, and nothing sits on a box you said could not bear it.
How the engine scores on the public Bischoff–Ratcliff benchmark
Call the same solver from your own code