Actes (CD-Rom) de ROADEF 2003, Avignon, Février 2003, résumé pp.245-246. Génération de Programmes de Travail par un Algorithme de Listes Jean-Claude Hennet, Carmen V. Draghici, Frédéric Py LAAS-CNRS, 7 avenue du Colonel Roche, 31077 Toulouse Cedex 4 Mots-clefs : optimisation combinatoire, problème de bin-packing, algorithme de listes 1 Introduction Le problème considéré consiste en la construction de programmes de travail, qui peuvent être des journées de travail (vacations) ou des séquences d’activités (rotations), à partir de tâches à horaire le plus souvent imposé. Ce problème se rencontre fréquemment dans les professions aéronautiques et aéroportuaires, comme première étape de la construction du planning de travail pour le personnel au sol (affectation des vacations) et pour le personnel navigant (affectation des rotations). Dans ces deux cas, les tâches de travail à horaire imposé sont préalablement déterminées par la programmation des vols. Dans cette présentation, nous nous intéressons principalement au problème de génération de vacations pour le personnel au sol. Ce problème est du type "bin-packing" [1], avec des contraintes additionnelles, liées en particulier au non-chevauchement des tâches au sein d'une vacation et aux contraintes réglementaires sur la structure des vacations (existence de pauses ou de coupures). Le caractère fortement contraint du problème de génération de vacations conduit à privilégier une approche heuristique reposant sur un algorithme de listes. L’approche de modélisation retenue repose sur le concept de plage horaire. Ce concept permet une représentation générique des tâches et des vacations et une gestion logique des relations temporelles par l'intermédiaire d'une algèbre d'intervalles [2] 2 L'approche par plages horaires Les plages horaires sont des intervalles de temps dont on peut indiquer l’heure de début, l’heure de fin ainsi que la durée. On définit ici deux types de base : − les plages continues : une plage continue est le type de plage le plus simple. En effet c’est une plage horaire définie par un début et une fin. − les plages fractionnées : une plage fractionnée est un ensemble de plages continues disjointes. Elle est définie par une liste de plages continues. Cette liste peut être vide. Une vacation est décrite par une plage continue ou par une plage fractionnée. Les différents types de vacations doivent être compatibles avec les différents contrats de travail, caractérisés par des durées, des plages horaires de début et de fin et des durées minimales de pause ou de coupure. Le nombre ou la proportion de vacations des différents types doit correspondre à l'effectif moyen disponible pour les différents contrats dans les différentes qualifications. Les tâches sont caractérisées par une date, une qualification et par une plage horaire définie par 4 instants : heure de convocation, heure de début, heure de fin, heure de fin du délai de couverture. Seules des tâches du même jour et de même qualification peuvent être affectées à une même vacation. L'heure de début de la vacation correspond à l' heure de convocation de la première tâche de la vacation. L'heure de fin de la vacation correspond à l'heure de fin du délai de couverture de la dernière tâche de la vacation. En cours de vacation, les délais de couverture et les délais de convocation de 2 tâches successives peuvent se chevaucher, sans que les tâches elles-mêmes se chevauchent. Actes (CD-Rom) de ROADEF 2003, Avignon, Février 2003, résumé pp.245-246. 3 Modélisation du problème La génération des vacations est un problème du type " bin-packing ", répertorié sous le code : 1/V/D/R. 1 : dimension temporelle V : une sélection des objets (vacations) doit contenir tous les items (tâches) D : Les objets (vacations) ont des formes (durées et caractéristiques) différentes R : Il y a beaucoup d'items (tâches) mais relativement peu de types de tâches différents. D'une façon classique [1], un problème de bin-packing peut être formulé de la façon suivante : Minimiser NbU sous : ∀i = 1..n : NbU ≥ m ∑ j.xi,j j =1 ∀i = 1..n : m ∑ xi,j =1 j =1 ∀j = 1..m : m ∑ ai . xi,j ≤ b,j, i =1 ∀i = 1..n, ∀j = 1..m : xi,j ∈ {0,1} NbU ∈ N xij est une variable binaire qui vaut 1 si la tâche i est contenue dans la vacation j, 0 sinon. NbU est une variable entière qui correspond au nombre de vacations créées. Cette formulation ne représente que partiellement les contraintes du problème de génération de vacations. Les autres contraintes, mentionnées précédemment comme des relations logiques de compatibilité entre intervalles temporels, rendent le problème assez complexe, ce qui justifie l'utilisation d'une méthode heuristique. 4 L'algorithme de Listes Le choix d'un algorithme de listes correspond à la recherche d'une méthode efficace et souple, compatible avec la représentation des données (tâches) et des résultats (vacations) sous forme de plages horaires. L'algorithme proposé se décompose en deux étapes principales : - génération de vacations à partir des tâches fixes - traitement pour les tâches mobiles (amélioration des vacations déjà existantes et création éventuelle de nouvelles vacations). Le principe général consiste à classer les tâches par ordre croissant de leur compatibilité avec les autres tâches (non-chevauchement), puis de les sélectionner séquentiellement. Les vacations déjà créées sont testées par ordre décroissant de leur amélioration attendue, en termes de remplissage et d'équilibrage. Si aucune vacation déjà créée ne peut contenir la tâche courante, une nouvelle vacation est créée, selon un des types existants. L'objectif principal est de générer des vacations en nombre minimal. Il y a toutefois certains réglages, liés en particulier à la fréquence de réordonnancement des listes, qui risquent d'éloigner d’une solution à nombre minimal. Ces réglages permettent d'améliorer la qualité générale des vacations du point de vue d'indicateurs tels que le taux de remplissage et le taux d'équilibre. Cet algorithme a été implémenté en C++. Il a été testé sur des problèmes réalistes (jusqu'à 200 tâches par jour et par qualification) et a donné des temps de réponse très satisfaisants. Références [1] C. Guéret, C. Prins, M. Sevaux, Programmation Linéaire, Eyrolles, 2000. [2] T. Vidal, Le Temps en Planification et en Ordonnancement, Thèse de Doctorat UPS, Toulouse, 1995.