PROCEDE ET DISPOSITIF POUR DETERMINER LE CHEMIN DE COUT MINIMAL ENTRE DEUX POIN TS DANS UN RESEAU ROUTIER
L'invention concerne un procédé de détermination d'un chemin de coût minimal entre deux points d'un réseau de transport.
Ce type de procédé est notamment utilisé par des systèmes d'aide à la 5 navigation routière, destinés à déterminer le chemin routier de coût le plus faible, entre un point d'arrivée et un point de départ, à un instant donné, afin d'assister un conducteur de véhicule automobile. Dans ce cas, le coût peut être un coût en temps, en distance, en argent, en confort routier ou en tout autre paramètre. 0
Il existe principalement deux types d'algorithmes permettant de déterminer le chemin routier de coût minimal entre un point de départ et un point d'arrivée.
5 Dans les deux cas, le réseau routier est représenté par une pluralité de nœuds (graphes), reliés deux à deux par des segments correspondant à des portions d'axe routier (rue, route, autoroute ou autre). Un coût est attribué à chaque segment.
0 Le premier algorithme consiste à développer un graphe de chemins, à partir du point de départ et jusqu'au point d'arrivée, sans connaître a priori la position du point d'arrivée. Le graphe se développe de façon concentrique, autour du point de départ, et a donc une forme globalement circulaire. Au cours du développement du graphe, on détermine concomitamment les coûts 5 respectifs des différents chemins et on sélectionne le chemin optimal, de coût minimal, reliant le point de départ et le point d'arrivée.
Avec le second type d'algorithme, qualifié de "heuristique", on fixe le point d'arrivée et on développe un graphe de chemins, en forme de goutte, à partir du point de départ et jusqu'au point d'arrivée en tenant compte de la distance.
Avec le premier algorithme de calcul, le graphe s'étend sur une surface circulaire, centrée autour du point de départ et de rayon R égal à la distance entre le point de départ et le point d'arrivée. La surface analysée est donc très importante. Il en résulte que le temps de calcul est très élevé.
Avec le second algorithme de calcul, la surface analysée est fortement réduite, du fait de la forme du graphe. Cependant, le temps de calcul par nœud est beaucoup plus important, de sorte que le temps global de calcul est aussi élevé.
La présente invention propose de pallier ces inconvénients, autrement dit de réduire le temps de calcul d'un chemin entre deux points, à travers un réseau de transport.
A cet effet, l'invention concerne un procédé pour déterminer le chemin de coût minimal entre deux points, à travers un réseau de transport comportant une pluralité de nœuds reliés deux à deux par des segments, dans lequel
- on attribue un coût à chaque segment du réseau, - on développe un graphe de chemins, sensiblement à partir de l'un au moins des deux points, et
- on détermine le chemin de coût minimal reliant les deux points, procédé caractérisé par le fait que
- on développe deux graphes de chemins, sensiblement à partir des deux points, respectivement,
- on interrompt le développement des deux graphes lorsqu'ils comprennent au moins un premier nœud commun d'interférence,
- on détermine les deux chemins de coût minimal, appartenant respectivement aux deux graphes, - et on relie les deux chemins de coût minimal afin d'obtenir le chemin de coût minimal entre les deux points.
Le coût peut être un coût en temps, en distance, en argent, en confort routier, ou autre.
L'invention consiste donc à développer deux graphes, à partir des deux points respectivement, jusqu'à ce que ces deux graphes se rencontrent, alors que, dans l'art antérieur, on développait un seul graphe à partir de l'un des deux points, jusqu'à ce que ce graphe atteigne l'autre point. On réduit ainsi considérablement la surface analysée et par conséquent le nombre de nœuds, sans augmenter le temps de calcul par nœud.
La solution de l'invention, qui pourrait paraître simple a posteriori, ne l'était pas pour l'homme du métier qui cherchait à réduire le temps de calcul. En effet, il n'était pas évident a priori de réduire le temps de calcul en augmentant le nombre de graphes développés.
Interrompant le développement des graphes, dès lors qu'ils comprennent un premier nœud d'interférence, on peut ainsi diviser la surface analysée sensiblement par deux.
Avantageusement, dans le cas où l'un au moins des points est sensiblement situé à l'emplacement d'un nœud, on développe le graphe correspondant à partir dudit nœud.
Avantageusement encore, pour l'un au moins des deux points, on recherche aux moins deux nœuds voisins dudit point, on attribue un coût de base non nul à chacun de ces deux nœuds et on développe un unique graphe à partir de ces deux nœuds.
Dans ce cas, et de préférence, les deux nœuds formant un segment sur lequel le point est sensiblement situé, on détermine le coût de base de chaque nœud, par proportionnalité, à partir du coût du segment entre ces deux nœuds. Si un nœud est inaccessible, par exemple à cause d'un sens interdit, il n'est pas pris en compte.
Ainsi, dans le cas où le point n'est pas situé à l'emplacement d'un nœud du réseau, on développe le graphe à partir des nœuds situés à proximité du point, en attribuant à ces nœuds un coût de base non nul. Cela revient finalement à développer virtuellement le graphe à partir du point considéré.
Dans un mode de réalisation particulier,
- on classe les segments suivant une pluralité de niveaux de réseau,
- au cours du développement de l'un au moins des deux graphes, on calcule le nombre de segments du graphe appartenant au niveau minf le plus bas, et
- à partir d'un seuil prédéfini de nombre de segments de niveau minf, on développe le graphe en tenant compte des seuls segments appartenant aux niveaux strictement supérieurs au niveau niinf.
Ainsi, dès lors que le graphe contient un nombre de segments de niveau πiinf supérieur au seuil, on passe du niveau πijnf au niveau suivant minf+ι et on poursuit le développement du graphe en ne tenant compte que des segments de niveau supérieur ou égal au niveau minf. On réduit ainsi considérablement le nombre de calculs et, par conséquent, le temps de calcul.
Dans ce cas, et de préférence,
- au cours du développement des deux graphes, on calcule le nombre de segments de chaque graphe appartenant au niveau πiinf le plus bas et
- lorsque le nombre de segments de niveau minf, pour les deux graphes, a atteint ledit seuil, on poursuit le développement des deux graphes en tenant compte des seuls segments appartenant aux niveaux strictement supérieurs au niveau πijnf.
Ainsi, on ne passe du niveau minf au niveau mjnf+ι que lorsque les deux graphes contiennent un nombre de segments de niveau mjnf supérieur au seuil. Si le nombre de segments de niveau rιijnf de l'un des deux graphes n'atteint jamais le seuil, on prend en compte tous les segments de niveau supérieur ou égal à rrijnf pour le développement des deux graphes.
De préférence encore, on démarre le développement dudit graphe, en tenant compte de tous les segments appartenant à tous les niveaux de réseau.
Avantageusement, .
- on recherche un groupe de segments successifs, d'un niveau donné m, comprenant exclusivement des nœuds intermédiaires n'appartenant à aucun segment de niveau au moins égal à m autre que ceux du groupe de segments successifs de niveau m considéré, et
- on substitue le groupe de segments successifs par un unique segment de niveau m.
Par définition, un nœud "intermédiaire" est un nœud compris entre les deux nœuds d'extrémité d'une succession de segments adjacents.
On crée ainsi un réseau virtuel comprenant un nombre de nœuds fortement réduit.
On peut développer chaque graphe de manière globalement concentrique, par exemple en utilisant un algorithme à buckets.
Dans la mise en œuvre préférée du procédé de l'invention, ayant trouvé ledit premier nœud commun d'interférence Pi, on recherche le nœud d'interférence optimal Pio parmi les nœuds déjà analysés pour déterminer les deux chemins de coût minimal et contenant le nœud d'interférence optimal
L'invention concerne également un serveur d'aide à la navigation routière pour la mise en œuvre du procédé, comprenant une interface de connexion à un réseau de communication, un bloc de réception de requêtes de terminaux clients, un bloc de réception de données de réseau routier, un bloc de classement de segments routiers, un bloc de création d'un réseau routier virtuel, un bloc d'étiquetage de segments routiers, un module de calcul et un bloc d'émission.
L'invention sera mieux comprise à l'aide de la description suivante du procédé pour déterminer le chemin de coût minimal entre au moins deux points, à travers un réseau de transport, selon un mode de réalisation particulier de l'invention, en référence au dessin annexé sur lequel:
- la figure 1 représente un schéma d'un terminal client relié à un serveur d'aide à la navigation routière, à travers l'Internet;
- la figure 2 représente un schéma bloc fonctionnel du serveur d'aide à la navigation de la figure 1 ;
- la figure 3 représente une vue partielle d'un réseau routier;
- la figures 4 et 5 représentent respectivement un tableau de parents et un tableau de buckets, après le développement d'un graphe à travers le réseau routier de la figure 3. -
Le procédé de l'invention permet de déterminer le chemin de coût minimal, ici en temps, entre au moins deux points, à travers un réseau de transport routier.
Dans l'exemple particulier de la description, ce procédé est mis en œuvre par un serveur 1 d'aide à la navigation routière, connecté à un réseau de communication 3, ici l'Internet, et destiné à indiquer à des terminaux clients, sur requête de ces derniers, le chemin de coût minimal pour relier un point de départ et un point d'arrivée à travers le réseau de transport routier.
Les terminaux clients comprennent des téléphones cellulaires pouvant se connecter à l'Internet 3, par connexion téléphonique à un fournisseur d'accès 5, à travers un réseau téléphonique cellulaire 4, et communiquer à travers l'Internet 3.
Le serveur 1 comprend une interface 10 de connexion à l'Internet 3, un bloc 11 de réception de requêtes de terminaux clients, un bloc 12 de réception de données relatives au réseau routier, un bloc 13 de classement de segments routiers, un bloc 14 de création d'un réseau routier virtuel, un bloc 15 d'étiquetage de segments routiers, un module de calcul 16 et un bloc d'émission 17.
Le bloc de réception 11 est relié, en entrée, à l'interface de connexion
Internet 10 et, en sortie, au module de calcul 16. Le bloc 11 est destiné à recevoir des requêtes de détermination d'un chemin routier de coût minimal,
entre un point de départ et un point d'arrivée, émises par des terminaux clients. Chaque requête contient une indication de localisation du point de départ et une indication de localisation du point d'arrivée.
Le bloc de réception 12 est relié, en entrée, à l'interface de connexion
Internet 10 et, en sortie, au bloc d'étiquetage 15 et au bloc de classement 13. Ce bloc 12 est destiné à acquérir, à travers l'Internet 3, auprès de serveurs fournisseurs, non représentés, des données relatives au réseau routier, comprenant notamment des données de cartographie vectorielle et des informations concernant le trafic routier, régulièrement mises à jour. La carte du réseau routier comprend μne pluralité de nœuds, reliés deux à deux par des segments correspondant à des portions d'axes routiers. Ces axes routiers comportent des rues, des routes et des autoroutes. On remarquera ici que l'invention s'applique aussi à des réseaux de transport public, par exemple par rail, comme un réseau de métro, par mer, comme un réseau de ferry.
Le bloc de classement 13, relié au bloc de création 14, est destiné à classer les segments routiers ici suivant trois niveaux, d'indice un, deux et trois, correspondant respectivement aux rues, aux routes et aux autoroutes. L'indice d'un niveau est fonction de la taille des axes routiers de ce niveau. En l'espèce, plus le niveau est élevé, plus la taille des axes routiers de ce niveau est importante.
Le bloc de création 14, relié au bloc de calcul 16, est destiné à créer un réseau routier virtuel, comportant ici un nombre réduit de segments de niveau 3. Pour créer ce réseau virtuel, le bloc 14 recherche dans le réseau routier des groupes de segments successifs de niveau trois tels que chaque groupe comprend exclusivement des nœuds intermédiaires n'appartenant à aucun segment de niveau trois autre que ceux du groupe de segments successifs de niveau trois considéré. Par nœud "intermédiaire", on entend signifier qu'il s'agit d'un nœud compris entre les deux nœuds d'extrémité d'une succession de segments adjacents. Puis le bloc 14 substitue chaque groupe de segments successifs de niveau trois trouvé par un unique segment virtuel de niveau trois, reliant les deux nœuds d'extrémité de la succession de segments du groupe considéré.
Le bloc d'étiquetage 15, relié aux blocs 12, 14 et 16, est destiné à attribuer un coût à chaque segment du réseau routier virtuel et à mettre à jour régulièrement ce coût, à l'aide des informations de trafic routier reçues par le bloc 12.
Le module de calcul 16 comprend un bloc 160 de développement de graphe, un bloc 161 de détection d'un changement de niveau de segments et un bloc 162 de détermination du chemin de coût minimal.
Le bloc de développement 160 est destiné, sur requête d'un terminal client, à développer deux graphes de chemin routier, à partir du point de départ et du point d'arrivée respectivement, compte tenu de l'état du trafic routier, en utilisant ici un algorithme à buckets.
L'algorithme à buckets est un algorithme de calcul de graphes. Le lecteur pourra se reporter à l'ouvrage "Algorithmes de graphes" de Christian PRINS, éditions Eyrolles, deuxième tirage 1997, afin d'obtenir des informations complémentaires concernant cet algorithme.
Afin d'expliciter succinctement l'algorithme à buckets, on va maintenant décrire, à titre d'exemple, le développement d'un -graphe par le module de calcul 16, à partir d'un nœud P0 et jusqu'à un nœud Pz, à travers le réseau routier, à l'aide de l'algorithme à buckets, en référence aux figures 3 à 5.
Le réseau routier contient une pluralité de nœuds Pn, avec n variant de 0 à N, reliés deux à deux par des segments. Chaque segment est associé à un coût. Sur la figure 3, on a représenté partiellement le réseau routier. Le coût de chaque segment entre deux nœuds est indiqué entre parenthèses.
Pour développer le graphe, le bloc de développement 160 utilise deux tableaux, respectivement appelés "tableau des parents" et "tableau des buckets", respectivement représentés sur les figures 4 et 5.
Le tableau des parents comprend
- une première colonne de nœuds, répertoriant tous les nœuds du réseau,
- une deuxième colonne de nœuds parents, destinée à contenir, pour chaque nœud du réseau, un nœud parent associé à ce nœud, - une troisième colonne de coûts, destinée à contenir, pour chaque nœud du réseau, le coût de ce nœud, et
- une quatrième colonne destinée à contenir, pour chaque nœud du réseau, un indice de sélection, appelé "flag", indiquant si ce nœud a ou n'a pas déjà été sélectionné pour faire partie du graphe, selon que le flag vaut un ou zéro.
Par définition, un nœud "parent" Pn' d'un nœud Pn est un nœud relié au nœud Pπ par un seul segment et situé en amont du nœud Pn le long d'un chemin du graphe. Le nœud Pn est en fait un nœud "descendant" vis-à-vis du nœud Pn'. On notera que le nœud parent Pn' peut avoir plusieurs nœuds descendants appartenant respectivement à plusieurs chemins du graphe.
Le tableau des buckets est destiné à contenir la liste des nœuds du graphe, c'est-à-dire les nœuds sélectionnés pour faire partie du graphe, et classés dans l'ordre croissant en coût, ainsi que le coût associé à chacun de ces nœuds. Par définition, le coût d'un nœud, pour un chemin donné, correspond au coût du chemin entre ce nœud et le nœud d'origine du graphe, qui est égal à la somme des coûts des segments formant ce chemin.
Le développement du graphe du nœud d'origine P0 jusqu'au nœud Pz s'effectue suivant les étapes décrites ci-après.
Dans le tableau des parents, la colonne des nœuds parents et la colonne des coûts sont initialement vides et tous les flags sont initialement mis à zéro. Le tableau des buckets est initialement vide. Par souci de clarté, le tableau des parents ne contient que les nœuds P0, ..., Pg, Pz, nécessaires à la compréhension de l'exposé ci-dessous.
D'emblée on notera que le fait de sélectionner un nœud du réseau consiste à introduire ce nœud dans le graphe.
Etape initiale
On sélectionne le nœud d'origine P0 et on classe ce nœud P0, avec un coût associé initial, en tête de liste, dans le tableau des buckets. Par ailleurs, dans le tableau des parents, on indique le coût initial du nœud P0 et on met le flag du nœud P0 à un. -Le nœud P0 n'est associé à aucun point parent.
Etapes de développement du graphe
On analyse le premier nœud de la liste du tableau des buckets, à savoir P0. Pour cela, on recherche les nœuds adjacents au nœud P0. Par définition, les nœuds "adjacents" à un nœud Pn sont les nœuds du réseau reliés au nœud Pn par un unique segment (il est rare qu'il y en ait plusieurs). On détermine ainsi que les nœuds P4, P2, P7 et P5 sont adjacents au nœud Po, on sélectionne ces nœuds adjacents et on les classe dans le tableau des buckets, avec leurs coûts respectifs associés, dans l'ordre croissant en coût. Dans le tableau des parents, pour chaque nœud sélectionné P4, P2, P7 et P5, on met le flag de ce nœud à un, on associe à ce nœud le nœud parent Po et on indique le coût de ce nœud.
On analyse ensuite, l'un après l'autre, dans leur ordre de classement, les nœuds suivants de la liste du tableau des buckets. Au fur et à mesure de l'analyse des nœuds successifs de la liste du tableau des buckets, on développe le graphe, en enrichissant le tableau des buckets, jusqu'à ce que le nœud Pz soit sélectionné, en d'autres termes jusqu'à ce que le graphe atteigne le nœud Pz, comme explicité ci-après.
Pour l'analyse de chaque nœud Pn de la liste, on recherche et on détermine les nœuds adjacents à ce nœud Pn. Parmi ces nœuds adjacents, on sélectionne le ou les nœuds qui n'ont pas déjà été sélectionnés. Pour chaque nœud adjacent ayant déjà été sélectionné, on calcule le nouveau coût de ce nœud, en tenant compte du fait qu'il appartient à un autre chemin (celui passant par le nœud analysé Pn). Si le nouveau coût du nœud considéré est inférieur à son ancien coût (figurant dans le tableau des parents), on sélectionne ce nœud. Sinon, le nœud considéré n'est pas sélectionné.
Après avoir analysé le point Pn, on classe le ou les nœuds sélectionnés dans le tableau des buckets, avec leurs coûts respectifs associés, dans l'ordre croissant en coût. Par ailleurs, dans le tableau des parents, pour chaque nœud sélectionné, on associe à ce nœud le nœud parent Pn (en substituant le nœud Pn à l'ancien nœud parent, dans le cas où le nœud considéré a déjà été sélectionné), on indique le coût de ce nœud (en le substituant à son ancien coût, dans le cas où le nœud considéré a déjà été sélectionné) et on met le flag de ce nœud à un.
On développe ainsi un graphe de manière globalement concentrique, autour du point d'origine P0. Le graphe a donc une forme sensiblement circulaire, centré autour du point d'origine Po-
Etape finale
Après avoir sélectionné le nœud Pz, autrement dit lorsque le graphe a atteint le nœud Pz, on reconstitue le chemin de coût optimal, en remontant depuis le nœud Pz jusqu'au nœud Po, de nœud en nœud, à l'aide des relations de parenté entre nœuds figurant dans le tableau des parents. On détermine ainsi que le chemin de coût minimal est le chemin Po - P7 — » Pz.
Le bloc de détection 161, relié au bloc de développement 160, est destiné à calculer, au fur et à mesure du développement de chaque graphe, le nombre de segments de niveau le plus bas minf appartenant au graphe considéré, à détecter le dépassement d'un seuil de nombre de segments de niveau minf, et à signaler le dépassement de ce seuil par les deux graphes au bloc de développement 160, de façon à ce que celui-ci poursuive le
développement des deux graphes en tenant compte des seuls segments appartenant aux niveaux strictement supérieurs au niveau mjnf.
Le bloc 162 de détermination du chemin optimal (c'est-à-dire de coût minimal), relié au bloc de développement 160, est destiné à reconstituer le chemin de coût minimal, entre deux nœuds, à l'aide des relations de parenté entre nœuds figurant dans le tableau des parents.
Le bloc d'émission 17, relié au module de calcul 16 et à l'interface de connexion Internet 10, est destiné à émettre un message vers chaque terminal requérant afin de lui notifier le chemin optimal entre le point de départ et le point d'arrivée.
Le procédé pour déterminer le chemin routier de coût minimal entre un point de départ A et un point d'arrivée B, à travers le réseau routier, va maintenant être explicité. Les points A et B sont ici chacun situés sensiblement à l'emplacement d'un nœud du réseau routier.
A l'aide des informations relatives au trafic routier, le bloc de classement 13 classe les segments du réseau routier suivant les trois niveaux de réseau (rue, route, autoroute). Le bloc 14 crée ensuite un réseau routier virtuel, comportant un nombre réduit de segments de niveau trois, comme précédemment explicité.
Le bloc d'étiquetage 15 attribue un coût à chaque segment du réseau routier virtuel et actualise régulièrement ce coût, à l'aide des informations de trafic reçues. Le coût d'un segment virtuel de niveau trois, correspondant à un groupe de segments successifs du réseau routier d'origine, est égal à la somme des coûts des segments de ce groupe.
Un terminal client 2 adresse au serveur 1 une requête de détermination du chemin de coût minimal entre le point de départ A et le point d'arrivée B, contenant une indication de localisation du point A et une indication de localisation du point B.
Dans le serveur 1, le bloc de réception 1 1 reçoit la requête du terminal 2, en extrait les indications de localisation des points A et B et les fournit au module de calcul 16.
Le bloc de développement 160 développe concomitamment deux graphes de chemins, respectivement à partir des deux points A et B, en déterminant les coûts respectifs des différents chemins de chaque graphe, à
l'aide de l'algorithme à buckets précédemment explicité. Les points A et B étant situés sensiblement à l'emplacement d'un nœud du réseau, on assimile chaque point A, B au nœud situé à proximité, en attribuant un coût de base nul à ce nœud.
Le bloc 160 démarre le développement des deux graphes en utilisant les segments des trois niveaux de réseau.
Au cours du développement des deux graphes, le bloc de détection 161 calcule le nombre de segments de chaque graphe appartenant au niveau le plus bas, à savoir le niveau un. Si le nombre de segments de niveau un, pour les deux graphes, atteint un seuil prédéfini Si, le bloc 161 le détecte et le signale au bloc de développement 160. Celui-ci poursuit le développement des deux graphes, au-delà de ce seuil, en utilisant les seuls segments appartenant aux niveaux deux et trois, strictement supérieurs au niveau un, et, concomitamment, calcule le nombre de segments de chaque graphe appartenant au niveau le plus bas restant, à savoir le niveau deux. Si le nombre de segments de niveau deux, pour les deux graphes, atteint un seuil prédéfini S2, le bloc 160 le détecte et le signale au bloc de développement 161 qui poursuit le développement des deux graphes, au-delà de ce seuil S2, en ne tenant compte que des segments de niveau trois, strictement supérieurs au niveau deux. On notera que si le nombre de segments de niveau un de l'un des deux graphes n'atteint pas le seuil Si, le bloc de développement 161 développe les deux graphes en tenant compte des trois niveaux, même si le nombre de segments de niveau un de l'autre graphe atteint et dépasse le seuil S,.
Dès que les deux graphes comprennent un premier nœud commun d'interférence Pis autrement dit dès qu'un même nœud d'interférence Pj a été sélectionné dans le développement des deux graphes, le bloc de développement 161 interrompt le développement des deux graphes.
Ayant trouvé ce premier nœud commun d'interférence Ps , on analyse à nouveau les tableaux de buckets pour en déduire le nœud d'interférence optima Pio correspondant aux chemins de coût minimal et qui a forcément été analysé précédemment et se trouve dans le tableau de buckets de l'un ou l'autre des points de départ et d'arrivée, ce qui va maintenant être démontré par des raisonnements par l'absurde.
Soit un calcul bidirectionnel.
Le calcul du départ à l'arrivée est noté CO, le calcul de l'arrivée au départ est noté Cl
On note V0[...] et Vl[...] les coûts pour atteindre chaque point, respectivement suivant le calcul C0 et suivant le calcul Cl.
L'algorithme de calcul trouve un premier point d'intersection entre C0 et C 1 , noté X qui est donc un point qui a été choisi par C0 et par C 1. Le coût total du chemin en passant par X est V[X] = V0[X] + VI [X].
Nous allons démontrer que s'il existe un point Y tel que V[Y] < V[X], donc si le chemin passant par Y est de meilleur coût que celui par X, alors Y a déjà été analysé, ou par C0, ou par Cl, et qu'il se trouve donc dans le tableau des buckets de l'un ou de l'autre.
A Calcul 1
Y
Soit B0 et Bl les points parents de Y dans les deux calculs.
Considérons que Y n'a été analysé, ni par C0, ni par Cl .
Y n'a pas été analysé par C0, donc B0 n'a pas été choisi par C0, donc
V0[B0] > = V0[X]
Y n'a pas été analysé par Cl, donc Bl n'a pas été choisi par Cl, donc V1[B1] > = V1[X]
Comme V[Y] = V0[Y] + V1[Y] et V0[Y] > V0[B0], V1[Y] > V1[B1] On a V[Y] > V0[B0] + V1[B1]
Donc V[Y] > V0[X] + VI [X] V[Y] > V[X]
On en déduit donc que si V[Y] <= V[X], Y à forcément été déjà analysé (BO ou Bl a déjà été choisi). Donc Y se trouve forcément dans le tableau des buckets de CO ou de Cl.
X étant trouvé, il suffit donc de parcourir le contenu des deux tableaux de buckets pour trouver d'éventuels points dont le chemin est de meilleur coût que X.
Considérons maintenant que Y est un point de jonction de CO et Cl meilleur que X.
Si BO n'a pas déjà été choisi par CO, alors V0[B0] > V0[X]
Pour que le trajet par Y soit quand même de meilleur coût, on doit avoir VI [BO] = VI [Y] + coût de [BO, Y] > VI [X]
II en résulte que B0 a déjà été choisi par Cl . Donc Y n'est pas le point de rencontre de C0 et Cl. Ce qui est absurde par définition.
On raisonne de même pour B 1.
II en résulte que
B0 et Bl avaient déjà été choisis au moment où on trouve X.
Le bloc 162 reconstitue ensuite le chemin optimal entre le point A et le nœud d'interférence P,0 et le chemin optimal entre le point B et le nœud d'interférence Pio, à l'aide des relations de parenté entre nœuds figurant dans les tableaux des parents, et associe, relie ces deux chemins optimaux afin d'obtenir le chemin de coût minimal entre les deux points A et B.
Si l'un au moins des deux points A, B, par exemple le point A, n'est pas situé sensiblement à l'emplacement d'un nœud du réseau, le bloc de développement 160 recherche au moins deux nœuds PA,o> PA,I. • • •, formant un segment et entre lesquels le point A est sensiblement situé.
Le bloc 160 attribue ensuite à chacun des nœuds PAo> PAI, • • -, formant un segment, un coût de base non nul, déterminé par proportionnalité à partir du coût du segment considéré, comme explicité ci-après. Soit PA;n et PA,Π+I,
deux nœuds voisins du point A, formant un segment routier sur lequel le point A est sensiblement situé. Le coût de base c(P „n), C(PA, n+i) de chaque nœud PA,Π, PA,Π+I est calculé à l'aide des relations suivantes:
( n \ ι τ> D \ d(A, PA )
où c(PA>n,PA)n+I), d(PAιn,PA;n+ι), d(A,PA,n) et d(A,PA, n+ι) représentent respectivement le coût du segment reliant PA,n et PA,n+ι, la distance entre PAιn et PA,Π+I > la distance entre PAιn et A et la distance entre PA,n+ι et A.
Pour développer le graphe à partir du point A, on procède de la façon suivante.
Lors de l'étape initiale, après avoir déterminé les nœuds PA>n voisins du point A, on détermine le coût de base de chacun de ces nœuds PAιn, on les sélectionne et on les classe dans le tableau des buckets par ordre croissant en coût. Dans le tableau des parents, on associe à chaque nœud PA;n le point parent A, on indique le coût de ce nœud PA;n et on met son flag à un.
Lors des étapes suivantes de développement du graphe, on analyse successivement les nœuds de la liste du tableau des buckets, dans leur ordre de classement, tout en sélectionnant au fur et à mesure de nouveau nœuds pour développer le graphe, comme précédemment explicité.
On développe ainsi un unique graphe à partir de plusieurs nœuds de départ, auxquels on attribue un coût de base non nul. On procède de la sorte par exemple lorsque le point de départ, ou d'arrivée, est situé dans une rue, entre deux nœuds, ou sur une place, dans laquelle débouchent plusieurs rues, un nœud étant situé à chaque intersection entre la place et une rue.
Après la détermination du chemin de coût minimal, le bloc d'émission
17 transmet au terminal requérant une notification indiquant le chemin de coût minimal entre les deux points A et B, à travers l'Internet 3 et le réseau cellulaire 4.
Le réseau routier pourrait être subdivisé en deux niveaux ou en plus de trois niveaux.
Dans la description qui précède, le serveur d'aide à la navigation crée un réseau virtuel en regroupant des segments successifs de niveau trois. D'une manière générale, dans le cas où le réseau routier est subdivisé en M niveaux, le serveur d'aide à la navigation pourrait rechercher des groupes de segments successifs d'un niveau donné m comprenant exclusivement des nœuds intermédiaires n'appartenant à aucun segment de niveau au moins égal à m (c'est-à-dire supérieur ou égal à m) autre que ceux du groupe de segments considéré, puis substituer chaque groupe de segments successifs par un unique segment de niveau m.
Par ailleurs, toujours dans le cas général où le réseau routier est subdivisé en M niveaux, au cours du développement des deux graphes, le serveur d'aide à la navigation pourrait calculer le nombre de segments de chaque graphe appartenant au niveau minf le plus bas et après que le nombre de segments de niveau minf, pour les deux graphes, a atteint un seuil prédéterminé, développer les deux graphes en tenant compte des seuls segments appartenant aux niveaux strictement supérieurs au niveau mjnf, le nouveau niveau inférieur pris en compte devenant le niveau minf+ι. Le serveur pourrait réitérer cette opération, en incrémentant le niveau inférieur au fur et à - mesure du développement des graphes.
On pourrait utiliser un algorithme de calcul de graphes autre que l'algorithme à buckets. Dans ce cas, le développement des graphes pourrait s'effectuer de façon non concentrique.
Au lieu d'interrompre le développement des deux graphes dès lors qu'ils comprennent un premier nœud commun d'interférence, on pourrait l'interrompre lorsque les deux graphes comprennent plusieurs points communs d'interférence et déterminer le chemin optimal entre les deux' points, de départ et d'arrivée, passant par l'un de ces nœuds d'interférence.
Le serveur d'aide à la navigation pourrait être agencé pour déterminer le chemin de coût minimal en distance, en argent, en confort routier ou autre.
Les terminaux clients pourraient se relier au serveur d'aide à la navigation par un réseau de communication autre que le réseau global comprenant l'Internet et le réseau cellulaire.
Le procédé de l'invention pourrait également être mis en œuvre par un système autre qu'un serveur d'aide à la navigation et à un réseau de transport autre qu'un réseau routier, par exemple à un réseau ferroviaire.