• Aucun résultat trouvé

3.4 Aller plus loin dans le guidage

4.1.2 R´esolution du probl`eme

4.1.2.1 Mod´elisation en Programmation par Contraintes

Il est `a noter que les ´equations de temps et de consommation d´ependent toutes deux de la vitesse s du v´ehicule. Pour limiter le nombre de variables impliqu´ees dans le mod`ele, plutˆot que d’int´egrer des variables de vitesse s, nous avons choisi d’exprimer les contraintes de consom- mation en mod´elisant directement c comme une fonction de t uniquement. Le fait de r´eduire le nombre de variables a deux int´erˆets : potentiellement r´eduire les temps de calcul (puisque chaque variable est sujette `a une propagation de contraintes), et limiter l’effet des erreurs d’arrondis dues `a la discr´etisation, qui sont une probl´ematique majeure pour ce type de probl`emes. c est donc exprim´e comme suit (les conversions d’unit´es n’apparaissent pas dans les ´equations) :

∀e ∈ E, c(e) = ( f0.t(e) + m(e).d(e) 2 Q.t(e) si φ(e) = 1 0 sinon. (4.7)

et la contrainte additive de consommation le long du chemin est : X

e∈E

φ(e).c(e) ≤ R0 (4.8)

o`u R0 est la ressource initiale d’´energie du v´ehicule pour la mission. Le probl`eme d’optimisation

toujours pos´e par :

minX

e∈E

φ(e).t(e) (4.9)

o`u φ ∈ {0, 1} et t ∈ N sont les variables de d´ecision du probl`eme. 4.1.2.2 Am´elioration du mod`ele logique de chemins

Les variables de temps ´etant directement contraintes par les variables de consommation, leur propagation peut se r´ev´eler tr`es coˆuteuse en temps de calcul en raison du caract`ere non lin´eaire des contraintes. Or, dans notre mod`ele logique initial, ces variables sont directement utilis´ees pour v´erifier la coh´erence du chemin (c’est-`a-dire l’absence de boucles), `a l’aide des ´equations 1.11 et 1.12.

Aussi, pour permettre une v´erification rapide de la coh´erence des chemins sans n´ecessiter la propagation des variables de temps, nous avons introduit un nouveau type de variables, nomm´ees

id et associ´ees aux nœuds du graphe, jouant le rˆole de propagateur sp´ecifique. Ces identifiants, tout comme les variables de temps pr´ec´edemment, sont utilis´es pour propager des contraintes de pr´ec´edence le long du chemin :

id(vs) = 1 (4.10) ∀v ∈ V \{vs}, id(v) = X e=(u,v)∈ω+(v) φ(e).(id(u) + 1) ≥ 0 (4.11) id(vg) = 1 + X e∈E φ(e) (4.12)

Chaque variable id(v) est d´efinie dans {0, |V |}, puisqu’un v´ehicule ne peut passer qu’une fois par chaque nœud du graphe (comme pr´ecis´e en section 1.4.1). Ces variables peu contraintes, et de domaines de valeurs r´eduits, permettent d’assurer de mani`ere tr`es efficace la coh´erence du chemin. A l’issue de ces travaux, ce mod`ele a d’ailleurs ´et´e appliqu´e de mani`ere g´en´eralis´ee `a l’ensemble des probl`emes trait´es. Il est `a noter que le mod`ele de propagation des temps peut ˆetre conserv´e, pour introduire des contraintes de fenˆetre de temps sur les nœuds par exemple (ce cas ne sera pas trait´e).

4.1.2.3 R´esolution

Le probl`eme pr´esent´e ci-avant est caract´eris´e par des contraintes de capacit´e non lin´eaires qui sont fonction des variables de vitesse associ´ees aux arcs, donc indirectement du temps. De plus, ces contraintes sont particularis´ees pour chaque arc, avec l’introduction des param`etres m(e) : il n’est donc pas possible de consid´erer l’application d’une vitesse unique `a l’ensemble du chemin.

En raison de l’interd´ependance entre la fonction de coˆut et la contrainte de consommation, la m´ethode LARAC-ACO pr´esent´ee en section 3.4 n’est pas applicable directement. En effet, l’algorithme LARAC est con¸cu pour r´esoudre des probl`emes dont les valeurs de coˆut et de capacit´e associ´ees aux arcs sont fix´ees. Or, dans notre cas, ces valeurs ne sont pas fix´ees mais d´ependent toutes deux de la vitesse du v´ehicule le long de l’arc consid´er´e.

Il est cependant possible de contourner ce probl`eme en extrayant un multi-graphe — c’est-`a- dire un graphe pouvant poss´eder plusieurs arcs entre deux nœuds — `a partir du graphe initial. Dans ce multi-graphe, on g´en`ere autant d’arcs que de valeurs discr`etes de temps possibles (chaque arc correspondant `a une vitesse fix´ee). Chaque arc dispose ainsi d’un couple < t, c > de valeur fixe. De ce multi-graphe, on extrait alors un graphe simple pr´ealablement `a chaque appel `a ACO dans l’algorithme LARAC. L’extraction est r´ealis´ee de telle sorte que ce graphe simple ne comporte que les arcs de coˆut r´eduit cλ de valeur minimale. L’impl´ementation de l’algorithme

est donn´e en section 4.1.2.5.

4.1.2.4 Guidage du solveur de contraintes

Ne guider le solveur de contraintes qu’au niveau de ses variables de flots peut aboutir `a des performances tr`es m´ediocres. En effet, l’´etiquetage des variables de temps le long d’un chemin peut se r´ev´eler fastidieux en raison de la propagation des contraintes de consommation. C’est pourquoi, en compl´ement du guidage des variables de flots, il peut ˆetre judicieux d’appliquer des contraintes jouant le rˆole de bornes maximales sur les variables de temps. En effet, lors de la r´esolution partielle, la solution retourn´ee comporte des valeurs de temps qui, si le mod`ele de flot est valide (c’est-`a-dire respectant l’unicit´e des flots `a chaque nœud), sont n´ecessairement r´ealisables. En revanche, si le mod`ele de flot ´echoue `a trouver un chemin coh´erent selon le mod`ele

Figure4.3 – Illustration des deux cas de figure possibles pour l’utilisation des variables de temps de la solution partielle. Les valeurs en italique sont une illustration possible des temps de travers´ee des arcs emprunt´es, en secondes. (a) La solution partielle n’est pas conforme au mod`ele de flots du solveur de contraintes (la solution passe deux fois au nœud 12). (b) La solution partielle est coh´erente avec le mod`ele de flots du solveur de contraintes.

de contraintes, ces bornes ne peuvent ˆetre appliqu´ees. La figure 4.3 illustre par un exemple les deux cas de figure possibles pouvant survenir dans notre impl´ementation. La solution partielle ´etant compos´ee d’un ensemble de chemins unitaires juxtapos´es, elle est susceptible de contenir plusieurs fois un nœud non obligatoire. C’est le cas de l’exemple (a), qui n’est par cons´equent pas valide avec le mod`ele de contraintes. Aussi, les valeurs de temps obtenues ne peuvent ˆetre utilis´ees pour borner la recherche. Dans l’exemple (b) en revanche, le chemin est coh´erent avec le mod`ele de contraintes. Le solveur partiel garantissant que les contraintes de capacit´e ne sont pas viol´ees, ce chemin ainsi que les valeurs de temps associ´ees constituent une solution r´ealisable du point de vue du probl`eme global. On peut donc utiliser ces variables de temps pour borner (temporairement seulement, afin de garantir la compl´etude de l’approche) les variables de temps du probl`eme global.

Pour ce faire, un test est ajout´e dans l’impl´ementation du solveur de contraintes. Apr`es l’´etape d’´etiquetage des flots, on d´etermine si l’instanciation courante est ´equivalente `a celle de la solution partielle. Si ce n’est pas le cas, la r´esolution se poursuit comme pr´ec´edemment. Si c’est le cas, des contraintes d’inf´eriorit´e (non strictes) sont mises en place sur les variables de temps, pour les borner `a la valeur obtenue dans la solution partielle. Par exemple, dans l’exemple de la figure 4.3.(b), on d´efinit que t(7, 8) ≤ 44. Le caract`ere non strict de l’in´equation permet de garantir que la solution partielle sera trouv´ee. Une fois l’ensemble des valeurs de temps ´evalu´ees, les contraintes sur les temps sont relˆach´ees afin de conserver le caract`ere complet de la recherche. Cette m´ethode permet de guider tr`es efficacement les variables de temps, d`es lors que la solution partielle satisfait le mod`ele de flot. Les r´esultats pr´esent´es en section 4.1.3 attestent du gain de performance apport´e par cette impl´ementation.

4.1.2.5 Impl´ementation du solveur partiel

La m´ethode de g´en´eration du multi-graphe est primordiale pour la qualit´e de la solution. En effet, le calcul des valeurs de consommation doit ˆetre parfaitement calqu´e sur le mod`ele exprim´e en contraintes dans le mod`ele logique du probl`eme. Si le mod`ele s’av´erait l´eg`erement diff´erent (absence d’arrondis sur le calcul de certains param`etres), les valeurs de temps de la solution obtenue ne pourraient pas ˆetre appliqu´ees en tant que bornes sur les variables de temps dans le solveur de contraintes.

