Example for an optimal packing in a container or tote.
We made this tool for the Ocado bin packing challenge, which asks for the most efficient way to pack products.
The challenge starts with simple concepts like giving each order a separate tote (box), to a complex np-hard, phd-level challenge.
The way we solved this was to incrementally add features to our tool that allowed us to pass a certain criteria like the volume of the items and their weight, and then add new criteria such as cold and hot products segregation, like-wise for wet and dry, also for food and non-edible substances.
What we used
Since the beginning of this project we understood the need for high performance and optimization of this problem. In order to achieve our goals we started to study about C++ AMP (a gpgpu massive multiprocessing library) to greatly accelerate the processing of orders, and we have conducted various tests to confirm that. For example we ran a test where we multiplied two 2048x2048 matrices. On the CPU we couldn't get an answer even after a minute of waiting, but with the power of AMP we managed to get an answer in just 16 ms.
We used Kotlin to prototype our algorithms becase it's basically Java on steroids providing all the benefits of the JVM with much clearer and concise syntax. This allowed us to finish our algorithms in a timely manner, even though we couldn't implement all of them in AMP due to time constraints.
How to use our tool
To use our tool you provide an input of orders and you get a list of the orders and the totes required for each group of products.
We hope to be able to experiment more with this in the future and further our understanding of this problem and various other np-hard ones as well.