Représentation d'un réseau en mémoire

Description fonctionnelle

Jonctions et voies

Un réseau est constitué d’un ensemble de voies, elles mêmes reliées par des jonctions. Une voie comporte deux extrémités.

Deux voies et une jonction

  1. élément de voie
  2. jonction

Une boucle

Ces éléments se combinent de telle sorte qu’une extrémité voie ne peut être reliée qu’à une jonction. Par contre, une jonction peut être reliée par plusieurs voies.

Une boucle simple

  1. voie droite
  2. jonction
  3. voie courbe

Aiguillages et appareils de voie

Pour représenter un aiguillage, il suffit de rajouter une troisième voie à une jonction.

Voie avec deux aiguillages

  1. voies
  2. jonctions
  3. jonctions avec trois voies, qui forment un aiguillage

Orientation des voies et des jonctions

On ne peut pas représenter un réseau avec uniquement des arcs des et des noeuds dans un graphe. Il manque une information d’orientation des voies les unes par rapport aux autres. Prenons un exemple :

Vue agrandie d'un aiguillage

Lors du passage d’un train, certains cheminements sont possibles, et d’autres ne le sont pas.

A → B Possible
A → C Possible
B → A Possible
B → C Impossible
C → A Possible
C → B Impossible

Cela est dû à la géométrie et la conception des “voies” dans le monde ferroviaire, qui ne permet pas, mécaniquement, ce genre de passage1). Les jonctions doivent donc regrouper les voies dans deux ensembles distincts afin d’éviter la possibilité des situations B → C et C → B.

Passages à niveau

L’un des intérêts de la voie à deux fils de rail est sa capacité à autoriser des passages à niveau, c’est à dire deux voies qui se croisent à la même hauteur, interdisant le passage sur l’une des voies lorsque l’autre est occupée. Cette possibilité est particulièrement intéressante dans le monde réel où le coût d’une infrastructure en saut de mouton2) est bien plus élevé que la mise en place d’une signalisation spécifique pour éviter les prises en écharpe3).

Deux voies se croisent et forment un passage à niveau

Sur ce schéma, les deux voies se croisant n’ont aucune jonctions communes, et le système ne peut en aucun cas déterminer que l’une ne peut être traversée sans que l’autre soit libre. Cette information doit donc être rajoutée dans le modèle de données pour être exploitée.

D’autres situations pourront également faire appel à cette possibilité de lier entre elle des voies qui n’ont pas de liens avec une jonction. Même si les outils pourront de façon automatique déterminer ces liaisons entre voie, l’utilisateur final sera à même de fixer lui même les contraintes qu’il souhaite.

Ces informations de liaisons seront principalement utilisées par les systèmes de signalisation automatique, et / ou de pilotage automatique…

Description technique

Un réseau est composé d’un ensemble de jonctions et d’un ensemble de voies. Chaque jonction peut être représentée de la façon suivante :

Éléments fournis par la sauvegarde

Ces éléments sont fournis par le mécanisme de sauvegarde. On parle ici de classe, mais il pourra s’agir de n’importe quelle structure permettant de stocker ces informations. Ne sont évoqués que les éléments concernant directement le réseau. Une sauvegarde contiendra certainement d’autres informations évoqués ultérieurement.

classe Jonction:

  • coordonnée : un objet immuable et hachable (typiquement, un tuple)
  • éléments de voie
  • chemins possibles : une liste de tuples contenant chacun une référence à l’élément avant le noeud et après.
  • chemin sélectionné (position de l’aiguille)

class ÉlementDeVoie:

  • géométrie de l’élément : toute information sur laquelle des calculs peuvent être effectués, fournie par une pièce de voie
  • numéro unique de voie : c’est une clé unique (est ce nécessaire ?)

