• Aucun résultat trouvé

4.3 Résolution sous-optimale

4.3.2 Amélioration des heuristiques

Les résultats développés dans la partie 4.4 montrent que les heuristiques proposées jusqu'ici ne permettent pas d'obtenir des solutions optimales. Les horizons de production atteints sont en eet en moyenne à 82% de l'optimal pour l'heuristique donnant les meilleurs résultats. Une amélioration des solutions obtenues est alors encore possible. On peut de plus observer un po- tentiel résiduel à la n de la plupart des ordonnancements : toutes les machines ne sont pas utilisées jusqu'à leur n de vie. Certaines d'entre elles peuvent donc toujours fournir un certain débit, sans que cela soit susant pour atteindre la demande pour une période supplémentaire. Le principe de la réparation proposée ici repose sur l'utilisation de ce potentiel restant pour tenter d'étendre les horizons de production des solutions données par les heuristiques proposées précédemment.

Nous proposons d'améliorer les heuristiques proposées dans la partie 4.3.1 en modiant les ordonnancements obtenus avec ces stratégies d'engagement des machines. Les ordonnancements étant construits hors-ligne, cette étape de modication peut intervenir après la construction d'un premier ordonnancement. Le principe de réparation est tout d'abord motivé avec un exemple très simple. La stratégie mise en ÷uvre est ensuite détaillée.

4.3.2.1 Illustration du principe de réparation

Le principe de réparation peut être expliqué sur un exemple mettant en jeu trois machines pouvant être utilisées avec un seul prol de fonctionnement. L'ordonnancement obtenu avec l'heuristique basée sur la programmation dynamique, HDP, est montré sur la gure 4.13a. On peut voir que la machine M3n'est jamais utilisée au cours de cet ordonnancement. Il y a donc un

potentiel restant, mais aucune période ne peut être ajoutée dans l'état. La machine M3 n'est en

eet pas assez puissante pour atteindre seule la demande σ. Il faudrait utiliser la même machine en parallèle avec elle-même, ce qui n'est pas possible.

Il y a malgré tout une autre possibilité pour utiliser cette machine M3. Cette dernière n'étant

pas utilisée dans la première période de l'ordonnancement (0 6 t 6 ∆T ), elle peut être échangée avec la machine M2pour une période. Cela entraîne une surproduction au cours de cette première

période, mais permet d'avoir deux machines diérentes disponibles à la n de l'ordonnancement. La demande peut ainsi être satisfaite pour une période supplémentaire en utilisant les machines M2 et M3 en parallèle (voir gure 4.13b). Le même échange peut être eectué dans la seconde

période de l'ordonnancement. Cela permet de récupérer la machine M2 pour une période et

d'accroître à nouveau le nombre de périodes complétées de 1 (voir la gure 4.13c). Sur cet exemple, appliquer le principe de la réparation permet ainsi d'utiliser entièrement le potentiel oert par l'ensemble des machines et d'étendre l'horizon de production de H = 4∆T à H = 6∆T .

4.3.2.2 Stratégie de réparation

La réparation est basée sur un algorithme glouton et peut être appliquée à la solution de n'importe laquelle des heuristiques précédemment dénies, les seules restrictions étant les sui- vantes :

(i) l'ordonnancement doit être constitué d'au moins une période de temps (K > 1) ; (ii) au moins une machine doit rester avec un RULn−1,j > 1 ;

74 Chapitre 4. Ordonnancement avec prols discrets

(iii) la somme des RUL restantes doit être au moins égale à 2 : P16j6mRULn−1,j > 2 à la n

de l'horizon courant K∆T . temps débit N0,1 N0,2 N0,1 N0,2 N0,1 N0,2 N0,1 N0,2 σ K = 4 Potentiel restant N0,3 N0,3 N0,3 N0,3

(a) Ordonnancement initial, obtenu avec l'heuristique HDP

temps débit N0,1 N0,3 N0,1 N0,2 N0,1 N0,2 N0,1 N0,2 N0,3 N0,2 σ K = 5 Potentiel restant N0,3 N0,3

(b) Première étape de réparation

temps débit N0,1 N0,3 N0,1 N0,3 N0,1 N0,2 N0,1 N0,2 N0,3 N0,2 N0,3 N0,2 σ K = 6 Potentiel restant

(c) Seconde étape de réparation, ordonnancement obtenu avec l'heuristique HDP-R Figure 4.13  Stratégie de réparation

