• Aucun résultat trouvé

D´ eveloppement de l’approche ` a base de la recherche tabou

2. Tant que le crit`ere d’arrˆet n’est satisfait faire

(a) D´eterminer une solutions0qui maximise f(s0)dansNTabList(s), AvecNTabList(s) = {s0 ∈ V(S)tel ques0 ∈/ TabList};

(b) Si f(s0) > f(s) alors posers := s0; (c) Poser s :=s0 et mettre `a jour T ; 3. Fin du tant que.

5.3 D´eveloppement de l’approche `a base de la recherche

ta-bou

Nous d´eveloppons une approche `a base de la recherche tabou sp´ecifiquement pour notre probl`eme. Celle-ci est d´etaill´ee dans l’algorithme (6).

Ces diff´erentes ´etapes sont :

5.3.1 D´efinition de la solution

Dans cette approche nous choisissons comme solution s la matrice des quantit´es `a livrer aux d´etaillants dans chaque p´eriode not´ee dans notre casql. c’est la variable ”cl´e” du probl`eme. En effet c’est `a partir d’elle qu’on pourra d´eterminer les autres variables du probl`eme.

5.3.2 D´efinition du voisinage

Nous d´efinissons le voisinage N(s) d’une solution s, avec s = ql, comme l’ensemble des solutions produites chacune des mouvements d´ecrits dans la section 5.3.3 permettant de passer de la matriceql `a une autre matriceql0 proche avec une faible modification de la structure de la matriceql.

5.3.3 D´efinition du mouvement

Nous d´efinissons le mouvement dans la matrice des quantit´es `a livrerql (dans le cas de notre probl`eme), comme ´etant le d´eplacement d’une quantit´e maximale rjtt0 ≤ qljt0 de la p´eriode t0 (p´eriode source) `a la p´eriode t (p´eriode r´eceptrice), pour le d´etaillant j sans violer :

1. La capacit´e de stockage aux d´etaillants ; 2. La capacit´e de production ;

3. La capacit´e de chaque v´ehicule.

Deux types de mouvement peuvent ˆetre appliqu´e : forward move et backward move. Forward move

Ce mouvement consiste `a d´eplacer une quantit´erjtt0 ≤qljt0 de la p´eriodet0 `a la p´eriodet >t0 pour le d´etaillantj. La quantit´e rjtt0 est donn´ee par la formule suivante :

104 Chapitre 5. M´eta-heuristiques `a base de recherche tabou et de recuit simul´e

rjtt0 =minnminτ=t0,...,t−1IC, qljt0, W−qljto (5.1)

Apr`es ce mouvement, les ´el´ements concern´es par la modification dans la nouvelle solutions0 sont :

qljts0 =qlsjt+rjtt0, et qljts00 =qlsjt0−rjtt0.

Le mouvement a un effet sur le plan de production, les niveaux des stocks au producteur et aux d´etaillants, ce qui va influer directement sur le coˆut total.

Backward move

Le Backward move consiste `a d´eplacer une quantit´e rjtt0 ≤ qljt0 de la p´eriode t0 `a la p´eriode t <t0 pour le d´etaillant j.

La quantit´e rjtt0 est donn´ee par la formule suivante :

rjtt0 =minnminτ=t,...,t0−1Ijmax−IC, W−qljt, qljt0

o

(5.2) Apr`es ce mouvement, les ´el´ements concern´es par la modification dans la nouvelle solutions0 sont : qls0 jt =qls jt+rjtt0, et qls0 jt0 =qls jt0−rjtt0.

5.3.4 G´en´eration de la solution initiale

Dans le cas de notre probl`eme, pour la solution initiale on avait le choix entre soit la g´en´eration al´eatoire de la matrice ql soit consid´erer que la matrice ql est ´egale `a la matrice des demandes. Apr`es tests le premier choix `a donn´e de mauvais r´esultats aussi bien en qualit´e qu’en temps d’ex´ecution aussi nous avons opt´e pour le second choix `a savoir ql=d.

5.3.5 D´etermination des autres variables

La d´etermination des autres variables dans cette approche se fait de la mˆeme mani`ere que celle de l’approche `a base d’algorithme g´en´etique, avec comme point de d´epart la matrice des quantit´es `a livrerql. Etant donn´e ql, l’affectation de ces quantit´es aux v´ehicules est un probl`eme de bin packing `a chaque p´eriode et sa r´esolution peut se faire par l’heuristique Best Fit Decreasing BFD. Les niveaux des stocks aux d´etaillants peuvent ˆetre d´eterminer d’une mani`ere tr`es simple en utilisant l’´equation d’´equilibre du stock. La d´etermination des quantit´es `a produire est un probl`eme de lot sizing `a capacit´e constante dont une des m´ethodes de r´esolution est l’algorithme de programmation dynamique d´evelopp´e par Florian et Klein [48]. Pour plus de d´etails sur la d´etermination des autres variables, le lecteur peut consulter la section 4.3.1.

5.3. D´eveloppement de l’approche `a base de la recherche tabou 105

5.3.6 Evaluation d’une solution

Chaque solution est ´evalu´ee par la fonction du coˆut suivante : f(s) =obj(s) +ϕ(s) +ψ(s)

o`u

obj(s)est la valeur de la fonction objectif de la solution s, ou le coˆut ordinaire sans prendre en consid´eration les p´enalit´es. Ce coˆut est calcul´e par l’´equation (3.1)

ϕ(s) est la p´enalit´e li´ee `a la violation des capacit´es de production. Elle se calcule par la formule (4.4) donn´ee dans le chapitre 4.

ψ(s) est la p´enalit´e li´ee `a la violation du nombre de v´ehicules. Elle se calcule aussi par la formule (4.5) donn´ee dans le chapitre 4.

5.3.7 Structure de la liste tabou

Nous consid´erons la liste tabou TabList comme une matrice `a deux colonnes. La premi`ere colonne est relative aux d´etaillants j et la seconde `a une p´eriode t. La gestion de la liste tabou est de type FIFO (First In First Out ). Si un mouvement consiste `a transf´erer une quantit´erjtt0

de la p´eriode t0 (p´eriode source) `a la p´eriode t (p´eriode r´eceptrice) pour le d´etaillant j dans la matrice des quantit´e `a livrer ql, alors l’enregistrement de ce mouvement se fait par l’insertion d’une ligne de deux ´el´ements dans la liste TabList o`u le premier ´el´ement est l’indice j et le deuxi`eme et l’indice de la p´eriode r´eceptrice t. Donc n’importe quel mouvement qui consiste `a transf´erer une quantit´e de la p´eriode t `a n’importe quelle autre p´eriode pour le d´etaillant j est un mouvement interdit, c.`a.d un mouvement qui consid`eret comme p´eriode source. alors la liste tabou n’enregistre pas les solutions d´ej`a visit´ee mais uniquement les mouvements inverses des mouvements d´ej`a effectu´es.

5.3.8 D´etermination du seuil de faisabilit´e de la production

Dans le chapitre 4, nous avons d´etermin´e la relation (4.1) qui permet de v´erifier la faisabilit´e de la production. Si cette relation n’est pas v´erifi´ee pour certaines p´eriodes, cela veut dire qu’on ne peut pas avoir un plan de production faisable en terme de capacit´e de production. Nous supposons dans ce cas, que la relation (4.1) n’est pas v´erifi´ee jusqu’`a une p´eriode que nous avons not´e tin f. La d´etermination de celle ci se fait par la v´erification des deux relations 4.2 et 4.2. L’objectif de la d´etermination detin f est d’´eviter le transfert des quantit´es de livraison avanttin f par le Backward move, qui aggrave l’infaisabilit´e du plan de production.

106 Chapitre 5. M´eta-heuristiques `a base de recherche tabou et de recuit simul´e

5.3.9 Algorithme de l’approche `a base de recherche tabou

L’algorithme (6) pr´esente le pseudo code de l’approche propos´ee. La m´ethode est ex´ecut´ee pendant un temps limit´e. La solution courantes est modifi´ee `a chaque it´eration par l’application de Forward move ou Backward move pour cr´eer le voisinage N(s). Le meilleur voisinage est retourn´e et le mouvement qui m`ene `a celui ci est enregistr´e. La solution actuelle est mise `a jour et le meilleur mouvement est ins´er´e dans la liste tabou. La meilleure solution s peut ´egalement ˆ

etre mise `a jour. Le choix de type du mouvement d´epend de la position de la p´eriode de destination t par rapport `a la p´eriode source t0.

Algorithme 6 : Pseudo code de l’algorithme de recherche tabou TabList←∅; s←d; Calculer f(s); Bestcost← f(s); s ←s; temps←0;

tant que temp<tempsmax faire pourt= tin f +1 `a T−1 faire

pourt0 =t+1 `a T faire pourj=1 `a J faire

siqljt0 >0 alors

s0 ←Backward move(s) ; Ins´erer s0 dans N(s); finsi fin fin fin pourt=2 `a T faire pourt0 =1 `a t−1 faire pourj=1 to J faire siqljt0 >0 alors s0 ←Forward move(s); Ins´erer s0 dans N(s); finsi

fin fin fin

Trouver BestNeighbor dans N(s); si f(BestNeighbor) <Bestcost alors

s ←BestNeighbor ; finsi

Mettre `a jour la liste TabList; s← BestNeighbor;