Red de Petri

Acerca de las redes de Petri

Una red de Petri es el formalismo fundamental para modelar la concurrencia, la sincronización y el flujo de recursos en sistemas de eventos discretos — inventada por Carl Adam Petri en 1962 y usada continuamente desde entonces en informática, ingeniería de control, manufactura y modelado de procesos de negocio. La notación es pequeña e inmediatamente reconocible: un lugar es un círculo, una transición es una barra, un arco lleva un peso, y el estado dinámico del sistema es una distribución de tokens que residen en los lugares.

Lo que hace diferente al motor petri de Schematex de una biblioteca de formas de arrastrar y soltar es que entiende la dinámica. Conoce un marcado (qué lugares tienen cuántos tokens), calcula qué transiciones están habilitadas (cada lugar de entrada tiene al menos el peso del arco en tokens — resaltadas en verde), y puede disparar una transición para producir el siguiente marcado. El renderizado es posterior a la semántica — la misma posición que pert adopta respecto a la planificación. Se distingue de los diagramas de estado (un estado activo, no una distribución de tokens), sfc (una red de Petri segura restringida para PLCs) y bpmn (cuya semántica de tokens se define por reducción a redes de Petri de flujo de trabajo).

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·1.2 ms·5.1 KB SVG

Con el marcado inicial, T1 está habilitada (sus entradas P1 y P4 cada una contiene un token) por lo que obtiene el anillo verde; T2 no lo está (P2 está vacío). El arco de retroalimentación P4 -> T1 se enruta como una curva de arco hacia atrás.


1. Tu primera red

Todo documento comienza con la palabra clave petri y un título opcional, luego declara lugares y transiciones antes de conectarlos con arcos:

petri "Minimal"
  place P1 *1
  transition T1
  place P2
  P1 -> T1
  T1 -> P2
  • place <id> — un círculo. *1 establece su conteo inicial de tokens (el marcado).
  • transition <id> — una barra (un evento/acción).
  • <a> -> <b> — un arco dirigido. Los arcos son bipartitos: cada arco va de lugar→transición o transición→lugar, nunca lugar→lugar o transición→transición. Si escribes uno incorrectamente, el motor te indica qué línea.

A diferencia de algunos diagramas de Schematex, los nodos no se declaran automáticamente desde los arcos — porque un id no declarado no puede tipificarse de forma segura como lugar o transición. Un arco que referencia un nodo desconocido es un error legible.


2. Marcado y tokens

El marcado es cuántos tokens tiene cada lugar. Tres formas equivalentes de establecerlo:

place P1 *3            # *n shorthand
place P2 tokens: 3     # explicit
place P3 •••           # literal dots (1–4)

O establece varios a la vez con una línea marking::

marking: P1=3, P3=2

Los tokens se renderizan como puntos (hasta 4, en una cuadrícula) y como numeral más allá de eso. Fuerza un estilo con tokens: dots | count | auto (predeterminado auto).


3. Transiciones: inmediatas vs. temporizadas

transition fast                 # immediate — a solid bar (the default)
transition slow timed rate: 0.8 # timed — a hollow box with a rate label λ

Las transiciones inmediatas se disparan en tiempo cero y se renderizan como la barra rellena clásica; las transiciones temporizadas (la convención GSPN) se renderizan como una caja vacía y llevan un rate: (λ) opcional. Una transición con rate: se trata automáticamente como temporizada. prio: n establece una prioridad, y un [guard] se renderiza como una etiqueta (no evaluada en v0.1).


4. Tipos de arcos

Cuatro cabezas de arco cubren el vocabulario estándar de concurrencia:

P -> T              # standard arc (filled arrowhead)
P -> T weight: 2    # weight > 1 is labelled (weight: n or *n)
P -o T              # inhibitor — enabled only while the place is empty (hollow-circle head)
P -- T              # read / test — tests presence without consuming (no head)
P => T              # reset — empties the place when the transition fires (double head)

Los arcos inhibidores y de restablecimiento son solo de lugar→transición — el analizador rechaza la dirección inversa.


5. Capacidad

Un lugar puede tener un límite. Un disparo que lo desbordaría queda deshabilitado, y el lugar se dibuja con un borde punteado y una etiqueta K=n:

place Buffer capacity: 3

6. La dinámica: habilitados y disparos

El motor calcula la semántica en cada renderizado:

  • Las transiciones habilitadas (toda entrada satisfecha; entradas inhibidoras vacías; ninguna salida desbordaría la capacidad) obtienen un anillo verde.
  • Las transiciones muertas — aquellas que nunca pueden dispararse desde el marcado actual — se atenúan.
  • Una línea fire: reproduce una secuencia de disparos y renderiza el marcado resultante:
petri
  place P1 *1
  transition T1
  place P2
  transition T2
  place P3
  P1 -> T1
  T1 -> P2
  P2 -> T2
  T2 -> P3
  fire: T1

Después de disparar T1, el token se ha movido de P1 → P2, y ahora T2 es la transición habilitada. El <desc> SVG registra el marcado, el conjunto habilitado y cualquier subclase detectada (máquina de estados / grafo marcado / red de flujo de trabajo).


7. Diseño y temas

layout: lr     # left-to-right (default)
layout: tb     # top-to-bottom

Los lugares y las transiciones se ubican en capas alternas automáticamente; los ciclos se detectan y sus arcos de retroalimentación se enrutan como curvas de arco hacia atrás. Tres temas:

  • default — azul-gris de paleta, con verde reservado para habilitado y rojo para inhibidor.
  • monochrome — el aspecto fiel del libro de texto Murata-1989; habilitado se muestra como un anillo negro doble (el color cae de nuevo a la forma).
  • dark — Catppuccin Mocha.

Las etiquetas CJK y las comillas 「…」 / "…" se analizan correctamente:

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

Especificación completa: Petri Net Standard Reference.


Ejemplos relacionados

Escenarios listos para usar de la galería de ejemplos:

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.