class PièceDeVoie:

  • longueur
  • table de tracé : une table comprenant pour chaque valeur entre 0 et 1 la coordonnée à appliquer. 0 étant le point initial de la pièce et 1 le point final. Le nombre de valeur comprit dans cette table est à ajuster manuellement. Les valeurs non inclues seront interpolées. 4)
  • informations de traçage : tout ce qui concerne un éventuel affichage, dépendant de cet affichage. actuellement :
    • représentation de la voie sous forme d’image (par la suite, il pourra s’agir d’un ensemble d’images à superposer)
    • coordonnées, sur cette image, du début et de la fin de la voie (valeur 0 et 1 de la position sur la voie donnée par la table de tracé)5)
    • un nom affichable par l’éditeur

Éléments calculés

Lors du chargement de la sauvegarde, le modèle devra calculer automatiquement les éléments suivants :

Une extrémité est l’un des bouts d’un élément de voie. Elle permet de déterminer le sens de circulation lors d’un parcours du réseau.

class Extrémité:

  • jonction de cette extrémité
  • élément de voie actuel se dirigeant vers la jonction
  • extrémité suivante : suivant la position des aiguilles
  • extrémités suivantes
  • extrémité précédente : correspond en fait à un changement de sens
  • extrémités précédentes
  • inversion des coordonnées : si vrai, pour parcourir la pièce, l’indice de parcours évoluera de 1 à 0

Lors d’un parcours du réseau, ce dernier fourni un élément Position qui permet de se déplacer sur le réseau. Il s’agit d’un curseur sur celui-ci et rend différents services comme la position réelle d’un train, mais peut également être utilisé pour faire une recherche de parcours ou n’importe quel autre calcul nécessitant de parcourir le réseau.

Une position peut ensuite être définie de la façon suivante :

class Position:

  • élément de voie
  • position sur la voie : entre 0 et 1 (ou entre 1 et 0 suivant la valeur inversion de donnée de l’extrémité suivante)
  • extrémité suivante

Lors de sa construction, les éléments à fournir sont :

  • jonction sur laquelle se placer
  • élément de voie à prendre
  • position sur cet élément de voie par rapport à la jonction

Exemple

Prenons le réseau suivant :

Un réseau simple avec une boucle de retournement

Données fournies

Pièces de voies : c’est un dictionnaire dont le nom de la pièce sert de clé

  • droite hz (droite horizontale), utilisée deux fois traçage :
0 0, 0
1 2, 0
  • courbe ES (courbe est vers sud), utilisée deux fois
0 0, 0
1 1, 1
  • courbe SO (courbe sud vers ouest)
0 0, 0
1 -1, 1
  • courbe ON (courbe ouest vers nord)
0 0, 0
1 -1, -1
  • courbe NE (courbe nord vers est)
0 0, 0
1 1, -1

Éléments de voies : c’est un dictionnaire dont la clé est le numéro de voie et la valeur une instance d’Élément de voie. Seul la valeur intéressante, c’est à dire le nom de la pièce de voie, est indiqué ici

  • 1 → droite hz
  • 2 → droite hz
  • 3 → courbe ES
  • 4 → courbe SO
  • 5 → courbe ON
  • 6 → courbe NE
  • 7 → courbe ES

Jonctions : un dictionnaire comportant pour chaque coordonnée ces valeurs :

  • 0, 0
    • éléments : 1
    • chemins : aucun
  • 2, 0
    • éléments : 1, 2, 7
    • chemins : 1-2, 1-7
  • 4, 0
    • éléments : 2, 6, 3
    • chemins : 2-3, 6-3
  • 5, 1
    • éléments : 3, 4
    • chemins : 3-4
  • 4, 2
    • éléments : 4, 5
    • chemins : 4-5
  • 3, 1
    • éléments : 7, 6, 5
    • chemins : 7-5, 6-5

Données calculées

Ces données peuvent êtres mises en cache, et éventuellement calculées à la volée, ou lors du chargement.

