• Aucun résultat trouvé

Synthèse du processus de test et d’évaluation d’une insertion

3.3 Résultats expérimentaux

5.2.3 Synthèse du processus de test et d’évaluation d’une insertion

Dans un premier temps, nous testons la validité en termes de temps et de charge d’une insertion réalisée par l’opérateur INSERTT et, si aucun rejet ne se produit, nous évaluons cette insertion. La procédure TestInsertionDARPT (i0,k1,k2,x1,y1,x2,

y2,u) qui réalise ce processus de test et d’évaluation, opère sur une copie de la

collection de tournées Γ, et procède comme suit :

1. Elle teste la validité en termes de charge des deux tournées Γk1 et Γk2. Ceci

n’implique pas la prise en compte d’autres tournées.

2. Les deux nœuds actifs jumeaux (u, i0,− 1) et (u, i0,1) dans Z* sont créés et la

matrice DIST est augmentée des distances séparant ces deux nœuds de leurs voisins sur les tournées Γk1 et Γk2.

3. L’opérateur INSERTT (i0,k1,k2,x1,y1,x2,y2,z) est appliqué à Γ. Les fenêtres de

temps [0; +∞[ sont affectées aux nœuds Relais. Puis la procédure PropageT est appliquée.

4. En cas de succès, c’est au tour de la procédure EvalTourT d’évaluer l’opération d’insertion.

5. La matrice DIST est restaurée tout comme Γ.

La procédure TestInsertionDARPT (i0,k1,k2,x1,y1,x2,y2,z) nous fournit un booléen de

valeur VRAI si la validité des tournées de k1 et k2 est conservée, ainsi que le résultat

de l’évaluation par EvalTourT .

5.2.4 Processus général de résolution

Nous sommes désormais capables d’écrire le processus d’insertions successives associé au problème de Dial-a-Ride avec transferts dans sa totalité. Ce processus opère en 2 phases :

— 1ère phase : la procédure INSERTION du chapitre relatif au Dial-a-Ride stan- dard est appelée. Cette dernière nous renvoie un ensemble Rejet1 d’index de demandes pour lesquelles l’insertion n’a pu se faire, ainsi qu’un système de tournées admissible Γ et l’ensemble de dates t associées aux demandes accep- tées.

— 2ème phase : elle s’applique à partir de Rejet1 et du système (Γ, t) obtenu à l’issue de la première phase. Le processus induit INSERTIONDARPT consiste en une grande boucle while où chaque itération tente d’insérer une demande i0 de Rejet1 par l’opérateur INSERTT à l’aide des ensembles LibreXYTo(i0)

et LibreXYTd(i0). Chacune de ces itérations se déroule comme suit :

1. i0est choisi aléatoirement parmi les demandes i tel que NbCarLibreo(i) = 1

ET NbCarLibred(i)= 1. Si de telles demandes n’existent pas, i0 est choisie

de façon aléatoire (en cas d’égalité) parmi les demandes i minimisant la somme NbCarLibreo(i) + NbCarLibred(i) ; (E1)

2. un 7-uplet (k1,k2,x1,y1,x2,y2,u) est mémorisé dans une liste LCandidats-

F aibles s’il est vérifié que le couple (k1,x1) ∈ LibreXYTo(i0), le couple

(k2,x2) ∈ LibreXYTd(i0) et que (y1,x2,u) = Echange(x1,k1,y2,k2) ; (E2)

3. pour tout 7-uplet (k1, k2, x1, y1, x2, y2, u) de la liste LCandidatsFaibles, la

procédure TestInsertionDARPT (i0, k1, k2, x1, y1, x2, y2, u) est appelée. Les

7-uplets qui induisent un résultat positif sont insérés dans une liste notée LCandidats. Cette dernière est triée suivant l’ordre croissant des évaluations calculées par EvalTourT ; (E3) 4. Les demandes pour lesquelles LCandidats est vide sont rejetées et donc insérées dans un ensemble Rejet ; sinon l’insertion est possible et nous appliquons le processus suivant : (E4) (a) le 7-uplet effectif est tiré aléatoirement parmi les N3 meilleurs éléments

de LCandidats, N 3 étant un paramètre de IN SERT ION DARP T ; (b) les nœuds actifs (u, i0,1) et (u, i0,− 1) induits sont créés ;

(c) l’insertion et la mise à jour des tournées deviennent effectives par appli- cation de la procédure INSERTT (i0, k1, k2, x1, y1, x2, y2, z),

(d) les procédures PropageT et EvalTourT sont alors appelées afin de mettre à jour les fenêtres de temps et la fonction date t ;

(e) les listes LibreXYTo(i0) et LibreXYTd(i0) sont alors mises à jour pour

toutes les demandes restantes de J .

Algorithme 21 INSERTIONDARPT

Entrées: Γ1 (partiellement construite par INSERTION ), t1, Rejet1, N 3 Sorties: Γ, t, Eval(Γ, t), Rejet

1: J ← Rejet1 ; Rejet ← N IL ; Γ ← Γ1 ; t ← t1 ;

2: Tant que J 6= N IL Faire

3: sélectionner i0dans J comme en (E1) et l’enlever de l’ensemble ;

4: Si (LibreXY To(i0)= N IL) ou (LibreXY Td(i0)= N IL) Alors

5: Rejet ← Rejet ∪ {i0} ;

6: Sinon

7: calculer LCandidatsF aibles selon (E2) et en déduire LCandidats selon (E3) ;

8: Si LCandidats = N IL Alors

9: Rejet ← Rejet ∪ {i0} ;

10: Sinon

11: sélectionner le 7-uplet (k1, k2, x1, y1, x2, y2, u) de LCandidats selon (E4) ;

12: créer deux nœuds actifs (u, i0, 1) et (u, i0, −1) ;

13: appliquer IN SERT T (i0, k1, k2, x1, y1, x2, y2, u) ;

14: mettre à jour t et F P par l’exécution de P ropageT et de EvalT ourT ;

15: Fin si

16: créer ou mettre à jour les ensembles LibreXY To(i) et LibreXY Td(i) pour tout i ∈ J ;

17: Fin si

18: Fin tant que

Processus Global DARPetDARPT

Tel que décrit précédemment, l’enchaînement des processus INSERTION et IN- SERTIONDARPT a pour but de permettre la prise en compte de demandes que le mode de fonctionnement sans transfert tend à rejeter. Le point de vue qui le condi- tionne peut-être qualifié de défensif, dans la mesure où il cherche d’abord à éviter les situations d’échec. Dans l’hypothèse où l’application de INSERTION n’induit le rejet d’aucune demande, l’utilisation du mode avec transfert ne sera pas envi- sagée, même si celui-ci est susceptible de permettre une amélioration de la qualité des solutions. Afin de contourner cette difficulté, nous plongeons la séquence IN- SERTION → INSERTIONDARPT dans un processus plus global, qui agit sur les bornes ∆i, i ∈ D, et applique cette séquence à des jeux de bornes ∆∗i, i ∈ D, de

plus en plus restrictifs, de façon à forcer les mécanismes de transfert. Pour chaque ensemble ∆∗i, i ∈ D, nous obtenons un système de tournées datées (Γ, t), et, à l’issue du processus global, conservons la meilleure solution obtenue.

Le processus global DARPetDARPT induit se décrit dès lors en procédure 23 de la page suivante, la mise à jour des valeurs ∆∗i, i ∈ D, étant effectuée à l’aide d’un coefficient flexible λ, selon les termes de la procédure 22 ci-dessous.

Algorithme 22 Mise à jour de ∆i

Entrées: λ tel que λ > 1 Sorties: ∆∗i, ∀i ∈ D

1: Pour tout i ∈ I Faire

2: Si ∆i> λ.DIST (oi, di) Alors 3: ∆∗i ← λ.DIST (oi, di) ; 4: Sinon 5: ∆∗i ← ∆i; 6: Fin si 7: Fin pour

8: Retourner les nouvelles bornes ∆∗i, ∀i ∈ I ;

La figure 5.6 schématise le processus global :

Algorithme 23 DARPetDARPT

Entrées: un réseau de transit G = (V, E), une flotte V H de K véhicules de capacité CAP , les pondérations du calcul de performance, l’ensemble des demandes D = (Di =

(oi, di, ∆i, F (oi), F (di), Qi, i ∈ I)), les entiers N 1, N 2, N 3 puis P et enfin Λ > 1 ;

Sorties: la collection de tournées Γ la plus performante associée aux dates de passage sur les nœuds t, la performance de la flotte V H et l’ensemble des demandes rejetées Rejet ;

1: λ ← Λ ; ∆Auxi ← ∆i (sauver les bornes sur les temps de connexion) ;

2: (Γ, t, Eval, Rejet)(P + 1) ← (N IL, N IL, ∞, N IL) ;

3: Pour p = 1..P Faire

4: mettre à jour des ∆i pour toute demande i de D par l’algorithme 22 paramétré par λ ;

5: (Γ1, t1, Eval1, Rejet1) ← IN SERT ION (N 1, N 2) ;

6: Si Rejet1 = N IL Alors

7: (Γ, t, Eval, Rejet)(p) ← (Γ1, t1, Eval1, Rejet1) ;

8: Sinon

9: (Γ, t, Eval, Rejet)(p) ← IN SERT ION DARP T (Γ1, t1, Rejet1, N 3) ;

10: Fin si

11: Si |(Γ, t, Eval, Rejet)(p).Rejet| < |(Γ, t, Eval, Rejet)(P + 1).Rejet| Alors

12: (Γ, t, Eval, Rejet)(P + 1) ← (Γ, t, Eval, Rejet)(p) ;

13: Sinon

14: si Rejet est équivalent, on sauve (ou garde) la meilleure Eval ;

15: Fin si

16: λ ← λ − (1/P ).(Λ − 1) ;

17: Fin pour

18: ∆i ← ∆Auxi pour toutes les demandes i de D ;

19: Retourner (Γ, t, Eval, Rejet)(P + 1) ;

Quelques remarques d’ordre général

Grand nombre de points relais. Dans le cas où une solution viable met en jeu une grande quantité de nœuds relais, c’est-à-dire qu’elle utilise largement les transferts de chargement, il peut apparaître des situations incongrues pour les tournées a fortiori moins performantes. En effet, au sein du processus d’insertion d’une demande i, la création d’un nœud relais et la mise en place définitive des deux nœuds qui lui sont associés dans les deux tournées k1 et k2 ont pour but de minimiser les

distances parcourues pour qu’elles se rejoignent. Les étapes suivantes vont considérer un tel nœud relais comme figé et aucun processus ne va chercher à modifier son emplacement malgré l’insertion de nouvelles demandes. Il serait de fait possible d’envisager un traitement complémentaire par recherche locale qui viserait à ré- optimiser la position des nœuds relais créés dans l’espace et dans les tournées, une fois celles-ci construites.

Calibration des durées maximales de connexion. A chaque itération p, p = 1..P , les durées maximales de connexion sont mises à jour par la formule d’affectation 5.6. Il est souhaitable que le programme soit paramétré par un Λ > 1 correctement sélectionné. Si ce dernier est trop petit, les dernières itérations seront inutiles en considération de plusieurs types de performance recherchée puisque les ∆i, i ∈ D

résultants seront beaucoup trop petits - jusqu’à être égaux à la distance les séparant si Λ ' 1 - impliquant ainsi une utilisation des véhicules sans partage. Inversement, si Λ est trop grand, le nouveau ∆i devient supérieur à sa valeur initiale et le programme

garde alors cette dernière.

(5.6) λ ← λ − ((Λ − 1) P )

Temps de service et transferts. Nous avons vu, en chapitre 3, que des temps de service fixes (indépendants des chargements à effectuer et de l’état des véhicules) avaient vocation à être intégrés à la matrice des distances DIST et à ne pas figurer explicitement dans les modèles. Ce n’est pas forcément le cas si on considère des temps de service associés aux opérations de transfert. En effet, ceux-ci, même fixes, vont être corrélés au nombre d’opérations de transfert, et on peut considérer que, celles-ci induisant, tant pour l’opérateur que pour l’usager, des risques de mauvaise synchronisation, il est souhaitable de les pénaliser. Des temps de transfert pourraient remplir ce rôle de pénalités. Nous n’avons toutefois pas adopté ici ce point de vue.

5.3

Résultats expérimentaux

5.3.1 Objectifs

Ce chapitre se clôt sur des expérimentations mettant en relief le comportement de notre processus de résolution pour le problème DARP avec transferts autorisés. Cette section procède pour partie sur la même base que le chapitre précédent, à savoir la comparaison des résultats obtenus sur des mêmes instances résolues par notre heuristique résolvant le DARP puis celle relative au DARPT. Elle vise aussi à étudier les variations de la qualité des tournées induites par la procédure DARPetDARPT. Plus précisément, nous étudierons la sensibilité de la durée des tournées pour chaque variation de ∆i, i ∈ D.

La littérature du Dial-a-Ride Problem est pauvre en ce qui concerne les instances proposées, d’autant plus lorsque l’on intègre la caractéristique des transferts auto- risés. Il est cependant possible de résoudre des instances classiques en intégrant des transbordements, mais l’intérêt de cette approche est limité par le fait que la plupart de ces instances sont conçues pour permettre, sans transfert, l’acceptation de toutes les demandes (pas de rejet).

Nous débuterons tout de même par une courte étude sur la première instance de [Cordeau and Laporte (2003)], et ceci afin d’étudier l’évolution des performances des solutions données par la résolution du DARP puis du DARPT, toutes les demandes pouvant à priori être insérées.

Nous étudierons donc ensuite les résultats obtenus par notre processus de ré- solution du DARPT sur des instances réalisées selon un schéma particulier : celui du clustering où des sous-flottes se partagent la satisfaction de demandes dans des régions qui leur sont propres (ou plutôt des régions où se trouvent leur dépôt res- pectif).

5.3.2 Environnement et performances

Mesures de performance. Nous reprenons la plupart des notations et mesures de performance des chapitres précédents. TInsertT désigne le taux d’insertion global de

l’algorithme DARP etDARP T , il est calculé avec l’ensemble RejetT des demandes

rejetées par ce même processus :

(5.7) TInsertT = 100.

|D| − |RejetT|

|D|

Nous relevons enfin le gap entre les taux d’insertion obtenus avec ou sans transfert : (5.8) Gap = 100.(TInsertT − TInsert)/TInsert

Méthodes programmées. Les deux séries de tests exécutent l’heuristique DAR- PetDARPT (algorithme 23 développé tel quel). L’évaluation de la performance des tournées pour la partie DARPT est réalisée par la méthode EvalTourT (algorithme

20). Rappelons que EvalTourT ne cherche qu’à minimiser la durée globale (TGlobal)

des tournées et traite donc le problème comme monocritère. Pour la résolution du DARP, avec l’algorithme INSERTION, nous n’avons utilisé qu’EvalT our1 qui mi- nimise ce même critère.

Environnement d’exécution. Ces expérimentations ont fait l’objet d’un même en- vironnement de développement (en C++) et d’un même environnement d’exécution (Linux à adressage 64 bits) que les chapitres précédents.