Réseau de Petri

À propos des réseaux de Petri

Un réseau de Petri est le formalisme fondateur pour modéliser la concurrence, la synchronisation et le flux de ressources dans les systèmes à événements discrets — inventé par Carl Adam Petri en 1962 et utilisé depuis lors en informatique, en automatique, en production industrielle et en modélisation de processus métier. La notation est simple et immédiatement reconnaissable : une place est un cercle, une transition est une barre, un arc porte un poids, et l'état dynamique du système est matérialisé par des jetons placés dans les places.

Ce qui distingue le moteur petri de Schematex d'une bibliothèque de formes à glisser-déposer, c'est qu'il comprend la dynamique. Il connaît le marquage (combien de jetons chaque place contient), calcule quelles transitions sont activées (chaque place d'entrée possède au moins le poids d'arc requis en jetons — mis en évidence en vert), et peut tirer une transition pour produire le marquage suivant. Le rendu est en aval de la sémantique — la même posture qu'adopte pert pour l'ordonnancement. Distinct des diagrammes d'état (un état actif, pas une distribution de jetons), du sfc (un réseau de Petri sûr restreint pour les automates programmables), et du bpmn (dont la sémantique des jetons est définie par réduction à des réseaux de Petri de type workflow).

petri·§
↘ preview
100%
Petri net — Classic 4 places, 2 transitions, 7 arcs. Marking {P1:1, P3:2, P4:1}. Enabled: T1. Classic P1 P2 P3 P4 T1 T2
UTF-8 · LF · 14 lines · 151 chars✓ parsed·0.9 ms·5.1 KB SVG

Avec le marquage initial, T1 est activée (ses entrées P1 et P4 contiennent chacune un jeton) et reçoit donc l'anneau vert ; T2 ne l'est pas (P2 est vide). L'arc de retour P4 -> T1 est tracé sous forme de courbe à rebours.


1. Votre premier réseau

Chaque document commence par le mot-clé petri et un titre optionnel, puis déclare les places et les transitions avant de les relier par des arcs :

petri "Minimal"
  place P1 *1
  transition T1
  place P2
  P1 -> T1
  T1 -> P2
  • place <id> — un cercle. *1 définit le nombre initial de jetons (le marquage).
  • transition <id> — une barre (un événement / une action).
  • <a> -> <b> — un arc orienté. Les arcs sont bipartites : chaque arc va d'une place vers une transition ou d'une transition vers une place, jamais place→place ou transition→transition. Si vous en écrivez un incorrect, le moteur vous indique la ligne concernée.

Contrairement à certains diagrammes Schematex, les nœuds ne sont pas déclarés automatiquement à partir des arcs — car un identifiant non déclaré ne peut pas être typé de manière sûre comme place ou transition. Un arc référençant un nœud inconnu produit une erreur lisible.


2. Marquage et jetons

Le marquage indique combien de jetons chaque place contient. Trois façons équivalentes de le définir :

place P1 *3            # raccourci *n
place P2 tokens: 3     # explicite
place P3 •••           # points littéraux (1 à 4)

Ou définir plusieurs marquages à la fois avec une ligne marking: :

marking: P1=3, P3=2

