Sei sulla pagina 1di 33

Maquinas de Estados

Finito
Maquinas de estado

Las máquinas de estado son una parte integral de la


programación de software. Las máquinas de estado
hacen al código más eficiente, más fácil de depurar
y ayudan a organizar el flujo del programa

La primera ventaja de utilizar las máquinas de estado,


es que promueve buenas técnicas de diseño de
firmware.
FSM
Una Máquina de Estado Finita (FSM = Finite
State Machine) está basada en la idea de que
hay un número finito de estados para un
sistema determinado.
Variable de Estado
 Las máquinas de estado requieren una Variable de
Estado (State Variable - SV). La variable de estado
es un apuntador que mantiene un control del estado
en que se encuentra el microcontrolador y dirige el
flujo del programa al modulo de software
correspondiente.

 La variable de estado puede modificarse en los


módulos (o estados) de software por si misma o por
una función externa
Diseño de una FSM
 Cuando se comience a implementar una aplicación, piense sobre que
estados son necesarios para que funcione la aplicación.
 Haga una lista de todas las piezas, o estados, de una aplicación y después
explore como se relacionan entre sí.
 Una vez hecho esto se debe identificar el primer Estado
 Acto seguido debemos responder la siguiente pregunta:

¿Que condición se necesita para salir de este estado y que estado es el


siguiente?

 Dependiendo de lo que suceda en un estado en particular, la variable de


estado se incrementa o decrementa con el objetivo de pasar o saltar al
siguiente estado.
 Se sugiere la implementación de un diagrama de flujo.
 Finalmente se debe de crear lo módulos de software de cada uno de los
estados de acuerdo a nuestro diagrama de flujo.
Diseño de una FSM
Las máquinas de estado tienen una característica muy
importante: Siempre regresan a un punto en el código, en el
cual se canaliza el flujo del programa por la variable de
estado, al correspondiente modulo de software.

Esto provee varias ventajas: Primero, esta característica hace


simple el llamado de tareas repetitivas:

 Refrescar el perro guardián (watchdog timer) de un microcontrolador,


 Revisar la veces que se presiona un botón de entrada.
 Comunicarse con una computadora que requiere una comunicación
periódica.
Posible falla
 Un ejemplo de una falla, sería si la variable de
estado (SV) es modificada incorrectamente en uno
de los estados. Si esto sucede, un estado incorrecto
será llamado la próxima vez que el flujo del
programa regrese al punto de inicio.
 De cualquier manera, al estar monitoreando la
variable de estado , será más fácil ver cuando un
cambio no intencional se haga a la SV y en cual
estado la SV fue modificada incorrectamente.
 Es la representación abstracta de un objeto.
En general, es cualquier carácter que
represente algún elemento. Ejs: 1, a, .

 Es un conjunto finito de símbolos. Debe


existir al menos un símbolo en el alfabeto
es decir, el alfabeto no puede ser el
conjunto vacío. Notación: Este conjunto se
denota con .
 CADENA: Es una secuencia de símbolos de un
alfabeto. Se dice que una cadena  sobre un
alfabeto  es tal que *, siendo * el
conjunto formado por todas las posibles
cadenas que pueden formarse con los
elementos de . Una cadena no puede ser
infinita: no es un subconjunto de *, sino uno
de sus elementos. Ejemplo: Si ={0,1},
entonces *={1,0,00,01,10,11,100,…} y una
posible cadena * es 101011010.
 LENGUAJE: Es un conjunto de cadenas, las
cuales deben estar formadas sobre un
alfabeto . Ejemplo: Si ={0,1} es un
alfabeto, L = {100, 001, 00, 111} es un
lenguaje y las cadenas ,* son,
respectivamente, 1010 y 100, entonces, se
tiene que   L    L.
 ESTADO: Es la situación o las características
de un objeto en un momento dado. Un objeto
no pude estar en más de un estado al mismo
tiempo.
 Los autómatas se caracterizan por tener un
estado inicial. En dicho estado, reciben una
cadena de símbolos, cambian de estado por
cada elemento o permanecen en el mismo
estado. También tienen un conjunto de
estados finales o aceptables, que indican si
una cadena pertenece al lenguaje al final de
una lectura.
 Un AFD está definido por una 5 – upla como
sigue: A = (Q, qo, F, , ), donde:
Q es un conjunto finito de estados
qo es el estado inicial. Luego, qo  Q. Debe
ser uno, y sólo uno. En consecuencia, qo  Q.
F es un conjunto finito de estados finales. En
consecuencia, F  Q. Puede ser qo  F.
 es el alfabeto finito de entrada.
 es una función de Q X   Q.  se denomina
función de transición.
 EJEMPLO:
Q = {qo, q1, q2, q3, q4}
Estado inicial: qo.
F = {q3}
= {x, y}
: Qx  Q/ (qo,x) = q1; (qo,y) = q4;
(q1,x)= q1; (q1,y)= q2; (q2,x)=q3; (q2,y)= q2;
(q3,x) = q1; (q3,y) = q2; (q4,x) = (q4,y) = q4.
 Para el ejemplo dado, es el siguiente grafo
orientado y etiquetado:

x y
x y
q0 q1 q2
x
x y
y
q3
q4

x,y
x y
qo q1 q4
q1 q1 q2
q2 q3 q2
q3 q1 q2
q4 q4 q4
 Una cadena se acepta, si finaliza en un
