Luego de de nuestra extensa selección de información dimos con la solución esta problema que tienen muchos de nuestros usuarios. Te brindamos la respuesta y nuestro deseo es que sea de gran ayuda.
Solución:
Este es un problema de Bin Packing y es NP-difícil. Para una pequeña cantidad de objetos y paquetes, es posible que pueda simplemente usar el método de fuerza bruta para probar todas las posibilidades. Más allá de eso, deberá usar algún tipo de heurística. El artículo de Wikipedia tiene algunos detalles, junto con referencias a documentos que probablemente desee consultar.
La alternativa, por supuesto, es comenzar con un algoritmo realmente simple (como simplemente ‘apilar’ artículos) y calcular un límite superior razonable en el envío usando eso, luego, si sus empacadores humanos pueden hacerlo mejor, obtendrá una pequeña ganancia. O descuente ligeramente sus precios calculados en el supuesto de que su embalaje no es ideal.
La literatura sobre “embalaje de contenedores 3D” es amplia y extensa. Puede obtener una buena visión general siguiendo las publicaciones del profesor David Pisinger. También publicó una de las pocas implementaciones de alta calidad de bin packing con código fuente: 3dbpp.c
Mi propio kit de herramientas de logística, pyShipping, viene con una implementación de embalaje de contenedores en 3D para aplicaciones de almacenamiento. Básicamente, está implementando Bin Packing 4D (tamaño y peso 3D) y obtiene una solución aceptable para tamaños de pedidos típicos (unas pocas docenas de paquetes) en menos de un segundo tiempo de ejecución. Se utiliza en producción (es decir, un almacén) desde hace algunos meses para determinar el límite superior de las cajas de envío que se utilizarán. Los trabajadores del almacén a menudo pueden empacar un poco más eficientemente, pero eso está bien para mí.
Pisinger es uno de los pocos académicos que publica código de trabajo. En uno de sus artículos menciona el problema de la “profundidad mínima”.
Aquí hay un algoritmo práctico y eficiente para el embalaje de cajas rectangulares 3D que ajusta la altura de la caja envolvente.
Y aquí hay una implementación en php.