Gnration de Programme de Travail par un Algorithme de Listes

Transcription

Gnration de Programme de Travail par un Algorithme de Listes
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.