Working with PHP for this.
From a given set of items, each with its own weight, I need to automatically calculate the most effective way to package the items into 100 lbs packages (max package weight of 100 lbs is static, but can be changed in the future). A single package cannot exceed the maximum specified.
As an example, I have 5 items – with a total weight of 254 lbs:
- Item 1 -> 51 lbs
- Item 2 -> 28 lbs
- Item 3 -> 73 lbs
- Item 4 -> 51 lbs
- Item 5 -> 51 lbs
One would assume that 254 lbs would require 3 x 100 lbs packages. This example purposely demonstrates that this is not always the case. Certain item configurations could not work well together. This example would require 4 x 100 lbs packages in its optimal configuration.
The item count and weights are completely variable, and no single item will exceed 100 lbs.
What would be the most optimal way to achieve this?
The problem you are describing is called the Bin Packing Problem. No-one knows the optimal way to solve it. If they did they would be able to prove P=NP or P!=NP – one of the big open questions in computing.
The Wikipedia page includes references to some example algorithms – first fit algorithm, best fit decreasing, first fit decreasing. In general a fast way to solve this problem is to not attempt find the optimal solution, but to find a good approximation. The ‘decreasing’ refers to it being a good idea to start with packing the largest, most awkward elements first, and then fill the gaps with the small elements at the end. This is actually similar to how most humans typically approach this problem.
For the size of problem you gave in your example, it would be simple to find the optimal solution just by checking all the possible permutations, but obviously that won’t be very efficient for larger examples.