Fitting different mesh objects on a surface or in a volume

I am pretty new to grasshopper and I have been tasked with a seemingly very complicated problem, so I will be thankful for any suggestions you guys can give. I am looking to populate a surface or volume with a set of different objects, preferably mesh objects, while being able to set a tolerance between the objects and get an output for the amount of each of those objects that fit on the surface. Basically, this is to calculate how many specific products at given amounts I can fit on a shelf or on a wall without intersection.

Any direction would be helpful thank you.