Le principe de base est d'échanger les machines restantes, dont le RUL est supérieur à 1 à la n de l'ordonnancement, contre une ou plusieurs autres machines utilisées dans une période de l'ordonnancement initial et dont le RUL est nul pour k > K, avec K∆T l'horizon de produc- tion atteint par l'ordonnancement initial. La récupération de ces machines permet d'accroître le nombre de machines diérentes restant à la n de l'ordonnancement. Ces machines étant dié- rentes, elles peuvent être utilisées en parallèles et ainsi permettre d'atteindre potentiellement la demande σ pour une ou plusieurs période(s) supplémentaire(s).

Soient les ensembles suivants :

M Rest = {Mj|RULn−1,j(K + 1) > 0, 1 6 j 6 m} l'ensemble des machines Mj pouvant encore

être utilisées à la n de l'ordonnancement initial ;

M Rest = {Mj|RULn−1,j(K + 1) = 0, 1 6 j 6 m} l'ensemble des machines Mj ayant atteint

leur n d'utilisation avant maintenance ;

M Restkswap = {Mj ∈ M Rest | (∗, j) /∈ solkswap et RULn−1,j(K + 1) > RULn−1,j+1(K + 1)

∀ 1 6 j 6 m} l'ensemble des machines restantes non utilisées à la période kswap, triées par ordre décroissant de leur RUL ;

4.3 Résolution sous-optimale 75

riode kswap ayant atteint leur n d'utilisation avant maintenance.

La réparation consiste à trouver les périodes kswap de l'ordonnancement à réparer (avec 1 6 kswap 6 K) dans lesquelles un échange peut être fait, c'est-à-dire les périodes répondant au critère suivant : X j|Mj∈M Restkswap max i|RULi,j>0 ρi,j >  X j|Mj∈M Restkswap ρ∗,j  −surplus (4.16) avec surplus =  X j|(i,j)∈solkswap ρi,j  − σ

et avec ρ∗,j le débit avec lequel la machine Mj est utilisée à la période kswap et maxi|RULi,j>0ρi,j

le débit maximal encore disponible pour la machine Mj de M Restkswap.

Les périodes sont testées dans l'ordre déni par l'ordonnancement initial devant être réparé. Pour chaque période kswap, il s'agit d'échanger le nombre de machines de M Restkswapjuste suf-

sant pour récupérer les machines de M Restkswap. L'ensemble de machines M Restkswapest alors

remplacé dans l'ordonnancement à la période kswap par l'ensemble de machines M RestSwap déni de la manière suivante :

M RestSwap = {Mj ∈ M Restkswap|

P

j|Mj∈M Restkswap

maxi|RULi,j>0ρi,j >

 P j|Mj∈M Restkswap ρ∗,j  −surplus}.

Dès que le potentiel total des machines restantes est susant pour atteindre la demande σ, l'heuristique avec laquelle la solution initiale a été construite est réutilisée pour ajouter une période à l'ordonnancement. Tout le processus est reconduit tant qu'une période additionnelle peut être ajoutée à l'ordonnancement (voir les algorithmes 9 et 10). La réparation est stoppée lorsque plus aucun échange utile de machines ne peut être eectué.

Algorithme 8: PossReparation : retourne VRAI si une réparation peut être eectuée

Entrées :

K : nombre de périodes de l'ordonnancement à réparer

N = {Ni,j= (ρi,j,RULi,j), 0 6 i 6 n − 1, 1 6 j 6 m} : caractéristiques des prols de

fonctionnement pour chaque machine Mj

Sorties :

VRAI si une réparation est possible, FAUX sinon si (K > 1) et (Pj|Mj∈MRULn−1,j > 2) alors

retourner VRAI sinon

retourner FAUX

La réparation est appliquée sur les trois heuristiques les plus performantes, à savoir HLRF, HHTF et HDP. En utilisant successivement le principe de chacune de ces heuristiques et l'étape de réparation, on obtient trois nouvelles heuristiques : HLRF-R, HHTF-R et HDP-R. Les performances de toutes les heuristiques proposées dans cette partie sont comparées dans la partie suivante. La qualité des solutions est appréciée en comparant les horizons de production atteints à la borne supérieure dénie précédemment pour le problème maxK(σ, ρi,j,RULi,j).

76 Chapitre 4. Ordonnancement avec prols discrets

Algorithme 9: H*-R : heuristiques avec réparation  Implémentation globale

Données :

solk : liste des couples (i, j) sélectionnés pour la période k

Kinit : horizon de l'ordonnancement à réparer M Rest : liste des machines restantes

M Rest : liste des machines ayant atteint leur n de vie

rep: booléen permettant de ne lancer le processus de réparation qu'après un premier lancement de l'heuristique associée

