• Aucun résultat trouvé

Chapitre 1. Problème d’ordonnancement dans le système de production

6. Caractéristiques générales des ordonnancements

L’un des paramètres primordiaux de la génération d’un ordonnancement optimale est l’exploitation maximale du temps, car un simple décalage des opérations peut éviter les trous de temps ou temps morts. En effet, plus un ordonnancement est compact, meilleure est sa qualité [Duvivier, 2000]. Cette notion compacité est à la base de l’Il existe de différents types d’ordonnancement : admissible, actif, semi-actif et sans délais Figure (1.17) [Pinedo, 1995], [T’Kindt et al. 2006], [Esquirol at al. 1999].

Ainsi, les ordonnancements sans retard sont inclus dans le sous-ensemble des ordonnancements actifs ; qui sont eux-mêmes inclus dans le sous-ensemble des ordonnancements semi-actifs.

6.1. Ordonnancement admissible

Un ordonnancement est dit admissible, si l’ordre d’affectation de ces tâches respecte toutes les contraintes du problème : les dates limitées, les contraintes de précédence entre les différentes tâches ainsi que la capacité maximale de la machine à tout instant.

Dans certains cas, des décalages à gauche sur certaines opérations sont nécessaires. Selon que l’ordre des opérations reste inchangé ou non, on distingue deux cas [Pinedo, 1995] :

 Décalage à gauche local : On parle de glissement à gauche, local lorsque l’avancement du début d’une opération ne remet pas en cause l’ordre des autres opérations,

 Décalage à gauche global : On parle de glissement à gauche global, lorsque l’avancement du début d’une opération engendre une modification au niveau de l’ordre relatif, au minimum de deux opérations. Admissibles Semi-Actifs Actifs Sans-retard Optimum

Par exemple. Soit à ordonnancer cinq opérations A, B, C, D et E, telles que l’on doive respecter les deux contraintes de précédence suivantes : u ≺ x ≺ A et y ≺ J, Un ordonnancement admissible est représenté Figure (1.18) (a). La solution pourrait être améliorée du point de vue du temps total d’exécution, en faisant :

1) Un glissement local de certaines tâches vers la gauche C et D de deux unités, puis E de trois unités Figure (1.18) (b).

2) Un repositionnement de la tâche E juste au-dessus de la tâche C est admissible mais change la relation y ≺ J → J ≺ y, Figure (1.18) (c).

6.2. Ordonnancements semi-actifs

Un ordonnancement est dit semi-actif s'il est valide et s'il est impossible de translater une opération vers la gauche pour obtenir un nouvel ordonnancement valide tout en conservant le même ordre de succession des opérations sur les différentes ressources. Autrement dit, dans un ordonnancement semi-actif, l'exécution de chaque opération commence aussi tôt que possible.

En présence d'écarts maximaux, cette définition n'est plus tout à fait exacte. Toute l'ambiguïté repose sur la phrase « s’il est impossible de translater une opération vers la gauche ». Considérons l'exemple suivant :

 deux ressources (M1, M2) et un travail comportant deux opérations (O11, O21).  O11 s'exécute sur M1, O21 sur M2.

 P11 = P21 = 1. A B C D E temps A B C D E temps A B C D E temps (a) (b) (c)

 * _ , , /1 (pas de temps mort autorisé entre la fin de et le début de _ , symbolisé par le lien vertical gras sur la Figure (1.18);

 0.

La solution valide de la Figure (1.19) n'est cependant pas optimale, il est possible de translater les deux opérations vers la gauche pour caler O11 à l'origine. Pourtant, individuellement, il est impossible de translater les opérations, O11 étant liée à O21 par une contrainte d'écart maximal. La solution proposée est semi-active au sens de la définition précédente. Il convient donc de modifier cette définition et de la reformuler de la manière suivante :

6.3. Ordonnancements actifs

Un ordonnancement est dit actif s'il est impossible d'avancer le début d'exécution d'une opération sans retarder une autre tâche ou violer une contrainte. Il est dit, actif généralisée, lorsqu'il est impossible de translater un sous-ensemble d'opérations vers la gauche, pour obtenir un nouvel ordonnancement valide, sans en retarder un autre.

Initialiser la date de disponibilité des machines à 0 ; T : ensemble des opérations à ordonnancer ; Tant que (T≠∅) faire

En considérant les opérations de T dont toutes les opérations qui précèdent dans le même travail sont déjà placées.

Trouver une opération qui si on la place au plus tôt sur sa machine d’exécution M*, aura la plus petite date de fin C* ;

Parmi les opérations utilisant la machine M* est dont toutes les opérations qui précèdent dans la même tâche sont déjà placées : se limiter aux opérations dont la date de début peut être strictement inférieure à C* et parmi ces opérations, choisir la plus prioritaire (selon les règles de choix intégrées) noté O* ;

Placer l’opération O* sur la machine M* et l’enlever de T ; Fin tant que

Algorithme (1.1) : Générateur d’ordonnancement Actif Figure (1.19) : Solution valide sans attente

|}} |~} M1 M2 temps Machines

