Optimisation 3D haute performance : Architecture API et implémentation d'un bot Telegram pour la logistique
La logistique moderne fait face à des défis considérables en matière d'optimisation du fret, où chaque point de pourcentage d'efficacité impacte directement la rentabilité économique. Résoudre le problème de l'emballage 3D optimal pour des cargaisons de tailles diverses dans des espaces de conteneurs confinés est un défi majeur. Cet article explore l'architecture et l'implémentation pratique de l'API haute performance Skewer-v4, capable de traiter jusqu'à 500 000 articles par seconde, et son intégration dans une interface utilisateur via le bot Telegram Route Load Bot. Nous examinerons les aspects techniques, les technologies utilisées, l'évolution du projet, ainsi que les étapes clés de déploiement et de retour d'expérience.
De la logique vectorielle à l'emballage 3D : L'évolution de Skewer-v4
Le projet Skewer-v4 représente l'aboutissement de plusieurs itérations de développement visant à créer une solution efficace pour des défis logistiques complexes. Initialement, l'accent a été mis sur l'optimisation des itinéraires, menant au développement d'une logique vectorielle pour résoudre le Problème du Voyageur de Commerce (PVC), capable de traiter 10 000 points en 0,4 seconde. Cette base a permis une transition vers des tâches plus complexes.
L'étape suivante a impliqué la mise à l'échelle de la flotte, où le chargement de 100 000 conteneurs sur 12 navires a été simulé avec succès. En utilisant des workers Celery et FastAPI, le système a distribué 42 000 conteneurs en seulement 2 minutes, en tenant compte de contraintes cruciales telles que les limites d'empilement et l'ordre de déchargement Dernier Entré, Premier Sorti (LIFO). Cela a démontré le potentiel du calcul distribué pour les opérations logistiques à grande échelle.
L'apogée a été de se plonger dans ce qu'on appelle le « défi ultime » — l'emballage de cargaisons de tailles irrégulières. Ici, l'algorithme a été affiné pour prendre en compte le poids de chaque article, calculer le Centre de Gravité (CdG) et maintenir l'ordre de déchargement LIFO. Le résultat a été une performance sans précédent de 500 000 articles par seconde, positionnant Skewer-v4 comme un leader de l'emballage 3D à grande vitesse.
Architecture du Route Load Bot : Relier l'algorithme à l'utilisateur
Pour rendre le puissant algorithme Skewer-v4 accessible à un large public, le bot Telegram Route Load Bot a été développé. Il sert d'interface pratique à une logique complexe, permettant aux utilisateurs d'interagir avec le système via des fichiers JSON et de recevoir des visualisations 3D instantanées des résultats. L'ensemble du parcours de la requête, de la saisie de l'utilisateur à la livraison du résultat, est décomposé en plusieurs étapes clés :
- Initialisation et interface API : Les utilisateurs commencent à interagir avec le bot en utilisant la commande
/start, recevant des instructions et un lien vers la documentation Swagger. Cela souligne l'ouverture de l'API pour les développeurs et son intégration avec des systèmes logistiques tiers.
- Réception et validation des données : Les données d'entrée pour l'emballage sont fournies au format JSON (par exemple,
order.json). À ce stade, les schémas Pydantic jouent un rôle essentiel, garantissant une validation stricte des données. Tout paramètre incorrect, tel qu'une quantité nulle ou des dimensions négatives, est immédiatement rejeté, évitant une charge inutile sur le moteur de calcul principal.
- Noyau de calcul : Après la validation des données, le moteur principal Skewer-v4 est lancé, effectuant l'emballage 3D et les calculs d'équilibrage du Centre de Gravité (CdG). Une détermination précise du CdG est d'une importance capitale pour la sécurité du transport, car une répartition incorrecte du poids peut entraîner des accidents. Les résultats des calculs sont temporairement mis en cache dans Redis avec un TTL de 30 minutes, assurant un accès rapide pour la visualisation ultérieure.
- Retour d'expérience et métriques : L'utilisateur reçoit les métriques clés de l'emballage : l'efficacité d'utilisation du conteneur et le décalage du CdG. De plus, un lien interactif vers la visualisation 3D est fourni, ainsi que la possibilité d'évaluer la qualité de l'emballage sur une échelle de 1 à 5 étoiles. Ce système de feedback est un élément crucial pour l'entraînement et l'amélioration continue de l'algorithme, car les évaluations des utilisateurs aident à identifier les scénarios où l'algorithme pourrait produire des résultats sous-optimaux dans des conditions réelles.
- Visualisation 3D : La partie la plus intuitive du processus. Suivre le lien active une route FastAPI (
@app.get("/visualize/{task_id}")), qui récupère le calcul sauvegardé de Redis et rend le modèle HTMLvisualize.htmlen utilisant Jinja2. En conséquence, l'utilisateur reçoit un modèle 3D interactif complet du conteneur chargé, qui peut être pivoté et mis à l'échelle pour une analyse détaillée.
Aspects techniques et outils de développement
Le développement et le déploiement du Route Load Bot reposent sur une pile technologique moderne, garantissant des performances élevées, une fiabilité et une évolutivité :
- Python : Le langage de développement principal.
- FastAPI : Un framework web asynchrone haute performance pour la création d'APIs.
- Pydantic : Une bibliothèque pour la validation des données et la gestion des paramètres utilisant les annotations de type Python.
- Celery : Un système de file d'attente de tâches distribué utilisé pour les opérations asynchrones, telles que la mise à l'échelle de la flotte.
- Redis : Un magasin de données en mémoire haute performance utilisé pour la mise en cache des résultats intermédiaires et des sessions.
- PostgreSQL : Une base de données relationnelle pour le stockage persistant des données utilisateur, de l'historique des requêtes et des retours d'expérience.
- Alembic : Un outil de migration de base de données pour gérer les modifications de schéma PostgreSQL.
- Jinja2 : Un moteur de templating pour le rendu des pages HTML pour la visualisation 3D.
- Docker et Docker Compose : Des outils pour la conteneurisation et l'orchestration d'applications, assurant la portabilité et un déploiement simplifié.
- Nginx : Un serveur web utilisé pour le proxying des requêtes et la diffusion de fichiers statiques.
Défis et itérations du processus de développement
Le projet n'a pas été sans les complexités de développement typiques et a nécessité des itérations continues. Les développeurs ont rencontré plusieurs problèmes qui ont été résolus avec succès :
- Optimisation de l'algorithme d'emballage : Initialement, l'algorithme mettait davantage l'accent sur le poids, mais suite aux retours d'expérience, les priorités ont été modifiées : LIFO -> Largeur Maximale -> Longueur Maximale -> Poids. La rigueur des exigences de support de la cargaison a également été assouplie.
- Problèmes de visualisation et de CdG : Des erreurs dans la visualisation de la cargaison et le calcul du Centre de Gravité ont été identifiées et corrigées, nécessitant une intervention et des tests rapides.
- Interaction utilisateur : Une faible activité utilisateur au début du projet (malgré un nombre élevé de vues) a incité à la création d'un mode DÉMO. Ce mode permet de générer des véhicules et des cargaisons aléatoires, de les emballer instantanément et de fournir des liens vers la visualisation 3D et le JSON d'entrée. Cela a considérablement réduit la barrière à l'entrée pour les tests et les retours d'expérience.
- Problèmes de copie de JSON : Des difficultés ont été observées dans Telegram lors de la copie de structures JSON en raison du remplacement automatique des guillemets standard par des guillemets « intelligents », entraînant des erreurs. La solution a consisté à recommander le copier-coller par clic plutôt que la sélection manuelle.
- Surveillance et analyse : Pour mieux comprendre le comportement des utilisateurs, les champs
total_requestsetlast_actionont été ajoutés au modèle utilisateur, permettant de suivre l'activité du bot et l'efficacité de son utilisation. - Défis de déploiement : Lors du déploiement de Docker sur un serveur de production, des « pièges » courants sont apparus, tels que les limites de Docker Hub pour les téléchargements d'images anonymes.
Exemple d'exécution de migration et de déploiement :
rsync -avz --delete --exclude '.venv' --exclude 'venv' --exclude '**pycache**' --exclude '.git' --exclude '.env' --exclude '.pytest_cache' --exclude '.vscode' --exclude 'backup' --exclude '*.json' --exclude 'pytest.ini' --exclude 'instruction.md' /home/andreymazo/Projects/skewer_api/ root@your_server_ip:/root/your_root_directory/
docker exec -it skewer_engine_v4 alembic upgrade head
docker compose up -d --build app_container_name
docker logs -f skewer_engine_v4
Points clés à retenir
- Algorithme haute performance : Skewer-v4 offre un emballage 3D jusqu'à 500 000 articles/sec, en tenant compte du poids, du CdG et du LIFO.
- Architecture complète : Le projet comprend une API FastAPI, la mise en cache Redis, le stockage de données PostgreSQL, la validation Pydantic et la visualisation 3D Jinja2.
- Accessibilité via Telegram : Le Route Load Bot offre une interface conviviale pour interagir avec l'algorithme, incluant un mode DÉMO et une visualisation 3D.
- Développement itératif : Amélioration continue basée sur les retours des utilisateurs et résolution des défis techniques de déploiement.
- Potentiel économique : L'optimisation du fret à l'aide de tels systèmes peut générer des économies substantielles pour les grandes entreprises de logistique.
— Editorial Team
Aucun commentaire pour le moment.