Popis: |
Un ordonnancement est défini comme étant une allocation, dans le temps, des ressources (machines) disponibles aux différents travaux (tâches, jobs) à réaliser, dans le but d'optimiser un ou plusieurs objectifs. La richesse de la problématique de l'ordonnancement est due aux différentes interprétations que peuvent prendre les ressources et tâches. Ainsi, les ressources peuvent être des machines dans un atelier, des pistes de décollage et d'atterrissage dans un aéroport, des équipes dans un terrain de construction, des processeurs dans les ordinateurs, etc. Les tâches, quant à elles, peuvent être des opérations dans un processus de production, le décollage et l'atterrissage dans un aéroport, les étapes d'un projet de construction, l'exécution d'un programme informatique, etc. Les différentes tâches sont caractérisées par un degré de priorité et un temps d'exécution. Les ressources, quant à elles, sont caractérisées entre autres par une capacité, des temps de réglage, etc. Les problèmes d'ordonnancement sont généralement classés en deux modèles dépendamment du nombre d'opérations que requièrent les jobs: les modèles à une opération (modèle à machine unique et modèle à machines parallèles) et les modèles à plusieurs opérations dits modèles en ateliers (flow-shop, open-shop et job-shop). Bien entendu, il est également possible de trouver d'autres modèles, hybrides, qui sont des mélanges de ces deux modèles. Cette classification a permis, un tant soit peu, de mieux comprendre et cerner les problèmes d'ordonnancement réels. Toutefois, l'expérience a montré qu'il existe toujours un gouffre entre la théorie et ce qui se passe réellement dans les centres de production ou les prestations de services. Parmi les contraintes que la théorie d'ordonnancement n'a pas considérées jusqu'à un passé récent, nous pouvons citer les temps de latence des travaux, correspondant aux différents temps nécessaires devant s'écouler entre la fin d'une opération et le début de la prochaine opération d'un même job. Les temps de latence peuvent correspondre par exemple aux temps de transport des jobs à travers les ressources ou encore aux temps de refroidissement des jobs, avant leurs prochaines manipulations. Ces temps peuvent dans certains cas prendre des proportions importantes qu'une entreprise ne doit en aucun cas ignorer. Elle devrait même revoir sa politique d'ordonnancement pour pouvoir améliorer sa productivité. Dans ce mémoire, nous étudions le modèle de flow-shop à deux machines avec des temps de latence dans le but de minimiser le temps total d'accomplissement des jobs, appelé makespan. Pour ce faire, nous avons, tout d'abord, introduit la théorie de l'ordonnancement et survolé quelques concepts de la théorie de la NP-complétude ainsi que les différentes méthodes de résolution d'un problème d'ordonnancement en général, et du flow-shop à deux machines en particulier. Pour résoudre ce problème de flow-shop à deux machines, nous avons utilisé, dans un premier temps la méthode de branch and bound. Nous avons commencé par appliquer cet algorithme sur le cas particulier des temps d'exécution unitaires. Outre les bornes inférieures et supérieures, nous y avons également présenté des règles de dominance. Limité à 900 secondes, pour l'exécution d'une instance, cet algorithme a pu résoudre efficacement des instances n'excédant pas 30 jobs. Ensuite, nous sommes passés au cas où les temps d'exécution des jobs sont quelconques. Nous y avons présentés plusieurs bornes inférieures. Pour les bornes supérieures, nous avons conçu des heuristiques basées sur NEH, la règle de Johnson, la règle de Palmer et CDS. Au-delà de 10 jobs, l'algorithme de branch and bound, que nous avons implémenté, n'a pu résoudre efficacement les instances générées, même en posant 1h d'exécution pour chaque instance. Notons que les temps d'exécution des algorithmes, implémentant ces bornes inférieures et supérieures ainsi que ceux des règles de dominance, pour le cas unitaire, sont tous majorés par une complexité enO(n log n); n étant le nombre de jobs à ordonnancer. Dans un second temps, nous sommes passés à l'autre approche de résolution qu'est la méthode métaheuristique. Nous avons commencé notre étude par le développement d'un algorithme de recherche avec tabous. Des ajouts itératifs tels des procédures d'intensification et de diversification ont nettement amélioré les résultats générés par cet algorithme. Ensuite, nous avons conçu un algorithme génétique. Nous y avons incorporé une recherche locale pour améliorer les résultats. Cependant, l'algorithme de recherche avec tabous a produit de meilleurs résultats sur l'ensemble des instances testées. En guise de conclusion, nous avons discuté de nouvelles pistes de recherche à explorer. |