Table éléments / jonctions :

  • 1 : 0, 0 et 2, 0
  • 2 : 2, 0 et 4, 0
  • 3 : 4, 0 et 5, 1
  • 4 : 5, 1 et 4, 2
  • 5 : 4, 2 et 3, 1
  • 6 : 3, 1 et 4, 0
  • 7 : 2, 0 et 3, 1

Extrémités :

  • (0, 0), 1 (à la jonction 0, 0 se trouve l’élément 1)
    • jonction : 0, 0
    • jonction suivante : 2, 0
    • élément actuel : 1
    • éléments suivants : 2, 7
    • inversion des coordonnées : faux (en arrivant sur cette extrémité, le parcours va de 0 à 1)
  • (2, 0), 1
    • jonction : 2, 0
    • jonction suivante : 0, 0
    • élément actuel : 1
    • éléments suivants : rien
    • inversion des coordonnées : vrai (en arrivant sur cette extrémité, le parcours va de 1 à 0)
  • (2, 0), 2
    • jonction : 2, 0
    • jonction suivante : 4, 0
    • élément actuel : 2
    • éléments suivants : 3
    • inversion des coordonnées : faux
  • (2, 0), 7
    • jonction : 2, 0
    • jonction suivante : 3, 1
    • élément actuel : 7
    • éléments suivants : 5
    • inversion des coordonnées : faux
  • (4, 0), 2
    • jonction : 4, 0
    • jonction suivante : 2, 0
    • élément actuel : 2
    • éléments suivants : 1
    • inversion des coordonnées : vrai
  • (4, 0), 3
    • jonction : 4, 0
    • jonction suivante : 5, 1
    • élément actuel : 3
    • éléments suivants : 4
    • inversion des coordonnées : faux
  • (4, 0), 6
    • jonction : 4, 0
    • jonction suivante : 3, 1
    • élément actuel : 6
    • éléments suivants : 5
    • inversion des coordonnées : vrai

etc.

Calcul des valeurs d’inversions :

jonction courante + tableTraçageÉlémentCourant[1] != jonction suivante

Pour (2, 0), 7, on a :

L’élément courant est 7, c’est une courbe ES. La jonction courante est 2, 0. La jonction suivante est 3, 1. La valeur est donc :

(2, 0) + (1, 1)  != (3, 1) # Faux, les deux coordonnées sont égales.

(4, 0), 6, on a :

L’élément courant est 6, c’est une courbe NE. La jonction courante est 4, 0. La jonction suivante est 3, 1. La valeur est donc :

(4, 0) + (1, -1)  != (3, 1) # Vrai, (5, -1) != (3, 1)

Aspects protocolaires

La création d’un réseau en mémoire nécessite une phase de calcul qui peut potentiellement être longue. Aussi il est nécessaire d’indiquer les phases où le réseau sera définit en mémoire pour éviter un calcul de ces données à chaque ajout de pièce.

Les différentes étapes sont donc :

  1. notification de chargement d’un réseau
  2. ajout des pièces une par une
  3. notification de fin de chargement des pièces

À ce moment, l’application peut entamer la phase de calcul des méta-données nécessaires au parcours.

Représentation d'une voie en mémoire

Une voie est un chemin continu allant d’un point à un autre. Ces points sont des jonctions. Chaque jonction dispose de ses propres coordonnées, et chaque coordonnée ne peut connaître qu’au plus une jonction. Chaque voie connait pur chacune de ses extrémités, la jonction qui accueil cette extrémité.

1) D’où d’ailleurs la mise en place de manoeuvres spécifiques pour contourner cette limitation.
2) Une voie passe sur une autre grâce à un petit pont ou tunnel, donc sans réel croisement
3) collisions latérales
4) À noter qu’il serait difficile d’inclure une véritable fonction, sans devoir préciser sa grammaire ou faire un choix sur l’interpréteur à utiliser.
documentation/conception/mdd/reseau.txt · Dernière modification: 24/09/2011 18:24 par Yvan
 
Sauf mention contraire, le contenu de ce wiki est placé sous la licence suivante : CC Attribution-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki