Ce git contient les solutions développées par Amine ROSTANE, Gaël GARNIER, et Augustin LOGEAIS dans le cadre du West Data Festival AI Challenge organisé par ESIEA x LUMINESS.
Notre approche hybride combinant MILP, recuit simulĂ©, et heuristiques gloutonnes nous a permis dâobtenir un score 48 % supĂ©rieur aux scores de rĂ©fĂ©rence du benchmark officiel.
| Fichier | Description |
|---|---|
greedy_simulated_annealing_4_48.py |
Recuit simulé + heuristique gloutonne, fonctionne pour les instances 4_*.json à 48_*.json. |
greedy_simulated_annealing_75_100.py |
Recuit simulé avancé pour les grosses instances 75_*.json à 100_*.json. |
hybrid_milp_greedy_simulated_annealing_4_48.py |
Combine MILP local + recuit simulé + heuristique pour les instances 4_*.json à 48_*.json. |
hybrid_milp_greedy_simulated_annealing_75_100.py |
Approche hybride MILP + métaheuristique pour les instances 75_*.json à 100_*.json. |
milp_exact.py |
Résolution exacte du problÚme par MILP pur (4_*.json). |
simplified_milp.py |
Version plus légÚre du solveur MILP, utilisable sur petites instances. |
script.py |
Contient la définition de la classe Instance, les contraintes et les fonctions de simulation. |
Ce projet utilise Python 3.9+ et les dépendances suivantes :
pip install pulp networkx numpy
đ DĂ©pendance principale :
pulpest utilisée pour la modélisation MILP.
Les scripts sont configurés pour exécuter les instances correspondant à leur nom.
Par exemple :
python hybrid_milp_greedy_simulated_annealing_4_48.py
Exécutera automatiquement tous les fichiers 4_*.json à 48_*.json présents dans le répertoire courant.
Pour changer les instances exécutées, il suffit de modifier le pattern glob.glob(...) dans la fonction main() en fin de fichier.
-
Certains algorithmes ne fonctionnent que sur une plage dâinstances donnĂ©e (ex:
hybrid_milp_*fonctionne mal au-delĂ de48_*.json). -
Les méthodes MILP sont trÚs performantes mais lentes sur les moyennes et grosses instances.
-
Nous avons utilisé des machines virtuelles Google Cloud C2 standard avec le solveur IBM CPLEX pour accélérer les résolutions.
Nos codes utilisent pulp.PULP_CBC_CMD() par défaut, mais vous pouvez activer CPLEX comme suit :
-
Installer IBM CPLEX (gratuit pour usage académique) :
-
Modifier la ligne suivante dans les fonctions MILP de nos fichiers :
solver = pulp.PULP_CBC_CMD(timeLimit=self.milp_time_limit, msg=0)Remplacez-la par :
solver = pulp.CPLEX_CMD(timeLimit=self.milp_time_limit, msg=0)đ Cette ligne se trouve dans la mĂ©thode
optimize_time_window_milp(...).
Pour toute question ou suggestion, vous pouvez nous contacter :
MIT License - Copyright (c) 2025 Amine ROSTANE