estado final. En caso contrario, no.

 Cadena 1: xxyxxyyy No se acepta.

 Cadena 2: xxyyx Sí se acepta.


 Un AFN está definido por una 5 – upla como
sigue: A = (Q, I, F, , ), donde:
Q es un conjunto finito de estados
I es un conjunto de estados iniciales. Luego,
I  Q (I puede no ser un conjunto unitario).
F es un conjunto finito de estados finales. En
consecuencia, F  Q.
 es el alfabeto finito de entrada.
 es una función de Q X   P(S), con S  Q.
En AFN
En AFD
1. c(I)  0, con I  Q.
1. C(I) = 1, con I  Q. 2. qiQx, qj, qkQ 
2. qiQx, qjQ (qi,x) = {qj, qk}  P(S).
 (qi,x) =qj. Nótese, que S  Q, con lo
cual, puede ser
3. En el AFD toda
(qi,x)=.
transición está
determinada y 3. En el AFN no toda
existe uno, y sólo transición está
un estado imagen. determinada y la
imagen de un par
(estado, símbolo) es un
subconjunto de Q, por
lo cual pude ser .
 EJEMPLO:
Q = {qo, q1, q2}
I = {qo}
F = {qo, q1}
= {a, b}
: Qx  P(Q) tal que:
(qo, a) ={q0, q1}; (qo, b) = {q2};
(q1,a)= ; (q1,b)= q1;
(q2,a) ={q1,q2,}; (q2,b)= .
 Es, a su vez, un grafo:

a b a
a a
qO q1 q2

b
a b
 qo {qo, q1} {q2}
 q1  {q1}
q2 {q1, q2} 
Consideremos el AFN anterior. Se rediseña la
función , como *: P(Q)x  P(Q), como
sigue:
*(,a)=*(,b)=; *({qo,q1},a)={qo,q1},
*({qo,q1},b)={q2,q1}, *({qo,q2},a)={qo,q1},
*({qo,q2},b)={q2}, *({q1,q2},a)={q2,q1},
*({q1,q2},b)={q1}, *({qo},a)=({qo,q1},
*({qo},b)={q2}, *({q1},a)= , *({q1},b)={q1},
*({q2},a)={q2,q1},*({q2},b)=,*(Q,a)={qo,q1}
y *(Q, b)={q2,q1}
Elemento de Q’ Elemento de P(E) a b
   
E0 {qo} E3 E2
E1 {q1}  E1
E2 {q2} E5 
E3 {qo,q1} E3 E5
E4 {qo,q2} E3 E2
E5 {q2,q1} E5 E1
E6 Q E3 E5
Los estados finales serán E2, E4, E5 y E6,
puesto que son los que contienen a q2.
a
a
a a
E0 E3 E6
b
b
b E4
E2 a E5
b
b a
E1
b  a b
a, b
a
a
a a
E0 E3 E6
b
b
b E4
E2 a E5
b
b a
E1
b  a b
a, b
a
a
E0 E3
b b

E2 a E5
b
b a
E1
 a b

a, b
 Una máquina de estados finitos es un
autómata finito, en el cual no existen estados
finales y los símbolos de entrada se colocan
junto con los símbolos de salida. Es decir,
una máquina de estados finitos es una 5-upla
M = {Q, E, S, qo, ,) donde:
Q es el conjunto finito de estados. qo estado inicial.
E es el conjunto finito de entradas.
S es el conjunto finito de salidas.
: QxE Q función de estado siguiente y la
función de salida, : QxE S.
 Una MT consiste en una cinta que se extiende
de manera infinita, en donde se escribe o se
lee información por medio de una cabeza de
lectura/escritura. MT = (Q, , A, qo, b, F,)
donde:Q: conjunto finito de estados.qoQ:
estado inicial. : conjunto de símbolos de
entrada. A: alfabeto de la cinta. b: símbolo
blanco. b  A  b . F: conjunto de estados
finales. M = {I, D} (conjunto de movimientos
posibles de la cabeza). : función de transición,
de QxA  QxAxM.
 MT= (Q, , A, qo, b, F,), con Q={qo,q1,q2,q3},
 ={x,y}, A={x, y, b}, F= {q3}, M = {I, D}
 La función de transición  definida por:
  (qo, x)= (qo, x, D),  (qo, y)= (q1, y, D)
  (q1, b)= (q2, b, I),  (q2, x)= (q2, x, I)
  (q2, y)= (q2, y, I),  (q2, b)= (q3, b, D)
 Usaremos esta MT para decidir si la cadena
xxy es o no aceptada.
  (qo, x)= (qo, x, D),  (qo, y)= (q1, y, D)
  (q1, b)= (q2, b, I),  (q2, y)= (q2, y, I),
  (q2, x)= (q2, x, I),  (q2, b)= (q3, b, D)

b x x y b b x x y b b x x y b
↑ ↑ ↑
qo qo qo
b x x y b b x x y b b x x y b
↑ ↑ ↑
q1 q2 q2
b x x y b b x x y b b x x y b
↑ ↑ ↑
q2 q2 q3
 Es la cantidad de recursos necesarios (tiempo
y espacio) para resolver un problema.

 El tiempo es el número de pasos de ejecución


de un algoritmo para resolver un problema.

 El espacio es la cantidad de memoria utilizada


para resolver dicho problema.
 En estos algoritmos la relación entre el
número de datos (n) y el tiempo de ejecución
esta dada por una expresión polinomial

Potrebbero piacerti anche