• Aucun résultat trouvé

Chapitre 3 SYNTHÈSE DU TRAVAIL

3.5 Troisième article : ajout de tâches en équipes

3.5.3 Heuristique d'amélioration

Pour obtenir de bons résultats en des temps relativement courts pour nos ins- tances de test, nous avons dû développer une heuristique basée sur les deux modules précédents. Cette heuristique est l'adaptation de la descente à voisinages variables pour notre problème. Cette descente fait partie de la recherche à voisinages variables (Mladenovi¢ et Hansen (1997), Hansen et Mladenovi¢ (2001)) qui utilise un système de voisinages imbriqués pour améliorer séquentiellement une solution initiale. Cette métaheuristique a eu beaucoup de succès lorsqu'elle a été appliquée sur des problèmes combinatoires tels que le problème de voyage de commerce ou sur des problèmes de classication tels que le problème de la p-médiane. Récemment, cette métaheuristique a produit des résultats intéressants pour des problèmes en nombres entiers de grande taille (voir Lazi¢ et al., 2009).

L'heuristique est décrite dans l'algorithme 1 comme une fonction. Cette fonction prend comme arguments une solution initiale x au problème, une taille minimale kmin

pour les voisinages, une taille maximale kmax et deux limites de temps : tmip est le

Algorithme 1: Pseudo-code de la fonction VND Entrées : x, kmin, kmax, tvnd, tmip

Sorties : x

1 tstart←− cpuT ime() 2 t ←− 0

3 vbest←− ∞

4 tant que t < tvnd et v(x) < vbest faire 5 k ←− kmin

6 vbest←− v(x)

7 tant que t < tvnd et k ≤ kmax faire 8 T empsLimite←− min(tmip, tvnd− t)

9 x0 ←− RechercheLocale( x, k, T empsLimite ) 10 si v(x0) < v(x) alors 11 x←− x0 12 k ←− kmin 13 sinon 14 k ←− k + 1 15 n

16 t ←− cpuT ime() − tstart

17 n 18 n

le temps maximal accordé à la fonction complète. Une solution x a un coût noté v(x) et la fonction VND retourne la meilleure solution apparue durant la recherche.

La fonction VND a besoin d'une solution initiale pour commencer la recherche. Une solution sans aucune tâche aectée peut être utilisée, mais des résultats préli- minaires nous ont incités à utiliser une solution où de nombreuses tâches sont déjà aectées. La recherche bute alors moins sur les relations de préséance et produit de meilleurs résultats à temps de calcul équivalent. La détermination de cette solution comporte deux cas. Si toutes les tâches en équipe possèdent un patron d'équipe à un seul employé, alors il sut de considérer toutes les tâches comme individuelles et utiliser l'heuristique en deux étapes développée à la section 3.4 pour trouver une bonne solution initiale. Sinon, la même heuristique est utilisée sur une instance où les tâches en équipe strictes n'apparaissent pas et la recherche à voisinages sera en charge d'aecter ces tâches.

La fonction RechercheLocale possède trois arguments : une solution de référence x, une taille de voisinage k et un temps limite de calcul T empsLimite. Elle aspire à

trouver dans le voisinage de taille k autour de x une solution qui améliore la solution courante. C'est dans cette fonction que les modules décrits dans les sections 3.5.1 et 3.5.2 sont impliqués. Le module d'aectation de tâches agit comme une fonction substitut pour tenter de trouver une meilleure aectation de tâches dans le voisinage. Cette aectation de tâches est ensuite évaluée par l'heuristique décrite dans le module d'aectation d'activités.

Donc, dans un premier temps, le modèle (3.36)(3.46) fournit une nouvelle aec- tation de tâches de la façon suivante. Etant donné une solution entière correspondant à x, chaque tâche j se voit associer un poids wj et les tâches sont triées dans l'ordre

décroissant suivant ces poids. Ensuite, les variables Zj et Yh, h ∈ Hj sont xées à

leur valeur correspondant à x si la tâche se situe dans les |J| − k premières tâches ordonnées. Les autres variables de décision sont laissées telles qu'elles sont dénies dans le modèle initial. Après quoi, un solveur de programme en nombres entiers es- saie de trouver la solution optimale à cette instance restreinte pendant T empsLimite secondes en partant de la solution correspondant à x. La meilleure solution trouvée par le solveur est donc au pire la même que celle qu'il a reçue.

Les poids sont dénis en regroupant tout d'abord les tâches par groupes selon le graphe de leur préséance. Des tâches appartiennent au même groupe si elles appar- tiennent à la même composante connexe de ce graphe, où chaque noeud représente une tâche et chaque arête représente une relation de préséance. Soit P une partition de J induite par les composantes connexes du graphe de préséance et soit Pj le groupe

de tâches contenant la tâche j. Le poids pour la tâche j est déni par

wj = min j0∈P j  φj0T + O¯ j0 Zj+ X h∈Hj (th+ φjT )Y¯ h

où ¯T = |T | + 1, Oj0 est la première période de départ valide pour la fenêtre de

complétion de la tâche j0 et φ

j est le nombre de fois où la tâche j a été sélectionnée

pour avoir des variables de décision non xées dans la fonction RechercheLocale. En suivant cette formule, le poids d'une tâche j, qui n'a pas été aectée dans x (Zj = 1et

Yh = 0,∀h ∈ Hj), est seulement fourni par le premier terme de la formule. Ce terme

est égal pour toutes les tâches non aectées appartenant au même groupe que la tâche. Ainsi, il y a plus de chances de sélectionner toutes ces tâches en même temps. Au contraire, le poids d'une tâche aectée (Zj = 0) est donné par le second terme de la

formule uniquement. Dans les deux cas, la formule favorise la sélection des tâches qui peuvent être eectuées le plus tôt et qui ne sont pas souvent sélectionnées pour avoir des variables libres. Pour des raisons de diversication, les nombres φj sont remis à

zéro à la ligne 17 de l'algorithme 1.

L'aectation d'activités est faite à l'aide de l'heuristique de type horizon fuyant décrite dans la section 3.5.2 , avec réaectation des tâches, qu'elles soient individuelles ou en équipe. Bien que performante pour le travail qu'elle réalise, cette heuristique n'est pas assez rapide pour le nombre de fois où elle est appelée. Pour améliorer la rapidité de la fonction VND, une autre fonction d'évaluation peut être choisie. Cette fonction est simplement l'aectation d'activités sans réaectation de tâches. Le pro- blème maître et les sous-problèmes sont grandement simpliés et l'aectation des activités est plus rapide bien que moins ecace en terme de qualité. Cependant, plus d'itérations de la recherche peuvent être eectuées dans les mêmes temps de calcul. Un eet de bord se fait sentir. An d'éviter que le test d'amélioration à la ligne 9 soit trop souvent satisfait lorsque la solution est améliorée de quelques transitions, une nouvelle fonction de coût est dénie. La fonction v2(x) est utilisée à la place de

la fonction v(x), où v2(x) =     v(x) min a∈Aca     .

En revanche, la solution nale est obtenue par l'application de l'heuristique d'aec- tation d'activités avec réaectation de tâches en équipe. Cette nouvelle mouture de la fonction VND est appelée FastVND.

Documents relatifs