Pour impl´ementer l’algorithme d´eriv´e du LARAC pr´esent´e en section 4.1.2.3, il n’est pas possible d’utiliser la version initiale propos´ee par J¨uttner et al. [Jutt 01]. En effet, celle-ci travaille avec une sauvegarde des chemins de coˆut et de d´elai minimums (pc et pd respectivement). Or,

dans notre adaptation, il n’est pas concevable d’appliquer cette impl´ementation. En effet, entre deux recherches, le graphe simple servant `a la recherche est mis `a jour. En d’autres termes, en recalculant les valeurs de coˆut et de d´elai associ´es `a pc et pddans notre cas, les valeurs obtenues

entre deux recherches varieraient, ce qui reviendrait `a disposer de bornes fluctuantes ! Pour ´eviter ce d´esagr´ement, nous avons impl´ement´e et test´e une variante du LARAC appel´e LARAC-BIN [Xiao 05]. Celle-ci utilise une recherche binaire pour mettre `a jour la valeur de λ. Cependant, si cette m´ethode est tr`es efficace pour obtenir une valeur approch´ee (il est possible de param´etrer cette valeur approch´ee), la convergence de l’algorithme peut ˆetre tr`es lente. Lors de nos tests sur un probl`eme simple, nous avons abouti `a une soixantaine d’it´erations de recherche (contre 4 `

a 8 recherches dans le cas d’une ex´ecution classique de LARAC). Aussi, nous avons d´evelopp´e notre propre impl´ementation du LARAC. Celle-ci reste bas´ee sur l’algorithme LARAC initial mais se contente de sauvegarder les valeurs de coˆut et de d´elai des chemins pc et pd, qui ne sont

jamais recalcul´es. En outre, la condition d’arrˆet de l’algorithme a elle-aussi ´et´e modifi´ee. Celui-ci s’arrˆete lorsque deux valeurs identiques de λ ont ´et´e obtenues cons´ecutivement.

L’algorithme 6 pr´esente le pseudo-code de l’algorithme LARAC mis en œuvre. Cet algorithme ne conserve en m´emoire que les valeurs de coˆut et de d´elai des chemins de poids minimum (cc et

dc pour la borne inf´erieure, cd et ddpour la borne sup´erieure), qui sont utilis´ees pour calculer λ.

Ainsi, les valeurs ne sont pas susceptibles d’ˆetre modifi´ees de mani`ere intempestive. En outre, le chemin pdest mis `a jour en prenant pour valeur r lorsque le chemin r trouv´e tient les contraintes

de d´elai, afin de sauvegarder la meilleure solution au probl`eme. Ainsi, lorsque la condition d’arrˆet (λ = λ−1) est atteinte, pd est renvoy´e. Il n’est pas utile en revanche de conserver en m´emoire

les chemins pc. Cet algorithme est en pratique ´equivalent `a l’algorithme LARAC originel, et

converge tout aussi rapidement.