• Aucun résultat trouvé

4. La stratégie intégrée

4.4. Approche évolutive : un algorithme génétique intégré

Nous présentons dans cette section les nouveaux opérateurs des AG que nous proposons dans le cas de l’ordonnancement conjoint production/maintenance par la stratégie intégrée. Ces opérateurs présentent la particularité de travailler, avec non pas une séquence de production mais, avec une séquence conjointe production/maintenance.

Les opérateurs de croisement et de mutation sur la production ont été utilisés, en combinaison avec les opérateurs de croisement et de mutation sur la maintenance, pour définir de nouveaux opérateurs de croisement et de mutation conjoint production/maintenance.

Dans ce qui suit, nous allons présenter le principe des opérateurs de croisement et de mutation sur la maintenance que nous avons développés, puis celui des opérateurs conjoints issus de la combinaison des principes de chacun des opérateurs de croisement et de mutation.

4.4.1. Croisement sur la maintenance

Pour créer un fils valide à partir de deux parents, ce premier doit hériter des informations sur la production, des informations sur la maintenance, ou les deux en même temps, d’où la nécessité de définir des opérateurs de croisement sur la production et sur la maintenance. Dans ce qui suit, nous présentons uniquement les opérateurs de croisement sur la maintenance que nous avons définis. Les opérateurs de croissement sur la production sont les opérateurs définis pour les AG de production classique présentés dans la section 3.1.4.

Nous nous sommes inspirés de l’opérateur de croissement à k points (Algorithme 3.5) pour définir deux nouveaux opérateurs de croisement sur la maintenance : un premier opérateur de croisement horizontal à k points pairs et un deuxième opérateur horizontal à k points impairs. La dénomination d’horizontal vient du fait que nous travaillons sur la matrice M de la structure d’un individu, comme définit dans la section 4.1, où chaque ligne représente l’emplacement des tâches de maintenance sur chaque machine.

L’opérateur de croisement horizontal à k points pairs consiste à générer k points aléatoirement puis à effectuer un croisement à k points pairs classique, comme définis par l’algorithme 3.5, mais uniquement sur les tâches de maintenance. Le principe de cet opérateur est présenté dans l’algorithme 3.11.

Algorithme Croisement horizontal à k points pairs Début Générer k points aléatoires (k ∈ [0..m])

Les emplacements des tâches de maintenance sur les machines qui se trouvent dans des parties paires du premier parent sont recopiés vers le fils1, et les

emplacements des tâches de maintenances qui se trouvent dans les parties restantes (impaires) du fils1 sont recopiés à partir des parties impaires du deuxième parent.

Fin.

Algorithme 3.11: Croisement horizontal à k points pairs

Le principe du croisement horizontal à K points impairs est le même que le croisement horizontal à K points pairs, sauf que dans ce cas les parties impaires sont recopiées à partir du premier parent et les parties paires à partir du deuxième. Le choix de l’opérateur de croissement est aléatoire.

Le principe du croisement sur la maintenance horizontal à k points pairs est illustré par l’exemple suivant à un point de croisement (r = 1) suivant :

Nous avons définis d’autres opérateurs de croisement en combinant les principes des opérateurs de croisements sur la production et ceux sur la maintenance. Cette combinaison nous a permis de définir les opérateurs de croisements suivants:

Opérateur 1: On prend l’emplacement des tâches de maintenance du premier parent, et

l’ordre d’exécution des tâches de production du deuxième parent.

Opérateur 2: On prend l’emplacement des tâches de maintenance du premier parent,

l’ordre d’exécution des tâches de production et un croisement pair entre les séquences d’exécution des tâches de production des deux parents.

Opérateur 3: On prend l’emplacement des tâches de maintenance du premier parent,

l’ordre d’exécution des tâches de production et un croisement impair entre les séquences de production des deux parents.

Opérateur 4: L’ordre d’exécution des tâches de production est celui qui apparaît dans le

premier parent, et l’emplacement des tâches de maintenance est un croisement horizontal à K points pair entre les emplacements des tâches de maintenance des deux parents.

Opérateur 5: L’ordre d’exécution des tâches de production est celui qui apparaît dans le

premier parent, et l’emplacement des tâches de maintenance est un croisement horizontal à K points impair entre les deux parents.

Opérateur 6: L’ordre d’exécution des tâches de production est un croisement pair entre les

deux parents, et l’emplacement des tâches de maintenance est un croisement horizontal à K points pair entre les deux parents.

Opérateur 7: L’ordre d’exécution des tâches de production est un croisement pair entre les

deux parents, et l’emplacement des tâches de maintenance est un croisement horizontal à K points impair entre les deux parents.

Machine1 1 2 3 4 Machine2 0 1 5 Machine3 0 2 5 7 Père 1 Machine 1 0 3 6 Machine 2 1 4 5 6 Machine 3 0 2 5 7 Fils 2 Machine 1 1 2 3 4 Machine 2 0 1 5 Machine 3 2 3 4 Fils 1 Machine 1 0 3 6 Machine 2 1 4 5 6 Machine 3 2 3 4 Père 2 r r

Opérateur 8: L’ordre d’exécution des tâches de production est un croisement impair entre

les deux parents, et l’emplacement des tâches de maintenance est un croisement horizontal à K points pair entre les deux parents.

Opérateur 9: L’ordre d’exécution des tâches de production est croisement impair entre les

deux parents, et l’emplacement des tâches de maintenance est un croisement horizontal à K points impair entre les deux parents.

4.4.2. Mutation sur la maintenance

Comme nous manipulons une séquence conjointe de tâches de production et de maintenance, la mutation peut se faire aussi bien sur la production que sur la maintenance.

Le choix des individus qui vont subir une mutation se fait selon le même principe que l’algorithme génétique de production défini dans la section 3.1.4.

Dans ce qui suit, nous présentons uniquement les opérateurs de mutation sur la maintenance que nous avons définis. Les opérateurs de mutation sur la production sont les opérateurs définis pour les AG de production classique comme présentés dans la section 3.1.4.

Nous avons proposé deux principes de mutation sur la maintenance : la mutation aléatoire et la mutation verticale. La mutation aléatoire consiste à décaler aléatoirement vers la gauche, ou vers la droite, une ou plusieurs tâches de maintenance. Le principe de cette mutation est définit dans l’algorithme 3.12.

Algorithme Mutation aléatoire sur la maintenance

Variables Locales tr : Taux de mutation sur les machines (0≤ r ≤ 1) ; Sens = 0 ou 1 Début

Pour Chaque Machine

Faire Générer un nombre aléatoire r ∈ [0..1].

Si (r ≤ tr)

Alors Choisir aléatoirement une tâche de maintenance sur cette machine. Générer un nombre aléatoire Sens (0 ou 1).

Si Sens=0

Alors Décaler la tâche de maintenance vers la gauche.

Sinon Décaler la tâche de maintenance vers la droite. Fin Si

Fin Si

Fin Pour Fin.

La mutation verticale consiste à permuter les emplacements des tâches de production qui se trouvent dans deux parties différentes, générées aléatoirement, en conservant les emplacements des tâches de maintenance, qui se trouvent à l’intérieur de chaque partie par rapport aux tâches de production qui se trouvent dans cette même partie. Son efficacité augmente lorsque les tâches de maintenance sont bien placées par rapport aux tâches de production. La dénomination verticale vient du fait que nous travaillons sur la séquence de production S de la structure d’un individu, comme défini dans la section 4.1.

Nous avons définis deux opérateurs de mutation verticale : la mutation verticale à un point et la mutation verticale à deux points.

Le principe de la mutation verticale à un point consiste à générer aléatoirement une position p dans la séquence de production S de la structure d’un individu. Puis permuter les emplacements des deux groupes de tâches de production, qui se trouvent respectivement entre la position 0 et p (premier groupe) et entre p+1 et n (deuxième groupe). Ce principe est présenté dans l’algorithme 3.13.

Algorithme Mutation verticale à un point

Variables Locales n : nombre de machines ; a : nombre aléatoire (0≤p≤n) ; Début Générer un nombre aléatoire p

Permuter les emplacements des deux groupes de tâches de production qui se trouvent respectivement entre la position 0 et p (groupe 1) et entre p+1 et n (groupe 2). Permuter les emplacements des tâches de maintenance de manière que les

emplacements des tâches qui se trouvent dans chaque groupe reste les mêmes par rapport aux tâches de production qui se trouvent dans le même groupe.

Fin.

Algorithme 3.13: Mutation verticale à un point

L’exemple suivant illustre le principe de cet opérateur pour 3 machines et 10 tâches avec p = 4 p p Séquence de Production Emplacement des tâches de maintenance 0 1 4 6 1 2 3 0 4 7 8 1 2 3 4 5 6 7 8 9 0 1 5 6 9 6 7 8 2 3 5 9 6 7 8 9 0 1 2 3 4 5

Le principe de la mutation verticale à deux points est le même que celui de la mutation verticale à un point. L’exemple suivant illustre le principe de cet opérateur avec 10 tâches et 2 machines pour : p1=2 et p2 =7

Dans ce qui suit, nous allons présenter les tests que nous avons effectués sur des benchmarks de Taillard [TAI93] ainsi que les résultats de ces tests.