Emballage 3D de marchandises en 0,3 secondes : Algorithme MaxRects avec LIFO et rotation complète
Un service web Django résout le problème d'emballage 3D de marchandises pour des flottes de camions, conteneurs et fourgons. L'algorithme traite plus de 400 références en 0,19 à 0,3 seconde, en tenant compte du LIFO, d'une surface de support de 90 % et de la rotation sur 6 axes. Une interface avec Three.js visualise les résultats en temps réel, prenant en charge les téléchargements Excel et la saisie manuelle.
Évolution d'un bot Telegram vers une plateforme complète
Le projet a débuté avec des moteurs d'optimisation : 0,4 seconde pour un problème du voyageur de commerce avec 10 000 points, moins d'une seconde pour l'emballage de formes complexes comme des trèfles. Un bot Telegram acceptait du JSON avec les dimensions et sortait des coordonnées, mais la vente au détail nécessitait une interface web.
Exigences clés du produit :
- Interface à deux panneaux pour la flotte et les marchandises.
- Analyse Excel avec validation.
- Visualisation 3D interactive avec Three.js.
Stack technique : Python/Django, PostgreSQL dans Docker, frontend avec Three.js. Priorité : vitesse et praticité — le LIFO compte plus que la densité parfaite.
Algorithme 3D MaxRects : La physique plutôt que les maths
Le 3D MaxRects modifié fonctionne avec une liste de parallélépipèdes libres dans l'espace de chargement, évitant l'énumération complète des coordonnées. La vectorisation offre des performances de 0,19 à 0,3 seconde pour une flotte de 8 véhicules.
Paramètres de faisabilité physique :
- Rotation complète (6 projections) : Les articles longs (2400 mm) essayent des positions verticales ou sur le bord si les dimensions le permettent.
- Surface de support 90 % : Les boîtes reposent sur la couche inférieure avec au moins 90 % de surface, éliminant les solutions instables.
- Ordre LIFO : La séquence de déchargement est prise en compte pour les entrepôts réels.
Comparaison du marché : les concurrents prennent des minutes ou des heures, ignorant souvent le LIFO et la physique.
Architecture : Django, Docker et évolutivité
Backend sur Django + PostgreSQL dans des conteneurs Docker. Nginx + Gunicorn (3 workers) assure la tolérance aux pannes. HTTPS sur le port 443 contourne les pare-feux d'entreprise. L'utilisation moyenne de la mémoire est de 29 % sur un serveur de 8 Go avec 400 références.
Autorisation via Django Auth : isolation des données par utilisateur, historique des calculs dans l'ORM. Chaque utilisateur ne voit que sa flotte et ses marchandises.
Interface : Saisie flexible et réglage fin
Disposition à deux panneaux séparant la flotte (droite) et les marchandises (gauche). Flotte : dimensions, capacité de charge, quantité. Marchandises : taille, poids, quantité, paramètres (LIFO, StackLimit).
Options de saisie :
- Formulaires manuels pour les ajustements.
- Téléchargement Excel par lots avec validation.
Cases à cocher d'optimisation :
- Inclinaison : Autoriser/restreindre la rotation pour les marchandises fragiles.
- Optimisation de la flotte : Prioriser le remplissage des gros véhicules pour minimiser les trajets.
Visualisation et exportation des résultats
Calcul en 0,19 à 0,3 seconde produisant une scène 3D avec Three.js. Codage couleur par référence, rotation interactive, vérifications LIFO et support. Export : rapports PDF ou Excel avec coordonnées X, Y, Z.
Déploiement en production
Gunicorn avec 3 workers + proxy inverse Nginx. Docker assure l'autonomie. Tests : couverture de 98 %, stabilité sous charge de plusieurs utilisateurs.
Points clés à retenir
- Vitesse de 0,19 à 0,3 seconde pour 400 références et 8 véhicules.
- Contraintes physiques : LIFO, support 90 %, rotation 6 axes.
- Interface pour la logistique : Excel, visualisation 3D, isolation des données.
- Stack de production : Django, Docker, Nginx/Gunicorn.
- Évolutivité : faible consommation de ressources.
— Editorial Team
Aucun commentaire pour le moment.