tamagotchi con un autómata finito
DESCRIPTION
Aplicación de teoría de autómatas. Es el desarrollo de un Tamagotchi por medio de un autómata finito.TRANSCRIPT
TAMAGOTCHI, APLICACIÓN DE TEORÍA
DE AUTÓMATAS
Por
Ávila Marín Agustín
Ortiz Meza Luis Alberto
Robles Martínez Ricardo
Introduccio n
Como preludio a una pequeña gota en un mar de ideas en las aplicaciones de la informática,
hablemos de los autómatas finitos (AF). Estos autómatas tienen su esencia en una función de
transiciones, la cual nos permite observar que dado un estado tal que para un símbolo
, existe sólo una transición posible.
Ahora definamos formalmente a un AFN:
Como ya se mencionó en la definición y antes de, un AF es aquel que dado un estado puede tener
más de una transición, como por ejemplo. Dado la siguiente 5-tupla:
Sea , donde , , y está dado por la
tabla siguiente:
Por podemos darnos cuenta que se trata de un AF, el cual tendría un grafo como el que a
continuación se muestra:
q0 q1 q2 q3q31 0, 1 0, 1
𝛿:𝑄 ×
Un autómata finito no determinista (AFN) es una 5-tupla 𝑀 𝑄 𝑞 𝐴 𝛿 , donde 𝑄 𝑦 son
conjuntos finitos no vacíos, 𝑞 𝑄 𝐴 ⊆ 𝑄 y
𝑄 es el conjunto de estados, es el alfabeto, 𝑞 es el estado inicial y 𝐴 es el conjunto de estados
de aceptación
Aná lisis y desárrollo
El primer paso para el diseño del tamagotchi, fue identificar los estados y las entradas que tendrá
el programa. Previo a eso es obtener su representación gráfica y más importante aún es obtener
su tabla de transiciones, que esto último es crucial e importante para la programación.
Nuestro tamagotchi primero que nada, tiene que nacer y después de nacer puede pasar a tres
estados posibles. Dependiendo de sus necesidades en ese momento, éste puede:
o Pedir de comer
o Pedir ir al baño
o Pedir irse a dormir
Así que aclarando las ideas, estas peticiones son meras entradas y los estados pueden ser, en base
a lo anterior:
Nacer
Tener hambre
Tener ganas de ir al baño
Tener ganas de dormir
Siendo drásticos podemos agregar a este conjunto de estados la muerte si es que no se cumplen o
satisfacen sus necesidades. Pero uno no se muere por no hacer del baño o dormir, simplemente se
hace del baño o se queda dormido. Con esta lógica el camino hacia la muerte sería no darle de
comer a nuestra mascota. Ya también añadimos otros dos estados, el estar dormido y el haberse
hecho del baño. Y que pasa cuando no necesita nada, pues está en un estado neutral, está
satisfecho. Así pues tenemos de más:
Dormido
Se hizo del baño
Satisfecho
Muerto
Ya podemos darnos una idea de cómo cuidar de este tamagotchi, dándole de comer, poniéndole
una cama, llevándolo al baño, limpiándolo. Para no hacerlo tan aburrido manejaremos unas
emergencias que constan de dos estados más de alerta para el tener hambre, ganas de ir al baño y
ganas de dormir que manejaremos como sigue:
Tener mucha hambre
Tener mucha más hambre
Tener más ganas de ir al baño
Tener muchas más ganas de ir al baño
Tener más ganas de dormir
Tener muchas más ganas de dormir
Esto se pone interesante, pero ¿dónde entra el usuario en la parte del cuidado? El usuario puede
generar las demás entradas, que serían:
o Dar de comer
o Poner baño
o Poner cama
o Limpiar
Antes de concluir con esta identificación de las partes del autómata no podemos permitir que esté
en un sueño eterno nuestro animalito, entonces añadamos una entrada más que será la de:
o Despertar
La cual por cierto no manejará el usuario si no el animalito propio, así como las que se
describieron al principio de este apartado, para que éste se sienta cómodo y libre de la sensación
de tener padres demasiado controladores.
En este punto tenemos identificados 14 estados y 8 entradas las cuales definiremos con su 5-tupla.
Sea , donde ,
Donde cada uno de los símbolos se representa como sigue
Se aprecia que vamos a tener una tabla de transiciones demasiado larga, y nos daremos cuenta
por lo que ya explicamos que se hará uso de un AF.
El grafo de transiciones entonces es el siguiente:
q0
q11
q2q9
q8
q7
q5
q3
q4
q6
q12
q1
q101
2
1
15
5
1
2
2
2
6
6
7
3
0
0
0
q13q13
4
4
4
Como parte de la programación, podemos declarar una matriz de enteros en donde en sus celdas
se guarde la una fila, ingeniosamente vaciaremos la tabla de transiciones; las columnas serán las
entradas y las filas serán los estados, así que solo tendríamos que tener una variable que se llame
entrada y otra estado, y el valor de estado se actualizaría a la vez que se ingresa una entrada y se
coloca la coordenada con el estado anterior. Parte del código editado en java seria como el
siguiente para la clase Autómata:
Esto sería todo en cuanto a diseño y desarrollo. Las interfaces que se decidan usar y maneras de
controlar peticiones, entradas y cambio de estado etcétera, son al gusto del desarrollador. Para
nuestro caso usamos una GUI, y un timer para controlar el tiempo de las peticiones así como una
selección aleatoria de ellas. Esto con la finalidad de hacerlo más dinámico.