Máquina de Estado Finita (FSM)

La abstracción de software nos permite definir un problema complejo con un conjunto de principios abstractos básicos. Si nosotros podemos construir nuestro software usando estos bloques entonces tendremos un mejor entendimiento del problema y su solución.

Una máquina de estado finita es una abstracción que describe la solución a un problema, algo así como un algoritmo. A pesar que un algoritmo el cual nos da una secuencia de pasos que seguimos para poder darnos cuenta de la solución de problema, una máquina de estado finita describe el sistema lee las entradas y genera adecuadamente las salidas.

Ahora diseñaremos una máquina de estado finita que controle una intersección de dos avenidas, el objetivo es maximizar el flujo de tráfico, minimizar el tiempo que la luz roja está encendida y evitar accidentes.

En nuestro circuito tenemos dos sensores (Norte y Este) y las luces que controlan el tráfico.

Ahora definiremos los estados de las luces.

Es momento de establecer reglas a nuestro sistema:

  • Si ningún auto está transitando la luz permanece en verde.
  • Para cambiar de verde a rojo se tendrá que mostrar el amarillo por 0.5 segundos.
  • La luz verde como mínimo dura 3 segundos.
  • Si solo hay autos en una sola dirección, se debe mantener la luz verde.
  • Si hay autos en ambas direcciones, se entra en un ciclo equitativo.

Planteamos gráficamente el problema:

Finalmente realizamos nuestra tabla de transición de estados:

El cuadro se lee de la siguiente manera:

  • Nos encontramos en goN(Nombre) y tenemos la entrada 00, entonces el siguiente estado es goN.
  • Nos encontramos en waitN(Nombre) y tenemos la entrada 01, entonces el siguiente estado es goE.
  • Nos encontramos en goE(Nombre) y tenemos la entrada 10, entonces el siguiente estado es waitE.

Otra forma de lograr el mismo resultado es usando funciones en una máquina de estado, a continuación se muestra el mismo ejemplo pero esta vez usando funciones.

Descargas: