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.

The future

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.

Built With

Share this project: