Le chemin optimal dans un milieu urbain
4. La zone de recherche : 1 Principe :
La (Fig. 4.2) nous montre une zone de recherche dans un quartier de la commune d’Oran, où elle est limitée par un nœud de départ et un nœud d’arrivée (en rouge). La diagonale de ce cercle est égale à la distance entre les deux nœuds. On peut élargir ce cercle pour avoir plus d’arrêtes et de nœuds. Le calcul des distances entre les noeuds fait appel à la formule « vol de l’oiseau ». Cette zone ignore les arrêtes ayants seulement un seul nœud dans le cercle (Fig. 4.3).
Oui Non
Oui Non
Préparer la zone de la recherche Déterminer les contraintes
Initialisation des paramètres (nœud départ X, Nœud d’arrivée Y, périmètre de recherche).
Déterminer le coût (les objectifs)
Le choix de l’algorithme d’optimisation
Résultats de la recherche sont
satisfaisants ? Début
Calculer la complexité théorique de l’algorithme choisi
Appliquer l’algorithme d’optimisation
Le chemin optimal est trouvé ?
Elargir la zone de la recherche
Fin Evaluer l’algorithme
Figure 4.2 : La zone de recherche peut être élargie à partir de la distance minimale Tout segment ayant seulement un seul nœud dans la zone, il sera ignoré (Fig. 4.3).
Figure 4.3 : Les segments ayant un noeud dans la zone et l’autre hors zone.
Le processus « création de la zone de la recherche » crée d’abord un nouveau nœud imaginaire dans le centre au milieu de la distance entre les deux itinéraires. Puis nous testons tous les nœuds des segments existants, s’ils appartiennent à ce cercle (la distance -entre le nœud testé et le centre- est inférieure ou égale au rayon du cercle), alors l’arrête (resp. arc) est inclue, sinon elle est rejetée.
4.2. Organigramme de la zone de recherche sans contraintes :
Figure 4.4: Organigramme « zone de la recherche sans contraintes ». 4.3. Création de la zone de recherche avec les requêtes SQL :
4.3.1. Définitions :
- SQL (Structured Query Language) désigne le langage d’interrogation des données informatiques stockées dans les bases relationnelles inventé dans les années 1970 [PET, 2008].
- SQL « langage de requête structuré » - est un langage de définition de données, un langage de manipulation de données et un langage de contrôle de données pour les bases de données relationnelles. Base, très complet, rend possible l’exécution de requêtes SQL directement, sans interprétation [ROD, 2010]. 56
Début
Initialisation des paramètres (nœud départ X, nœud d’arrivée Y, distance de recherche).
Déterminer les contraintes
Calculer le centre entre X et Y (XCentre = (Xx+Xy)/2 ; YCentre = (Yx+Yy)/2)
on Fin du fichier « Segments » ? N Oui Ajouter ce segment à la zone de la recherche Charger un segment Oui La zone de recherche est préparée
N Fin La distance (1èr nœud, centre) <= rayon de la zone ? on La distance (2èr nœud, centre) <= rayon de la zone ? Oui Non
Oui Les contraintes sont satisfaites ? Non
- Une requête, en terme général, est une demande d’information. Par exemple demander le chiffre d’affaires des magasins pour une année particulière. Une requête SQL fait exactement la même chose sauf qu’un certain formalisme est nécessaire pour respecter les règles d’interrogation en SQL [PET, 2008]. 57.
- Une requête SQL est un texte qui donne un ordre à exécuter à un moteur de base de données sur une base de données. Elle peut concerner un enregistrement ou plusieurs, elle peut mettre en jeu une table ou plusieurs.
4.3.2. La requête « création de la zone de recherche » : 4.3.2.1. Présentation :
Il est courant, lorsqu’on cherche à se rendre d'un point à un autre dans un réseau routier, de chercher le plus court chemin, c'est-à-dire celui dont la distance est la plus petite. Si le nombre de trajets possibles entre le point de départ et le point d'arrivée est faible, il suffira de calculer les longueurs de chacun des trajets - en additionnant la longueur des liens qui le composent - et de comparer directement les longueurs obtenues. Mais une telle solution exhaustive devient rapidement impraticable si le nombre de trajets possibles est grand.
Lorsque l’objectif à minimiser dans un graphe pondéré est le temps et qu’il n’existe aucune contrainte sur le parcours d’un arc (par opposition au cas où l’on doit respecter une grille horaire), il est possible d’utiliser les mêmes algorithmes de plus court chemin avec la variation temps au lieu de distance entre les nœuds du graphe.
Lorsque la fonction de coût à optimiser n’est pas le temps mais qu’elle dépend du temps. Il est peu probable qu’il existe un algorithme en temps polynomial : ce problème est en effet NP-difficile puisqu’il permet de résoudre le problème de plus court chemin avec des contraintes de ressources.
La zone de recherche nous permet d’avoir des arrêtes (Resp. arcs) voisines des itinéraires, elles satisfont les contraintes demandées et elles sont pondérées avec des coûts (temps, distance, trafic …). Dès que cette zone sera créée, on pourra lancer les algorithmes d’optimisation pour trouver les chemins optimaux dans cette zone d’espace limitée.
L’organigramme (Fig. 4.5) suivant présente l’algorithme global de la procédure « création de la zone de recherche ».
4.3.2.2. Organigrammes de la zone de recherche avec le coût « distance » et « temps » :
Début
Choisir l’objectif (distance, temps). Déterminer les contraintes Créer la requête « chercher »
Figure 4.5 : Organigramme de la zone de recherche avec deux objectifs (distance, temps). Oui
Non
Fin
Calcul T1 = le temps d’attente aux feux rouges de ce segment
Calcul T3 = le temps de passage de ce segment avec respect du
vitesse limitée
Temps global du passage T= T1+T2+T3
Choisir un segment
Calcul T2 = le temps d’attente aux ralentisseurs de ce segment
Le temps global des segments sera recalculer dans l’application des algorithmes d’optimisation (ajout le temps de passage de
train / tramway) Fin de la requête
« chercher » ?
Fin Parcours la requête « Chercher »
Oui Non
Oui Non
Calculer le débit du trafic
Coût = distance ?
Les contraintes temporelles existent ?
4.3.2.3. La requête « création de la zone de recherche, objectif = distance » a. Sans contraintes :
Select S.num_seg as Num_segment, dep_noeud as Noeud_depart , fin_noeud as Noeud_arrivee , dis_seg as Longueur_en_Mètre From segments S Where (S.dep_noeud IN (Select num_noeud From noeuds where (((cgx_noeud -:param1)*(cgx_noeud -:param1))+((cgy_noeud -
:param2)*(cgy_noeud - :param2))) <= (:param3 *:param3))) AND (S.fin_noeud IN (Select
num_noeud From noeuds where (((cgx_noeud - :param1)*(cgx_noeud -:param1))+((cgy_noeud - :param2)*(cgy_noeud -:param2))) <= (:param3 * :param3)))[1] ;
:param1 : coordonnée géographique X pour le nœud du centre de la zone de recherche. :param2 : coordonnée géographique Y pour le nœud du centre de la zone de recherche. :param3 : le rayon de la zone de recherche.
b. Avec contraintes (prise en compte de la hauteur autorisée) :
1. Présentation : Cette requête nous permet de sélectionner l’ensemble des segments inclus dans une