• Aucun résultat trouvé

Chapitre 6 : Minimisation du dépassement moyen de la durée idéale de pré

6.3. Méthodes de résolution

6.3.4. Heuristique d’intervalle de temps : TIH

Pour les problèmes de petite taille, les modèles PLNE, 5-contrainte et

CompA peuvent fournir des solutions avec une durée de calcul raisonnablement

courte. Mais, pour des grandes instances, ces méthodes risquent d’être moins efficaces et de nécessiter une longue durée de calcul. Par conséquent, nous proposons ici une heuristique de complexité polynomiale.

L’heuristique proposée commence par définir une fenêtre de temps [0, t], puis résout un problème de sac-à-dos, avec les tâches dont les dates d’arrivée appartiennent à la fenêtre de temps et en considérant qu’elles ont le même poids. Pour la résolution du problème de sac-à-dos, nous utilisons la procédure first fit présentée dans la section 5.5.2.

Concernant la détermination de la fenêtre de temps, sa longueur, t, est

déterminée par max(r’k, première disponibilité de machine) où r’k est la date

d’entrée de la tâche k dans le système (sa date de disponibilité par contre sera calculée par l’algorithme) parmi les tâches qui ne sont pas encore affectées à une machine. k est un paramètre qui varie de 1 à N où N est le nombre de tâches dans le problème. Le début de la fenêtre de temps est toujours 0. Ainsi, ce qui change dans l’intervalle [0, t], c’est seulement la variable t.

L’algorithme définit la longueur de la fenêtre de temps dans l’étape 3.1.2. Chaque fois qu’un batch est créé en utilisant PFF, le paramètre t’ est calculé pour le lancement du cycle de lavage. L’étape 3.1.5 sert à respecter la durée minimale de pré désinfection, qui est de 15 minutes pour toutes les tâches d’un batch, et aussi à redéfinir le début d’exécution du batch. Après chaque itération de la boucle « tant que » avec une valeur différente pour la variable k, une nouvelle valeur pour la fonction objectif (DMP) est calculée. L’étape 3.3 choisit ainsi la plus petite valeur de DMP.

TIH

1. Trier les tâches en ordre croissant des dates d’arrivé r’j : L0. Poser L1 = L0

2. Fixer la valeur initiale de DMP, solin, égale à un très grand nombre

3. Pour k = 1 à N

3.1. Tant que L1 n’est pas vide

3.1.1. Si le nombre de tâches dans L1 est plus petit que k, fixer l = nombre de

tâche dans L1, else l = k,

3.1.2. Définir la longueur de la fenêtre de temps comme

t = max(date d’arrivée de la lième tâche, première disponibilité de machine)

3.1.3. Appliquer PFF sur les tâches dont les dates d’arrivée sont inférieures ou égales à t. Effacer de L1 les tâches mises dans un batch

3.1.4. Parmi les tâches mises dans le batch dans l’étape 3.1.3, trouver la tâche

dont le début de pré désinfection est le plus grand : premax

3.1.5. Fixer t’ = max(t, premax + 15)

3.1.6. Dès que t’ est atteint, lancer un cycle de lavage avec le batch

précédemment créé. Calculer la nouvelle disponibilité de la machine sur laquelle le batch est exécuté

Fin tant que

3.2. Soit solDMP la valeur obtenue pour DMP

3.3. Si solin> solDMP, poser solin = solDMP

3.4. Fixer L1 = L0

Fin pour

4. Fixer la solution finale, solfinale, égale à solin

Exemple illustratif : Soient 3 tâches dont les tailles, les dates d’arrivées et les

débuts de pré désinfection sont les suivants :

- v1 = 3, t1 = 5, r1 = 10,

- v2 = 2, t2 = 5, r2 = 20,

- v3 = 4, t3 = 20, r3 = 45.

Soient deux machines de capacité 6 qui sont disponibles à l’instant 0 et soit la durée d’exécution d’un batch 60 minutes.

Résolution de l’exemple illustratif :

Pour k = 1 :

Les tâches dans L1 sont : 1, 2, 3

Alors, la limite de la fenêtre de temps est la date d’arrivée de la tâche qui se trouve au premier indice de la liste L1. Donc, la fenêtre de temps est limitée à l’instant 10 (t = 10). On applique PFF sur les tâches dont la date de d’arrivée est inférieure ou égale à 10. Ainsi, la tâche 1 est mise dans un batch. A l’étape 3.1.5, on calcule le moment, t’, pour lancer l’exécution de ce batch en prenant en compte la durée minimale de pré désinfection. Ainsi, on obtient t’ = 20. Le batch est exécuté sur la première machine disponible, la machine 1, à l’instant 20.