Les jetons sont rendus sous forme de points (jusqu'à 4, disposés en grille) et sous forme de chiffre au-delà. Forcez un style avec tokens: dots | count | auto (par défaut auto).


3. Transitions : immédiates et temporisées

transition fast                 # immédiate — une barre pleine (par défaut)
transition slow timed rate: 0.8 # temporisée — une boîte creuse avec un label de taux λ

Les transitions immédiates tirent en temps zéro et se représentent par la barre pleine classique ; les transitions temporisées (la convention GSPN) se représentent par une boîte creuse et portent un rate: optionnel (λ). Une transition avec un rate: est automatiquement considérée comme temporisée. prio: n définit une priorité, et un [guard] est rendu sous forme de label (non évalué en v0.1).


4. Types d'arcs

Quatre têtes d'arc couvrent le vocabulaire standard de la concurrence :

P -> T              # arc standard (tête de flèche pleine)
P -> T weight: 2    # poids > 1 est étiqueté (weight: n ou *n)
P -o T              # inhibiteur — activé uniquement si la place est vide (tête cercle creux)
P -- T              # lecture / test — teste la présence sans consommer (sans tête)
P => T              # remise à zéro — vide la place lors du tir (double tête)

Les arcs inhibiteurs et de remise à zéro sont place→transition uniquement — le parseur rejette la direction inverse.


5. Capacité

Une place peut être plafonnée. Un tir qui provoquerait un débordement est désactivé, et la place est représentée avec une bordure en pointillés et un label K=n :

place Buffer capacity: 3

6. La dynamique : activées et tir

Le moteur calcule la sémantique à chaque rendu :

  • Les transitions activées (chaque entrée satisfaite ; entrées inhibitrices vides ; aucune sortie ne débordera la capacité) reçoivent un anneau vert.
  • Les transitions mortes — celles qui ne peuvent jamais tirer depuis le marquage actuel — sont atténuées.
  • Une ligne fire: rejoue une séquence de tirs et rend le marquage résultant :
petri
  place P1 *1
  transition T1
  place P2
  transition T2
  place P3
  P1 -> T1
  T1 -> P2
  P2 -> T2
  T2 -> P3
  fire: T1

Après le tir de T1, le jeton s'est déplacé de P1 → P2, et maintenant T2 est la transition activée. Le <desc> SVG enregistre le marquage, l'ensemble des transitions activées, et toute sous-classe détectée (machine d'état / graphe marqué / réseau de workflow).


7. Mise en page et thèmes

layout: lr     # gauche-à-droite (par défaut)
layout: tb     # haut-en-bas

Les places et transitions se placent automatiquement sur des couches alternées ; les cycles sont détectés et leurs arcs de retour tracés sous forme de courbes à rebours. Trois thèmes :

  • default — bleu-gris maison, avec le vert réservé aux transitions activées et le rouge aux inhibiteurs.
  • monochrome — le fidèle rendu du manuel Murata-1989 ; les transitions activées se distinguent par un double anneau noir (la couleur est remplacée par la forme).
  • dark — Catppuccin Mocha.

Les labels CJK et les guillemets 「…」 / "…" sont analysés correctement :

petri "生产流程"
  place 原料 *2 「原材料」
  transition 加工
  place 成品
  原料 -> 加工 weight: 2
  加工 -> 成品

Spécification complète : Référence du standard Petri Net.


Exemples associés

Scénarios prêts à l'emploi issus de la galerie d'exemples :

petri·§ Murata 1989 + ISO/IEC 15909-1 (place/transition net)
Petri net — Classic 4 places, 2 transitions, 7 arcs. Marking {P1:1, P3:2, P4:1}. Enabled: T1. Classic P1 P2 P3 P4 T1 T2
The classic Petri net — concurrency with feedback
Murata's canonical place/transition net — one transition forks a token into two concurrent branches that a second transition joins, with a feedback place closing the loop. The engine marks which transitions are enabled in the current marking.
education
petri·§ Murata 1989 / ISO-IEC 15909-1 (place/transition net)
Petri net — Mutual Exclusion — two processes, one resource 5 places, 4 transitions, 12 arcs. Marking {idleA:1, idleB:1, mutex:1}. Enabled: enterA, enterB. Mutual Exclusion — two processes, one resource idleA A idle idleB B idle mutex resource critA A critical critB B critical enterA exitA enterB exitB
Mutual exclusion with a shared resource
The canonical concurrency pattern as a Petri net — two processes competing for a single Mutex token. Either process may enter its critical section, but the shared token guarantees they never do so at the same time. Both entry transitions show as enabled until one fires and consumes the resource.
industrial & process
petri·§ Murata 1989 (place/transition net firing rule)
Petri net — After fire: T1 3 places, 2 transitions, 4 arcs. Marking {P2:1}. Enabled: T2. Class: state machine, workflow net. After fire: T1 P1 P2 P3 T1 T2
Firing a transition advances the marking
The same three-place net before and after firing — the `fire:` directive replays a transition, so the rendered marking is the state *after* the token moved from P1 to P2, and the engine now highlights T2 as the newly enabled transition.
education
petri·§ van der Aalst 1998 workflow nets (a Murata place/transition net)
Petri net — Order workflow 6 places, 4 transitions, 10 arcs. Marking {in:1}. Enabled: split. Class: workflow net. Order workflow in received pick invoice packed billed out shipped split pack bill ship
Order-fulfilment workflow net (WF-net)
A van der Aalst workflow net — a single source place and single sink place bracket an AND-split/join that runs picking and invoicing concurrently before shipping. The engine detects the WF-net structure and reports it in the SVG description.
business & operations
petri·§ Murata 1989 + Marsan 1995 (GSPN timed transitions)
Petri net — Producer / Consumer (bounded buffer) 4 places, 2 transitions, 8 arcs. Marking {pReady:1, free:3, cReady:1}. Enabled: produce. Class: marked graph. Producer / Consumer (bounded buffer) pReady producer ready free free slots used used slots K=3 cReady consumer ready produce deposit consume withdraw λ=0.8
Producer / consumer with a bounded buffer
The bounded-buffer producer/consumer pattern as a Petri net — complementary free/used slot places enforce the buffer size, a timed withdraw transition models the consumer's rate, and place capacity caps the buffer at three slots. Tokens flowing through free→used→free show backpressure as a structural property.
industrial & process

Found this useful?

Schematex is free, fully open source, and zero-dependency. A star helps other developers discover it.