Implementation of the Late Acceptance Hill Climbing metaheuristic for unrelated parallel machine scheduling problems with release dates and sequence-dependent setup times (R|rⱼ, sᵢⱼₖ|Cₘₐₓ).
Pour plus d'informations, consulter le rapport complet: Rapport
- Java 11 ou supérieur avec JavaFX (le projet utilise Zulu JDK 25 qui inclut JavaFX)
- Terminal/ligne de commande
cd LAHC-ParallelMachineScheduling
./build.shL'interface graphique s'ouvre automatiquement.
./main.shCompile et exécute le programme en mode console avec une instance aléatoire.
./tests.shDonne la possibilité d'exécuter les tests unitaires.
Trois options disponibles dans le menu déroulant :
- Instance aléatoire : Génère automatiquement une instance avec 5-10 jobs et 2-4 machines
- Depuis un fichier : Charge l'instance depuis
resources/Instance.txt(format spécifique) - Entrée manuelle : Non implémenté actuellement
- Cliquez sur "Lancer la résolution"
- L'algorithme s'exécute (généralement < 1 seconde pour petites instances)
- Les résultats apparaissent dans la zone de texte :
- Nombre de jobs et machines
- Makespan final (temps total de production)
- Ordonnancement par machine
- Après résolution, le bouton "Afficher le Gantt" devient actif
- Cliquez dessus pour ouvrir une nouvelle fenêtre
- Le diagramme montre :
- Blocs gris hachurés : temps de setup (préparation entre jobs)
- Blocs colorés : temps de traitement des jobs
- Blocs blancs pointillés : temps d'inactivité (attente de release date)
- Flèches colorées : dates de release (rⱼ) des jobs
- Légende : correspondance couleur-job
Dans MainFX.java, lignes 73-74 :
int randomJobNumber = 5 + (int)(Math.random() * 6); // 5-10 jobs
int randomMachineNumber = 2 + (int)(Math.random() * 3); // 2-4 machinesAjustez les valeurs pour tester différentes tailles d'instances.
Dans algo/metaheuristic/LAHCMetaheuristic.java :
private int historyLength; // Taille de la liste L (défaut: jobs × machines)
private int maxIterations; // Nombre max d'itérations sans améliorationAugmenter historyLength → plus d'exploration mais plus lent
Augmenter maxIterations → potentiellement meilleures solutions mais plus long
Le fichier resources/Instance.txt suit ce format :
<nombre_jobs> <nombre_machines>
<p_00> <p_01> ... <p_0m> # Temps de traitement job 0
<p_10> <p_11> ... <p_1m> # Temps de traitement job 1
...
<r_0> <r_1> ... <r_n> # Release dates
<s_000> <s_001> ... # Setup times (matrice 3D aplatie)
Voir utils/InstanceReader.java pour le parsing détaillé.
- Vérifiez que JavaFX est installé :
java --list-modules | grep javafx - Utilisez un JDK qui inclut JavaFX (Zulu, Liberica, Bellsoft)
- Recompilez :
rm -rf bin && ./gui.sh - Vérifiez que tous les fichiers .java sont présents
- Vérifiez que
Schedule.calculateSchedule()utilise bien la version corrigée (setup ne peut pas commencer avant release date)
Tester sur des instances spécifiques :
- Créez un fichier dans
resources/ - Modifiez
MainFX.javaligne 68 pour pointer vers votre fichier - Sélectionnez "Depuis un fichier" dans l'interface
Pour toute question sur l'implémentation ou l'utilisation du code, référez-vous aux commentaires dans le code source ou consultez le rapport complet du projet.
Version : 1.0
Dernière mise à jour : Octobre 2025
Testé sur : macOS (Intel), Java 25 + JavaFX