Les tâches dans L1 sont : 2, 3

La valeur du k est toujours 1 et il y a une machine disponible à l’instant 0. Donc, on crée un batch avec une seule tâche qui se trouve au premier indice de la liste

L1. Ainsi, un batch est créé avec la tâche 2 et est exécuté sur la machine 2 à l’instant 20.

Les tâches dans L1 sont : 3

La tâche 3 est exécutée toute seule dès qu’il y a une machine disponible, donc à l’instant 80.

Calcul pour DMP

Les tâches 1 et 2 ont 15 minutes de pré désinfection. Donc, aucune pénalité pour elles. La durée de pré désinfection de la tâche 3 est 60, ce minutes ce qui implique une pénalité de 40 minutes. Alors, la valeur du DMP est 40/3 pour k égal à 1. Pour k = 2 :

Les tâches dans L1 sont : 1, 2, 3

La fenêtre du temps est calculée en fonction de la date d’arrivée de la tâche au

deuxième indice de la liste L1. Alors, à l’étape 3.1.3, on applique PFF sur les

tâches 1 et 2. En prenant en compte la durée minimale de pré désinfection à l’étape 3.1.4, la date de début d’exécution du batch qui contient les tâches 1 et 2 est 20.

Les tâches dans L1 sont : 3

La tâche 3 est exécutée toute seule dès qu’elle est suffisamment pré désinfectée. Elle est exécuté sur la machine 2 à l’instant 45.

Calcul pour DMP

Seule la tâche 3 a une pénalité de 5 minutes. Donc, la valeur du DMP est mise à jour et on trouve 5/3.

Pour k = 3 :

Les tâches dans L1 sont : 1, 2, 3

La limite supérieure de la fenêtre du temps est la date d’arrivée de la tâche au

3ième indice de la liste L1. On applique PFF sur toutes les tâches. Ainsi, les tâches

1 et 2 sont mises dans un batch, mais il ne reste plus assez d’espace pour la tâche 3. Le batch est exécutée dès que toutes les tâches sont pré désinfectées au moins 15 minutes.

Les tâches dans L1 sont : 3

La valeur de k est toujours égale à 3. Mais d’après l’étape 3.1.1, nous fixons l à 1. La tâche 3 est exécutée toute seule dans un deuxième batch.

Calcul pour DMP

La valeur finale du DMP est 5/3.

Figure 6.3. Résolution de l’exemple illustratif avec TIH

La complexité de l’algorithme est bornée par 0(N3logN). k varie de 1 à N.

Pour chaque valeur différente de k, une boucle de « tant que » est exécutée N fois dans le pire cas. L’étape dominante pour le calcul de complexité est l’étape où

PFF est appliqué. PFF a une complexité de 0(NlogN) dans son pire cas. Donc, la

complexité de pire cas de TIH est 0(N3logN).

6.4. Expérimentations numériques

Notre but dans cette partie est de tester l’efficacité des méthodes présentées dans cette section. Rappelons que nous avons deux critères à tester : le

DMP et le nombre de batch créés. La taille et la date d’arrivée des tâches dans les

instances sont générées en fonction des explications données dans la section 4.6.1. La seule différence des instances dans cette partie est l’affectation d’une date de début de pré désinfection pour toutes les tâches. Pour les types d’arrivée 1 et 2,

i.e. arrivée aléatoire et ramassage de 20 minutes, nous avons généré la date de

début de pré désinfection des tâches suivant la formule suivante : tj = r’j – U[5 ;

25] avec tj la date de début de pré désinfection et r’j la date d’arrivée dans le service de stérilisation pour la tâche j, et U une distribution uniforme. En fonction de nos observations, nous avons supposé que l’écart maximal et minimal entre le début de pré désinfection d’une tâche et son arrivée dans le service de stérilisation peut être 25 minutes et 5 minutes, respectivement. Pour le type d’arrivée 3, i.e. ramassage de 40 minutes, l’écart entre le début de prédesinfection et l’arrivée d’une tâche dans le service peut être un peu plus grande. Nous avons donc généré

la date de début de pré désinfection des tâches suivant la formule suivante : tj = r’j

– U[5 ; 40] pour les instances de type 3. Nous avons codé les modèles PLNE en C++ pour faire appel à CPLEX. TIH est également codé en C++.

6.4.1. Performance des méthodes de résolution pour le DMP sur les