# The 3D Printer Packing Problem

Form Labs recently announced the launch of the Fuse 1, a desktop SLS printer that will print all your parts using nylon powder and a laser. This a fundamentally different method of 3D printing as compared to filament-based machines, and the best way to use a Fuse 1 is to fill the entire volume of the machine with 3D printed parts. [Michael Fogelman] decided to investigate the 3D packing problem, and managed to fill this printer with the maximum number of 3D printed tugboats. If you’re wondering, it’s 113, as compared with 82 tiny Benchies using naive bin packing.

The formal definition of this sort of problem is the bin packing problem, or simply calculating the maximum number of items can be packed into a finite volume. There is no general solution to this problem, and it’s probably impossible to create an algorithm that will solve this problem for any collection of 3D models. Nevertheless, it’s possible to create a solution that shows marked improvement over a naive solution.

[Michael]’s solution involves simulated annealing. This algorithm begins by randomly placing tugboats, then mutating the position or rotation of one of the boats for each iteration. The code is less than 1000 lines of Go and is available on GitHub if you already have an SLS printer at your disposal.

It should be noted this type of problem isn’t particularly new to the world of 3D printers. There have been a few tools to solve the bin-packing problem for filament-based printers, but the solutions to these problems are two-dimensional; since filling a bed is a problem that only uses the ‘shadow’ of the Z-axis of each part, it’s a slightly easier problem to solve.

Now that Form Labs’ Fuse 1 SLS printer has been announced, there is a new application for this type of problem in the space of 3D printers. It’s not a perfect solution — and it’s doubtful there will ever be a perfect solution — but if you’re looking for a way to fill the volume of your powder printer with parts, this is the best you’re going to do.