web-dev-qa-db-fra.com

Comment puis-je déterminer par programme comment insérer des boîtes plus petites dans un emballage plus grand?

Quelqu'un connaît-il des logiciels ou des algorithmes existants pour calculer la taille d'un colis pour l'expédition de plusieurs articles?

J'ai un tas d'articles dans notre base de données d'inventaire avec des dimensions de longueur, largeur et hauteur définies. Compte tenu de ces dimensions, je dois calculer le nombre d'articles achetés qui iront dans des tailles de boîte prédéfinies.

48
polara

C'est un problème Bin Packing , et c'est NP-difficile. Pour un petit nombre d'objets et de packages, vous pourrez peut-être simplement utiliser la méthode de force brute pour essayer toutes les possibilités. Au-delà de cela, vous devrez utiliser une sorte d'heuristique. L'article de Wikipedia contient quelques détails, ainsi que des références à des articles que vous voudrez probablement consulter.

L'alternative, bien sûr, est de commencer avec un algorithme vraiment simple (comme simplement `` empiler '' des articles) et de calculer une limite supérieure raisonnable lors de l'expédition en utilisant cela, puis si vos emballeurs humains peuvent faire mieux, vous faites un léger profit. Ou réduisez légèrement vos prix calculés en supposant que votre emballage n'est pas idéal.

58
Nick Johnson

La littérature sur "l'emballage 3D Bin" est très vaste. Vous pouvez obtenir un bon aperçu en suivant les publications de Professeur David Pisinger . Il a également publié l'une des rares implémentations de haute qualité de l'emballage bin avec code source: dbpp.c

Ma propre boîte à outils logistique pyShipping est livrée avec une implémentation 3D Bin Packing pour les applications d'entreposage. Il implémente fondamentalement 4D Bin Packing (taille et poids 3D) et obtient une solution acceptable pour les tailles de commande typiques (quelques dizaines de packages) en moins d'un deuxième runtime. Il est utilisé en production (c'est-à-dire un entrepôt) depuis quelques mois maintenant pour déterminer la limite supérieure des caisses d'expédition à utiliser. Les employés d'entrepôt peuvent souvent emballer un peu plus efficacement, mais ça ne me dérange pas.

18
max

Pisinger est l'un des rares universitaires à publier code de travail . Dans un de ses articles, il mentionne le problème de la "profondeur minimale".

Voici un pratique et algorithme efficace pour l'emballage de boîtes rectangulaires 3D qui ajuste la hauteur de la boîte englobante.

Et voici une implémentation en php .

9
TomEE

Essayez-vous de voir combien d'un seul type s'intègre dans un package de taille particulière, ou essayez-vous également de mélanger des types?

On dirait que vous essayez de résoudre le problème de sac à dos . Vous pourrez peut-être trouver des algorithmes pour ceux qui pourraient être adaptés à vos besoins spécifiques. Comprenez simplement qu'il sera difficile de trouver un algorithme efficace, car le problème est NP complet (bien que, selon vos besoins spécifiques, vous puissiez trouver une approximation efficace, ou vos entrées peuvent être suffisamment petites pour que cela n’importe pas).

6
Herms

Si les boîtes doivent être emballées à la main, alors vous pourriez envisager d'écrire un algorithme qui ferait ce qu'un humain raisonnable ferait. La raison pour laquelle je suggère cela est que, à moins que vous ne vouliez imprimer des instructions d'emballage pour chaque commande, la personne qui fera votre emballage devra déterminer comment ils vont ranger les articles commandés dans le nombre de boîtes allouées pour le commande.

Cela pourrait alors conduire à vos emballeurs humains à venir SO demander comment s'entraîner par programme comment emballer n éléments dans m boîtes. :-P (Ils pourraient également demander vous = pour le faire, vous demander des instructions, etc.).

Tant que votre algorithme fait ce qu'un être humain raisonnable ferait, j'accepterais personnellement son estimation d'expédition.

4
freespace

Les métaheuristiques sont utiles pour traiter les problèmes réels d'emballage de bacs lorsqu'il existe de nombreux packages et/ou de nombreuses contraintes. Un open source Java est Drools Planner .

3
Geoffrey De Smet

Cela peut sembler évident, mais il pourrait être utile de mémoriser le problème, puis de le faire à la main. Trouver une solution la plus efficace pour les entrées et les boîtes arbitraires dans NP-hard, mais en restreignant l'espace du problème et en acceptant une certaine inefficacité, cette taille NP pourrait être raisonnable, et en mémorisant, vous pourriez être en mesure de réduire considérablement le temps de "cas commun".

Cela pourrait également aider à réfléchir aux choses en termes de hiérarchisation.

2
Gregg Lind

Après beaucoup de recherches, j'ai trouvé un référentiel GitHub qui pourrait aider quelqu'un. La fonction PackingService.Pack() prend la liste de Container et la liste de Item (s) à emballer en tant que paramètre et renvoie le résultat qui contient beaucoup d'informations, y compris

"conteneur (s) emballé (s) en pourcentage et liste des articles emballés et non emballés"

0
Ammar