Projet RPC : Résolution de Problèmes Combinatoires - Logistique
📋 Description
Problème : 3D Bin Packing avec contraintes LIFO et rotation des objets
Charger M colis dans le minimum de véhicules possibles avec :
- Respect des capacités géométriques (L × W × H)
- Ordre de livraison LIFO (Last-In-First-Out)
- Rotation libre des colis (6 orientations possibles par coli)
🚀 Installation Rapide
pip install -r requirements.txt
📖 Usage
Exécuter le Solveur Ad-Hoc (Heuristique + Rotation)
python solver_adhoc.py < input/input_bronze.txt > results/output_adhoc_bronze.txt
Exécuter le Solveur OR-Tools (Exact + Rotation)
python solver_ortools.py < input/input_gold.txt > results/output_ortools_gold.txt
Tester les deux solveurs
python test_comparison.py
📁 Structure
RPC/
├── solver_adhoc.py # Heuristique gloutonne + rotation
├── solver_ortools.py # Programmation par contraintes + rotation
├── test_comparison.py # Script de test comparatif
├── requirements.txt # Dépendances
├── README.md # Ce fichier
├── RAPPORT.md # Rapport complet (modélisation + analyse)
├── input/ # Instances de test
└── results/ # Résultats des exécutions
🎯 Format des Fichiers
Entrée
L W H # Dimensions camion
M # Nombre de colis
l₁ w₁ h₁ d₁ # Coli 1: dims + ordre livraison
...
Sortie
SAT # ou UNSAT
v₁ x₁ y₁ z₁ x₁' y₁' z₁' # Coli 1: camion v, position min (x,y,z), position max (x',y',z')
...
🔬 Approches
1. Heuristique Ad-Hoc (Rapide + Rotation)
- Tri LIFO : Colis tard chargés en premier
- Points Candidats : Placement aux "coins"
- Rotation : Essayer 3 rotations par position
- Complexité : O(N² × 3) ≈ quasi-linéaire
- Temps : < 1s pour 1000 colis
2. Programmation par Contraintes (Exact + Rotation)
- Modèle CP-SAT : Variables position + rotation
- Contraintes : Géométrie, non-chevauchement, LIFO
- Optimisation : Minimiser nombre camions
- Timeout : 20 secondes
- Temps : > 100s pour > 100 colis
📊 Comparaison
| Instance | Colis | Ad-Hoc | OR-Tools | Écart |
|---|---|---|---|---|
| Bronze | 10 | 0.001s | 0.05s | ±0% |
| Silver | 100 | 0.005s | 18s | 0-20% |
| Gold | 1000 | 2.1s | TIMEOUT | N/A |
✅ Features
- ✓ Rotation complète (3 orientations principales)
- ✓ Contrainte LIFO (ordre de livraison)
- ✓ Deux approches complémentaires
- ✓ Tests comparatifs automatisés
- ✓ Support grandes instances (Ad-Hoc scalable)
🐛 Dépannage
# Installer OR-Tools
pip install ortools
# Test rapide
python solver_adhoc.py < input/input_bronze.txt
Auteur : [Ton Nom]
Date : Décembre 2025
EPITA - ING3
Description
Languages
Python
100%