Page d'accueil Description du projet Project Description (english)

Graphes de correspondance

Accès rapide

Commentaires

  1. Objectifs
  2. Cette petite bibliothèque de graphes répond à un problème courant en robotique : la mise en correspondance de données observées avec des données en mémoire. Prenons un exemple : supposons que l'on dispose d'un robot équipé d'une caméra et évoluant dans un bâtiment. Pour qu'il puisse se localiser dans son environnement, on lui donne la capacité de détecter les portes dans son champ de vision. Une fois les portes détectées, il faut déterminer quelles sont les portes visibles. Comme toutes les portes se ressemblent, il faut identifier les portes "en groupe". C'est ce que permet de faire la notion de graphe de correspondance.

  3. Exemple
  4. Supposons que l'environnement soit représenté par le schéma suivant :

    Environnement :

    On dispose donc d'une carte en mémoire qui donne la position des 21 portes .

    Carte globale :

    Supposons maintenant que le robot soit représenté par le disque R, orienté selon la flèche. Les portes en rouge sont celles qui sont visibles de cette position du robot.

    Portes visibles :

    Une fois la position des portes détectée (par rapport au robot), on obtient une carte locale, comme ceci :

    Carte locale :

    Le problème est alors d'identifier les portes visibles sur la carte locale.

  5. Principe
  6. L'utilisation d'un graphe de correspondance permet de trouver une solution fiable au problème de l'identification. Dans un tel graphe, les noeuds sont les mises en correspondance potentielles (un noeud représente l'appariement Porte 1 -- Porte IV). Ensuite, on ajoute des arcs entre les noeuds de ce graphe lorsque les noeuds sont cohérents entre eux. Par exemple, la position relative de la porte 14 par rapport à la 6 est la même que celle de la porte I par rapport à la IV, les appariements (14,I) et (6,IV) sont donc cohérents, on ajoute donc un arc entre les noeuds qui les représentent.

    Une fois les arcs construits, on recherche un sous ensemble de noeuds de taille maximale, tel que les noeuds soient tous cohérents entre eux. Ce sous ensemble correspond à un sous graphe complet (tous les noeuds connectés à tous les autres).

    Problème : la recherche d'un sous-graphe complet de taille maximale (une clique maximale) est un problème NP-complet (très très difficile à résoudre) dans le cas général. Cependant, si le critère de cohérence utilisé pour construire les arcs est suffisamment discriminant, le graphe résultant est suffisamment simple pour qu'une clique soit trouvée en un temps compatible avec un traitement temps réel.

    Le but de cette bibliothèque est d'implémenter une représentation des graphes et l'algorithme de recherche d'une clique maximale. L'algorithme est inspiré des indications trouvées sur le site : The Algorithm Design Manual.

    Attention : L'algorithme utilisé n'est pas du tout économe en mémoire. Quand c'est possible, il vaut donc mieux faire une préselection des repères potentiellement visibles, et réduire ainsi la taille du graphe.

  7. Recherche d'une clique maximum
  8. La recherche se fait en deux fois. On recherche d'abord une clique maximale, puis on cherche s'il existe une clique plus grande. A chaque étape, on élimine les noeuds dont le degré n'est pas suffisant. Globalement, l'algorithme est le suivant :

Démonstration

Fichier "graph"

L'exécution de "make test" construit un graphe à partir du fichier graph :
8
5	1	3	4	5	7
3	0	6	2
2	1	6
4	0	4	5	7
4	0	3	5	7
4	0	3	4	7
2	1	2
4	0	3	4	5
Le format est le suivant :
<Nombre de sommets>
<Sommet 0>
<Sommet 1>
...
<Sommet n-1>
Où chaque sommet est défini par une ligne :
<Nombre de sommets adjacents> <adjacent 0> <adjacent 1> ...
Le graphe utilisé est le suivant :

Résultats

Résultats Commentaires
Printing
#Vertices : 8
0 : 5 connection :  1  3  4  5  7 
1 : 3 connection :  0  2  6 
2 : 2 connection :  1  6 
3 : 4 connection :  0  4  5  7 
4 : 4 connection :  0  3  5  7 
5 : 4 connection :  0  3  4  7 
6 : 2 connection :  1  2 
7 : 4 connection :  0  3  4  5 
Converting
 .  X  .  X  X  X  .  X 
 X  .  X  .  .  .  X  . 
 .  X  .  .  .  .  X  . 
 X  .  .  .  X  X  .  X 
 X  .  .  X  .  X  .  X 
 X  .  .  X  X  .  .  X 
 .  X  X  .  .  .  .  . 
 X  .  .  X  X  X  .  . 
Highest degree : 5
Maximal clique
{ 0  3  4  5  7 }
Maximum clique
{ 0  3  4  5  7 }


Affichage du graphe







Affichage sous forme de table 
d'adjacence







Degré maximal : 5 --> Noeud 0

La recherche d'une clique maximale
donne immédiatement LA clique 
maximum.

Visualisation du résultat

Sources

  1. TAR.GZ archive
  2. Comme toutes les sources sur mes pages web, l'archive fournie ici est sensée fonctionner en l'état.
    > tar zxf matchGraph.tgz
    > cd matchGraph
    > make
    > make test
    

  3. Fichiers