Mathématiques du traitement du signal:grapheur

Un livre de Wikibooks.

Sections

[modifier] Grapheur

Un grapheur est un système informatique permettant de manipuler des graphes de traitements algorithmiques. Ils rendent possible le chaînage (l'assemblage) de modules (ou noeuds) algorithmiques, ainsi que leur exécution.

Un chapitre du mémoire d'habilitation à diriger les recherches de Jérôme Lacaille est très éclairant sur les grapheurs.

[modifier] Exemple de grapheur en langage R

Un grapheur simple en langage R est disponible sous licence GNU sur le site PhiMaTeX de sourceforge ; sa dernière version est téléchargeable ici.

Ce grapheur est commenté afin d'exposer les points nécessaires au bon fonctionnement d'un tel système.

[modifier] Format du graphe de traitement

Dans le cadre d'une implémentation en R, un graphe de traitement va être incarné par une liste de noeuds. Chaque noeud représentra un traitement. Il y aura un noeud supplémentaire (pompeusement appelé global-node) qui contiendra des informations globales sur le graphe de traitement (comme son mode d'exécution courrant, ou le dernier chaînage exécuté).

Chaque noeud va avoir plusieurs propriétés, qui vont permettent de le décrire ; le minimum est :

  • un numéro d'identifiant unique : id
  • le nom du noeud (name), qui permet de s'y référer plus simplement que par son numéro d'id
  • la fonction algorithmique attachée au noeud : rfun
  • les paramètres du noeud : params, structuré en une liste de couples nom-valeur (name x value)
  • ses connections vers d'autres noeuds : coutput
  • ses connections provenant d'autres noeuds : cinput ; il s'agit d'une matrice N \times 2 dont la nième ligne contient, pour la connection n, le nom du module pointé (ou pointeur), suivi du numéro de la connection concernée
  • sa mémoire interne : memory
  • la valeur du signal de sortie, lorsque c'est appliquable : outputs
Description

Il existe d'autres propriété, qui sont manipulées par le grapheur lui-même :

  • verbose : qui détermine le niveau des sorties relatives au noeud qui seront dans le log
  • isStatic : qui fige le noeud
  • reset : qui signale que le noeud est en mode reset (cf plus loin)
  • buffer : qui signifie que le noeud est en mode buffeur

ces propriétés ne doivent être manipulées que par le grapheur.

En outre, le noeud global a des propriétés particulières, qui permettent au grapheur de savoir où il en est dans les traitements.

[modifier] Manipulation des noeuds

Fabrication d'un noeud vide

# make node
makeNode <- function( id, ...) {
 z<-list(...);
 if(is.list(id)) {
   z$id = length(id)+1;
 }
 else {
   z$id = id;
   }
 return(z)
}

connecter deux noeuds au sein d'une liste de noeuds il s'agit de remplir les propriétés cinput et coutput des noeuds respectifs.

# connect nodes
connectNodes <- function( listOfNodes, first, second, inputField="cinput", outputField="coutput") {
 if( length(first)==1 )
   first = list(first, 1);
 if( length(second)==1 )
   second = list(second, 1);
 firstId  = getNodeId( listOfNodes, first1);
 secondId = getNodeId( listOfNodes, second1);
 out1     = listOfNodesfirstIdoutputField;
 in2      = listOfNodessecondIdinputField;
 out1     = rbind(out1, c(secondId, second2));
 in2      = rbind(in2 , c(firstId,  first2));
 listOfNodesfirstIdoutputField = out1;
 listOfNodessecondIdinputField = in2;
 return( listOfNodes)
}

[modifier] Manipulation et exécution du graphe

[modifier] Factorisation des fonctions

[modifier] Exemples commentés

Voici la version graphique de l'enchaînement de traitements que nous allons suivres grâce à rgraph.r:

Gr-example-01.jpg

The interface allowing to import graphml graphs (drawn by yed, using its graphml module) into rgraph is available in awk at PhiMaTeX.