¿Qué es una máquina de estado finito?

Una máquina de estados finitos es un conjunto de reglas que básicamente dicen “cuando la máquina está en estado [matemática] q_ \ text {old} [/ math] y recibe la entrada [math] w_ \ text {in} [/ math], debería producir la salida [math] w_ \ text {out} [/ math] y establecer el estado en [math] q_ \ text {new} [/ math] “. Una vez que tenga estas reglas (una para cada combinación de estado / entrada) y un estado inicial, tendrá una descripción de una máquina.

Aquí hay una máquina expendedora simple descrita como una máquina de estados finitos (crédito a ¿Qué es una máquina de estados finitos ?, que vale la pena leer).
Cada óvalo representa un estado, y las flechas describen la entrada que conduce al siguiente estado, así como la salida que genera.

El concepto FSM es ampliamente aplicable a una variedad de campos. Esto da como resultado muchas maneras diferentes de explicarlas, dependiendo de la aplicación, lo que puede ser muy confuso.

Mi campo es controles de máquina incrustados. En ese contexto, un FSM es un dispositivo (hardware o software) que responde a eventos externos y produce acciones. Las acciones generadas dependen de la historia pasada del sistema, es decir, su estado .

Los eventos son cosas como un interruptor de límite que se enciende.

Las acciones resultantes son cosas como encender una lámpara.

Imagine un simple interruptor de botón en una lámpara de escritorio. Cuando presiona el botón, la lámpara se enciende. Si lo presiona nuevamente, la lámpara se apaga. El mismo evento (presionar un botón) ha producido dos acciones diferentes. La acción que resulta de presionar un botón depende del historial pasado del sistema, es decir, del estado actual del sistema.

La lámpara tiene 2 estados, encendida o apagada. Ese es un número finito. De ahí la máquina de estados finitos .

Un estado no necesita ser un reflejo directo de la salida (el encendido o apagado de la lámpara). ¿Te imaginas un controlador que solo enciende la lámpara después de la sexta pulsación y luego se apaga después de la 17a pulsación? Tal FSM, además de ser moderadamente inútil, tendría 17 estados internos pero solo 2 condiciones de salida.

Mucho más útil sería un sistema con 10 botones de entrada que solo encenderá la lámpara si los botones se presionan en un cierto orden. Esto se está acercando a una de las definiciones “académicas” de un FSM: algo que procesa un flujo de símbolos de entrada y detecta patrones.

Hay mucho más en el sitio web de mi empresa.

Tabula es una herramienta de diseño y programación FSM basada en tablas:
http://www.splatco.com/tabula_s_

Aquí hay un tutorial sobre programación de FSM en BASIC:
http://www.splatco.com/fsm_tute/

Un ejemplo de una máquina de estado finito se puede encontrar en Tungsten Replicator Manager [1].

[1] http: //tungsten.svn.sourceforge