6.4. Ordonnancements sans délais

Un ordonnancement valide est Sans délai ou sans retard (non-delay), si et seulement si aucune opération n’est mise en attente, alors, aucune ressource ne reste inoccupée [T’Kindt et al. 2006]. Il est à noter que la transformation en un ordonnancement sans délai peut mener à une mauvaise solution plus du point de vue Makespan [Lopez et al. 1999]

[Baker, 1974] a énoncé une propriété qui stipule que, l’ensemble des ordonnancements semi-actifs est dominant dans les problèmes d’optimisation d’un critère régulier et le sous-ensemble des ordonnancements actifs est le plus petit ensemble dominant. Un générateur d’ordonnancement sans délais fonctionne de la manière suivante :

M : nombre de machines ; T : tableau de dimension M ; I*•, 0 ∀ B(∈ B ;

T : ensemble de toutes les opérations de toutes les tâches ; Tant que (T≠∅) faire

Chercher une machine k* disponible au plus tôt ^ *•,a ;

Chercher l’ensemble R des opérations qui peuvent être ordonnancées sur k* à l’instant t (k*) ;

Si (R≠∅) Alors

*•∗, ← *•∗, 1 ; Sinon

Choisir O* l’opération la plus prioritaire de R ; Placer l’opération O* sur la machine k* ; Enlever O* de T ;

Fin si Fin tant que

Algorithme (1.2) : Générateur d’ordonnancement Sans Délais

6.5. Ordonnancement statique/dynamique

Un problème d’ordonnancement est statique lorsque les choix d’ordonnancement sont faits avant l’exécution de l’application, et ne sont pas remis en cause durant cette exécution. C’est-à-dire l'algorithme d'ordonnancement a une connaissance à priori et complète de l'ensemble des tâches et de leurs caractéristiques comme échéances, durées d'exécution, contraintes de précédence et temps de déclenchement. L’analyse statique conduit à la construction calendrier donnant les dates de début et de fin d’exécution pour l’ensemble des tâches. L'algorithme d'ordonnancement statique opère sur l'ensemble de tâches et produit un schéma d'ordonnancement fixe et invariable. Cette approche n’est valide que pour des systèmes dont on sait qu’ils ne subiront aucune modification et aucune évolution.

Dans le cas contraire, les techniques statiques ne sont pas performantes dans la mesure où elles ne sont pas capables de remettre en cause les choix initiaux afin de les adapter en fonction de la réalité instantanée du système. Les approches dynamiques ou adaptatives permettent de faire face à différentes formes d’incertitude : durées d’exécution ou périodes d’activation inconnues, et de nouvelles tâches qui peuvent être activées de façon imprévue en cours d'exécution. Ainsi, l'ordonnancement varie au cours du temps, [Combaz, 2006].

Dans ce cas, aucune garanti n’est donnée quant au respect des contraintes de temps. Lorsqu’une nouvelle tâche survient, l’ordonnanceur fait une étude de faisabilité afin de déterminer s’il peut garantir l’ordonnancement correct de l’ensemble. Si oui, il établit un schéma d’ordonnancement et insère la tâche dans l’ensemble des tâches garanties. En cas d’échec, différentes alternatives restent possibles en fonction du temps disponible.