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.
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.
Pour représenter un aiguillage, il suffit de rajouter une troisième voie à une jonction.
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 :
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.
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).
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…
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 :
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:
class ÉlementDeVoie:
class PièceDeVoie:
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é:
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:
Lors de sa construction, les éléments à fournir sont :
Pièces de voies : c’est un dictionnaire dont le nom de la pièce sert de clé
| 0 | 0, 0 |
| 1 | 2, 0 |
| 0 | 0, 0 |
| 1 | 1, 1 |
| 0 | 0, 0 |
| 1 | -1, 1 |
| 0 | 0, 0 |
| 1 | -1, -1 |
| 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
Jonctions : un dictionnaire comportant pour chaque coordonnée ces valeurs :
Ces données peuvent êtres mises en cache, et éventuellement calculées à la volée, ou lors du chargement.
Table éléments / jonctions :
Extrémités :
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)
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 :
À ce moment, l’application peut entamer la phase de calcul des méta-données nécessaires au parcours.
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é.