• Aucun résultat trouvé

3. La stratégie séquentielle

3.1. Ordonnancement de la production

3.1.4. Approche évolutive : un algorithme génétique

Les problèmes de flowshop sont pour la plupart des problèmes difficiles à résoudre et les méthodes exactes ne parviennent pas à résoudre de grandes instances [ESP98]. Nous proposons de nous tourner vers les Algorithmes Génétiques (AG) qui ont déjà fait leurs preuves pour la résolution du problème de l’ordonnancement de production. Le problème qui nous intéresse est l'optimisation conjointe de la durée totale de production et du retard de la maintenance.

Nous ne rappellerons pas ici le mode de fonctionnement des AG cependant le lecteur pourra se référer aux travaux de Goldberg [GOL89]. Nous présentons uniquement le paramétrage que nous avons choisi pour le problème de l’ordonnancement conjoint production/maintenance par la stratégie séquentielle. Le codage choisi pour la représentation d’un individu est le codage de permutation (§3.3.1.1)

3.1.4.1 Génération de la population initiale

La population initiale est formée d’un ensemble d’individus qui représentent des séquences de production, elle est générée comme suit (Algorithme 3.3):

Algorithme Génération Aléatoire Début

Pour i=1 jusqu’à la taille de la population demandée Faire Générer un individu valide aléatoirement

Appliquer des mutations sur cet individu

Fin Pour Fin.

Algorithme 3.3: Génération aléatoire de la population initiale

3.1.4.2 Fonction d’adaptation

Si l’on a une fonction à maximiser, la force d’un individu (valeur d’adaptation) peut être mesurée par une valeur qui varie dans le même sens que la fonction objectif du problème considéré, et dans le sens inverse s’il s’agit d’une minimisation [LOP01]. Comme nous traitons un problème de minimisation (minimiser le Makespan), nous avons choisi la fonction suivante : 1/ (1+fonction objectif). Le dénominateur est égale à (1+ fonction objectif) pour éviter une division par zéro, dans le cas où la fonction objectif est nulle.

Notre choix de cette fonction et non d’une fonction linéaire (Max + 1 – fonction objectif) est motivée par le soucis de privilégier les meilleurs individus, lors de la phase de sélection, par rapport aux plus mauvais individus.

3.1.4.3 Sélection d'un individu

La sélection permet d'identifier les meilleurs individus et de les dupliquer proportionnellement à leurs valeurs d'adaptation, et de supprimer les plus mauvais. On trouve dans la littérature plusieurs opérateurs de sélection [GOL89], nous avons utilisé la roue de loterie qui fournit le rang de l’individu à sélectionner dans la population ainsi que la sélection par rang et par tournoi [DAV91].

3.1.4.4 Croisement

Il s’agit de l’opérateur principal d’un AG. A partir de 2 individus l’objectif est de les combiner pour en fabriquer un (ou deux) autre(s) intégrant les caractéristiques des individus de départ. Le type de croisement choisi est un croisement à k points [POR96]. Le principe est illustré sur l’exemple suivant et donné par l’algorithme 3.4.

Exemple :

Algorithme Croissement à k points Début

Générer k points de croisement aléatoire (ceci fournit k+1 segments dans chaque parent) ; Recopier les parties impaires (resp. paires) du premier parent dans le premier fils (resp. deuxième fils);

Compléter les segments manquants par les tâches manquantes dans leur ordre d’apparition dans le second parent.

Fin.

Algorithme 3.4 : Croisement à k points 1 3 4 7 2 8 5 6

Parent 1

8 2 5 6 1 4 7 3

Parent 2

Point 1 Point 2 Point 3

1 3 6 4 2 8 5 7

Fils 1

8 2 4 7 5 1 3 6

3.1.4.5 Mutation

L’opérateur de mutation consiste à permuter deux positions choisies aléatoirement dans l’individu. On génère pour chaque individu un nombre aléatoirement r dans l’intervalle [0,1] s’il vérifie r<tm alors l'individu sera muté (avec tm taux de mutation). Ce taux contrôle le

nombre de nouveaux individus introduits dans la population).

3.1.4.6 Remplacement

Le remplacement se fait, soit, entre la population sélectionnée et la population croisée, soit entre la population sélectionnée et la population mutée ou sans remplacement. Nous avons implémenté les stratégies suivantes:

- N_meilleur : on choisit les N meilleurs individus entre la population courante et la

population intermédiaire pour former la nouvelle population.

- K_mauvais : on remplace les K mauvais individus de la population courante par les K

meilleurs de la population intermédiaire.

- Sans remplacement : la population courante est complètement remplacée par les

nouveaux individus.

- Aléatoire : on choisit aléatoirement N individus entre la population courante et la

population intermédiaire pour former la nouvelle population.

3.1.4.7 Evaluation

Au niveau de la phase de remplacement, des individus de la population courante vont être remplacés par des individus de la population intermédiaire. Pour cela, on aura besoin des

valeurs d’adaptation de ces derniers. La fonction d’adaptation retenue est 1/ (1+fonction objectif) pour privilégier les meilleurs individus, lors de la phase de sélection,

par rapport aux plus mauvais individus.

Il serait intéressant d’effectuer une évaluation uniquement sur les nouveaux individus qui seront choisis pour le remplacement (selon la stratégie de remplacement). Une amélioration est effectuée à ce niveau, elle consiste à changer le moment de l’évaluation des individus selon la stratégie de remplacement utilisée, comme il est indiqué ci dessous:

- Remplacement entre la population sélectionnée et la population croisée : effectuer

l’évaluation sur les individus de la population croisée, et sur les individus de la population mutée non encore évalués.

- Remplacement entre la population sélectionnée et la population mutée : l’évaluation se

fait uniquement sur les individus de la population mutée.

- Sans remplacement : dans cette stratégie, tous les individus de la population mutée

seront injectés dans la nouvelle population. Donc l’évaluation va se faire pour ces nouveaux individus avant la phase de sélection pour la génération de la prochaine population.

3.1.4.8 Critère d’arrêt

Le critère d’arrêt peut être soit le nombre de générations qui est définie par l’utilisateur, soit la stagnation de la meilleure solution après un certain nombre de générations.

Nous avons présenté dans la section précédente le paramétrage que nous avons utilisé pour les AG dans la première phase de la stratégie séquentielle. Nous avons utilisé certains paramètres de la littérature, et nous avons proposé certains autres avec de multiples possibilités au choix.

Dans ce qui suit, nous allons présenter la deuxième phase de cette stratégie, qui consiste en les différentes heuristiques pour l’insertion des tâches de maintenance tout d’abord sur une machine, puis sur plusieurs machines.