f irst: booléen permettant de n'initialiser qu'une seule fois l'ensemble des machines restantes, après le premier lancement de l'heuristique associée

poss: booléen indiquant si une réparation peut être eectuée

swap: booléen indiquant si au moins un échange a été eectué durant la réparation Entrées :

σ: demande à atteindre à chaque période k

N = {Ni,j= (ρi,j,RULi,j), 0 6 i 6 n − 1, 1 6 j 6 m} : caractéristiques initiales des prols de

fonctionnement pour chaque machine Mj

Sorties :

sol = (sol1, . . . , solk, . . . , solK): liste des solutions pour chaque période k complétée

rep ←FAUX f irst ←VRAI poss ←VRAI swap ←VRAI répéter

si rep est VRAI alors si first est VRAI alors

Kinit ← taille de sol

M Rest ← {Mj|RULn−1,j(Kinit + 1) > RULn−1,j+1(Kinit + 1) > 1 ∀ 1 6 j 6 m − 1}

M Rest ← {Mj|RULn−1,j(Kinit + 1) = 0 ∀ 1 6 j 6 m − 1}

f irst ←FAUX sinon

M Rest ← {Mj|RULn−1,j(Kinit + 1) > RULn−1,j+1(Kinit + 1) > 1 ∀ 1 6 j 6 m − 1}

K ←taille de sol

si (P ossReparation(K, N ) est VRAI) & (poss est VRAI) alors

(swap, sol) ← Reparation(σ, sol, N ,M Rest, M Rest, Kinit)(voir algorithme 10) poss ← P ossReparation(K, N )(voir algorithme 8)

sinon

poss ←FAUX

sol ←H*(σ, N ) (voir algorithme 3, 4, 5, 6 ou 7) rep ←VRAI

jusqu'à (poss est FAUX) ou (swap est FAUX) retourner sol = (sol1, sol2, . . . , solK)

4.3 Résolution sous-optimale 77

Algorithme 10: Reparation(σ, sol, N , M Rest, M Rest, Kinit)  Échange de machines

Données :

swapbooléen indiquant si un échange de machines a été eectué kswap : période testée

solk : liste des couples (i, j) sélectionnés pour la période k

M Restkswap : liste des machines restantes non utilisées dans la période kswap

M Restkswap : liste des machines ayant atteint leur n de vie et utilisée dans la période kswap

M RestSwap : liste des machines restantes à échanger

ρmaxRestswap : débit maximal atteignable avec les machines de M Restkswap ρmaxswap : débit maximal atteignable avec les machines de M Restkswap surplus : surplus de production dans la période courante

Entrées :

σ: demande à atteindre à chaque période k

sol = (sol1, sol2, . . . , solK): ordonnancement initial

N = {Ni,j= (ρi,j,RULi,j), 0 6 i 6 n − 1, 1 6 j 6 m} : caractéristiques initiales des prols de

fonctionnement pour chaque machine Mj

Kinit : horizon de l'ordonnancement initial M Rest : liste des machines restantes

M Rest : liste des machines restantes ayant atteint leur n de vie Kinit : horizon de l'ordonnancement à réparer

Sorties :

swap: VRAI si au moins un échange de machines a été eectué sol = (sol1, sol2, . . . , solK): ordonnancement réparé

swap ←FAUX kswap ← 1

tant que (kswap < Kinit) & (swap est FAUX) faire

M Restkswap← {Mj ∈ M Rest | (∗, j) /∈ solkswap et RULn−1,j(K + 1) >

RULn−1,j+1(K + 1) ∀ 1 6 j 6 m}

si M Restkswap6= ∅alors

M Restkswap← {Mj ∈ M Rest | (∗, j) ∈ solkswap}

pour chaque Mj ∈M Restkswapfaire

ρmaxRestswap ← P

j|Mj∈M Restkswap

maxi|RULi,j>0ρi,j

ρmaxswap← P

j|Mj∈M Restkswap

ρi,j avec i|(i, j) ∈ solkswap

surplus←  P j|(i,j)∈solkswap ρi,j  − σ

si ρmaxRestswap> ρmaxswap−surplus alors

M RestSwap ← {Mj ∈ M Restkswap| P j|Mj∈M Restkswap

maxi|RULi,j>0ρi,j >

 P j|Mj∈M Restkswap ρ∗,j  −surplus} solk ← solk\ {(∗, j) | Mj∈M Restkswap}

solk ← solk∪ {(∗, j) | Mj ∈M RestSwap}

swap ←VRAI kswap ← kswap + 1 retourner (swap, sol)

78 Chapitre 4. Ordonnancement avec prols discrets