Puede darse el caso de que encuentres alguna incompatibilidad en tu código o proyecto, recuerda probar siempre en un entorno de testing antes subir el código al proyecto final.
Solución:
La máquina de estado finito estándar contiene solo un estado actual. Mientras que en las redes de Petri, múltiples ubicaciones, más o menos comparables con estados en una máquina de estados finitos, pueden contener uno o más tokens. Una máquina de estados finitos tiene un solo subproceso, mientras que una red de Petri es concurrente.
En una máquina de estados finitos, el estado activo cambia en respuesta a un evento. En una red de Petri, las transiciones se ejecutan tan pronto como todas las ubicaciones de entrada contienen al menos un token.
Una máquina de estados finitos se puede considerar como un caso especial de una red de Petri.
En general, recomendaría usar una máquina de estados finitos si su proceso, o la parte que desea representar, es de un solo subproceso: los ingenieros de software probablemente estén más familiarizados con las máquinas de estados finitos; y hay más herramientas para convertir una máquina de estados finitos en una implementación.
Use una red de Petri solo cuando necesite concurrencia o expresividad adicional. O cuando está modelando una planta industrial donde la mitad de los productos se transforman en productos o cuando su audiencia está más familiarizada con esta imagen.
Quizás las redes de Petri también se puedan usar para modelar, visualizar sistemas simultáneos masivos en ejecución, como arquitecturas de microservicios, servicios confiables de Azure Service Fabric y actores confiables, servicios que se ejecutan en Kubernetus, Azure Function y AWS Lambda.
Además, hay más investigación teórica sobre las redes de Petri y su uso que sobre las máquinas de estados finitos (tenga en cuenta que, como dije antes, las máquinas de estados finitos son reducibles a redes de Petri).
En State Machines, el estado es global. Dados dos estados, todo lo que puede decir es “estos estados son diferentes”. En las Redes de Petri, el estado está estructurado por lugares. El estado es una marca, que dice cuántas fichas hay en cada lugar. Dadas dos marcas, puede compararlas y decir “son iguales en los lugares X, Y, Z pero difieren en los lugares U, V, W”.
Al definir una FSM, debe observar cada estado individualmente y determinar las posibles transiciones a otros estados. Cada transición en una red de Petri representa un grupo completo de transiciones en el gráfico de accesibilidad subyacente. Por ejemplo, una transición de Red de Petri podría decir: De cada marca que tenga una ficha en P1 y una ficha en P2, este modelo puede llegar a una marca que tenga una ficha menos en P1 y una ficha menos en P2, pero una ficha más. en P3. Si el gráfico de accesibilidad tiene 8 u 800 marcas con esa propiedad, la única transición de la red de Petri representa 8 u 800 transiciones en el gráfico de accesibilidad.
En los modelos Petri Net, puede crear invariantes de transición. Esos son ciclos en el gráfico de accesibilidad. Luego, puede poner más tokens en la marca inicial del modelo, y la cantidad de estados en el gráfico de accesibilidad explota. Sin embargo, su estructura sigue dada por los mismos ciclos que en un modelo con menos tokens, y el modelo de la Red de Petri sigue siendo comprensible. Por ejemplo, piense en un sistema Cliente/Servidor. Tiene lugares para los Clientes, lugares para los Servidores, lugares para los mensajes que fluyen de un lado a otro. Luego, solo ingresa tokens para la cantidad de Clientes y Servidores que desea modelar. Se cambian fácilmente.
En cuanto a cuándo usar qué, estoy de acuerdo con Kasper van den Berg.
- Si tiene un problema que es lo suficientemente pequeño como para manejarlo con un FSM, use un FSM. ¿Quizás hasta dos docenas de estados?
- Si tiene un problema que naturalmente se asigna a un FSM, utilice un FSM. Probablemente usará un algoritmo para construir el FSM en tales casos. Por ejemplo, analizar la entrada con expresiones regulares. (Por cierto, muchas bibliotecas de expresiones regulares tienen extensiones que requieren al menos una máquina de pila para su procesamiento).
- Si necesita crear un modelo para subsistemas distinguibles que interactúen entre sí, use Redes de Petri. Luego, puede tener un conjunto de lugares para cada subsistema, mientras que una FSM requerirá que cree un nuevo estado para cada combinación posible de cada subestado en cada subsistema.
Recuerda algo, que tienes la capacidad de valorar este post si te fue de ayuda.