Documentos de Académico
Documentos de Profesional
Documentos de Cultura
de la Computacin
Nombre del proyecto: Simulador de Autmatas
Finitos Determinanticos (SAFD)
Objetivo:
Demostrar el funcionamiento y aplicacin de los autmatas al pblico en general mediante una forma dinmica
y sencilla para el usuario promedio. Con este proyecto desarrollado en java pretendemos dar a conocer que los
autmatas son herramientas tiles para modelar y analizar cualquier sistema en el universo. Han sido
utilizados para modelar sistemas fsicos, crear intrpretes y traductores hasta los ms complejos como los
compiladores, as como interacciones entre partculas, formacin de galaxias, cintica de sistemas moleculares
y crecimiento de cristales, as como diversos sistemas biolgicos a nivel celular, multicelular y poblacional. El
alumno desarrollara un programa hecho en java acorde a los autmatas, para esto deber poner en prctica
todos los conocimientos adquiridos durante su aprendizaje sobre el lenguaje Java. El programa a realizar
servir de herramienta didctica para los usuarios interesados en la prctica de este tema.
Misin:
Permitir al usuario experimentar en vivo las aplicaciones de los autmatas y lograr interesarse por el tema
demostrado, facilitando el aprendizaje a los mismos as como lograr el mximo aprovechamiento de la
herramienta hacia el usuario interesado.
Visin:
El uso del software desarrollado ser didctico, dinmico y atractivo para el usuario. El programa podra ser
usado por todos los estudiantes con necesidad de reforzar sus conocimientos sobre autmatas.
Marco Terico:
Un autmata finito es un modelo matemtico de una mquina que acepta cadenas de un lenguaje definido
sobre un alfabeto A. Consiste en un conjunto finito de estados y un conjunto de transiciones entre esos
estados,
que
dependen
de
los
smbolos
de
la
cadena
de
entrada.
El
Autmata finito acepta una cadena x si la secuencia de transiciones correspondientes a los smbolos de x
conduce
desde
el
estado
inicial
a
un
estado
final.
Si para todo estado del autmata existe como mximo una transicin definida para cada smbolo del alfabeto,
se dice que el autmata es determinstico (AFD). Si a partir de algn estado y para el mismo smbolo de
entrada, se definen dos o ms transiciones se dice que el autmata es no determinstico (AFND). Formalmente
un autmata finito se define como una 5-upla.
M
=
<E,
A,
d,
e0,
F>
donde
E:
conjunto
finito
de
estados
A:
alfabeto
o
conjunto
finito
de
smbolos
de
entrada
d:
funcin
de
transicin
de
estados,
que
se
define
como
d:
E
x
A
-->
E
si
el
autmata
es
determinstico
- d: E x A --> P(E) si el autmata es no determinstico (P(E) es el conjunto potencia de E, es decir el conjunto
de
todos
los
subconjuntos
de
E)
e0:
estado
inicial
F: conjunto de estados finales o estados de aceptacin
Generalmente se asocia con cada autmata un grafo dirigido, llamado diagrama de transicin de estados.
Cada nodo del grafo corresponde a un estado. El estado inicial se indica mediante una flecha que no tiene
nodo origen. Los estados finales se representan con un crculo doble. Si existe una transicin del estado e al
estado ej. Para un smbolo de entrada a, existe entonces un arco rotulado a desde el nodo e al nodo ej.
Los autmatas vienen a ser mecanismos formales que ``realizan'' derivaciones en gramticas formales. La
manera en que las realizan es mediante la nocin de reconocimiento. Una palabra ser generada en una
gramtica si y solo si la palabra hace transitar al autmata correspondiente a sus condiciones terminales. Por
esto es que los autmatas son analizadores lxicos (llamados en ingls ``parsers'') de las gramticas a que
corresponden.
Estos son los autmatas finitos ms sencillos. Se construyen a partir de un conjunto de estados Q y de un
conjunto de smbolos de entrada T. Su funcionamiento queda determinado por una funcin de transicin.
.Si t (q, s)=p esto se interpreta como que el autmata transita del estado q al estado p
cuando arriba el smbolo s. En todo autmata finito se cuenta con un estado inicial,
de estados finales
y un conjunto
es un
Ejemplo: Sea
de smbolos de entrada es
.
Su
, el
transicin
queda
determinada
por
la
tabla
Observamos que, partiendo del estado a, mientras lleguen 1's se est en el estado inicial, con un 0 se pasa a
b, con un segundo 0 se pasa a c y de ah no se sale ms. En b, al llegar un 1 se regresa al estado inicial. As
pues, para arribar al estado a desde a mismo la cadena de entrada ha de ser una sarta de varias de 1's
separadas Estas por nico 0's. En otras palabras, el autmata reconoce al lenguaje (1 +0)*1+.
Los autmatas tienen como aplicacin hacer ms sencilla las tareas para el ser humano. Uno de los ejemplos
de aplicacin es la de un controlador de riego. El autmata controla el regado de un campo teniendo en
cuenta varios factores que son:
La cantidad de agua de un depsito abastecido con lluvia teniendo en cuenta el ndice de pluviosidad
minuto a minuto.
La hora del da, con el fin de realizar el regado a las horas ms favorables, que son aquellas en las
que la evaporacin es menor.
La hora del ltimo regado, con el fin de espaciarlos lo necesario y suficiente.
Esto se har mediante un sistema que controlar la cantidad de agua que cae en base al tiempo (1 entrada).
Se usar una salida de real para control de apertura y cierre de la vlvula del depsito (1 salida real). El resto
ser control del reloj en tiempo real de que dispone el equipo y el programa BASIC que lo maneja todo.
, , i, F) donde:
El requisito del determinismo impone ciertas restricciones sobre los diagramas de transiciones que pueden
aparecer en los programas para un autmata finito determinista. Se dice que un diagrama de transiciones es
determinista si cumple las siguientes condiciones:
En particular, cada estado de estos diagramas solo debe tener un arco que sale para cada smbolo del
alfabeto; de lo contrario, una mquina que llega a este estado se enfrentara a una eleccin de cul debe ser el
arco a seguir.
Adems, dicho diagrama debe estar completamente definido, es decir debe existir por lo menos un arco para
cada smbolo del alfabeto; de lo contrario, una mquina que llega a este estado puede enfrentarse a una
situacin donde no pueda aplicarse ninguna transicin.
Ejemplo 1:
El siguiente diagrama no es determinista ya que no est completamente definido; no representa cual ser la
accin que debe ocurrir si se recibe una letra o un dgito mientras se encuentra en el estado 2.
Ejemplo 2:
El siguiente diagrama tiene problemas similares ya que entre otras cosas no describe que deber suceder si
recibe un punto mientras se encuentra en el estado inicial.
No obstante, los dos diagramas vistos anteriormente no tienen ms de un arco de salida de un estado para
cada smbolo y, por consiguiente, pueden modificarse para ajustarse a los requisitos del determinismo,
aplicando lo siguiente:
En este ejercicio el nuevo estado es el nmero 8. Observe que en diagrama original la ocurrencia de una
cadena inaceptable ocasionaba un error al solicitar el recorrido de un arco inexistente. En el diagrama
modificado, una cadena inaceptable ocasiona que la maquina recorra un arco a estado 8, donde permanece
hasta alcanzar el final de la cadena de entrada. Al llegar a este punto se rechazara la cadena, ya que el estado
8 no es de aceptacin. Por esto, los dos diagramas son equivalentes en lo que se refiere a que aceptan las
mismas cadenas; difieren solo en la manera en que llegan a sus conclusiones.
Un AFN acepta una cadena si es posible que su anlisis deje a la maquina en un estado de aceptacin.
De manera formal, un AFN se define como sigue, un AFN consiste en una quntupla (S,
, p, i, F) donde:
Desarrollo:
El proyecto tratara de un simulador de autmatas, el sistema pedir el nmero de estados del autmata, los
estados finales y el inicial, as como la cadena que se quiere comprobar. Por consiguiente evaluara la cadena
introducida
y
se
mostrara
la
tabla
de
transiciones
correspondiente.
Se pretende que sea una herramienta didctica en el aprendizaje de autmatas, se espera agregar todas las
opciones mostradas.
Anlisis
Anlisis de los requisitos:
Tabla de eventos:
ACTIVIDAD
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
INICIO
Diagrama de Gantt
DURACION
(DIAS)
2
10
5
3
1
2
4
5
7
9
15
10
3
8
9
1
1
1
TERMINACION
12/02/2010
22/02/2010
19/02/2010
16/02/2010
16/02/2010
19/02/2010
23/02/2010
27/02/2010
07/03/2010
14/03/2010
13/03/2010
06/03/2010
14/03/2010
23/03/2010
29/03/2010
21/04/2010
20/04/2010
27/04/2010
Diseo
La ventana de entrada es la siguiente
El segundo botn "Crear alfabeto" pedir los smbolos de entrada del autmata,
primero deben entrar el nmero de caracteres del alfabeto y despus los smbolos
uno por uno como se muestra a continuacin:
Codificacin
Una primera parte del programa a desarrollar se muestra a continuacin, para crear
la interfaz pensada necesitamos dos clases, una para los grficos y los eventos
principales; la otra es una clase mtodo donde trabajaremos con el mtodo que
necesitamos para complementarla:
CLASE GRAFICO
view source
print?
//VARIABLES
private Metodo metodo = new Metodo();
009
010
String inicio,ultimo;
String q[];
011
012
int cuantosq;
String tabla[][];
013
014
int cuantosalf;
String alfa[];
015
016
017
018
019
private
JButton
botonrevisar,botoninifin;
botonq,
botonalfa,
020
021
022
public Grafico()
{
023
024
super( "Automatas" );
contenedor = getContentPane();
025
026
027
028
029
botontabla,
030
031
032
033
034
//DESACTIVAR BOTONES
botontabla.setEnabled(false);
035
036
botonrevisar.setEnabled(false);
botoninifin.setEnabled(false);
037
038
039
040
041
042
043
044
045
046
// weightx
predeterminado
weighty
para
areaTexto1
son
0:
049
050
agregarComponente(botonq,0,0,2,1);
agregarComponente(botonalfa,1,0,2,1);
051
052
agregarComponente(botoninifin,2,0,2,1);
agregarComponente(botontabla,3,0,2,1);
053
054
agregarComponente(botonrevisar,4,0,2,1);
ManejadorBoton manejador = new ManejadorBoton();
055
056
botonq.addActionListener(manejador);
botonalfa.addActionListener(manejador);
057
058
botontabla.addActionListener(manejador);
botoninifin.addActionListener(manejador);
059
060
botonrevisar.addActionListener(manejador);
//DESACTIVAR BOTONES
061
062
063
064
setLocationRelativeTo(null);
setVisible( true );
065
066
067
068
069
070
el
valor
el
valor
071
072
073
074
{
public void actionPerformed( ActionEvent evento )
{
if(evento.getSource() == botoninifin)
075
076
077
078
079
{
inicio = JOptionPane.showInputDialog("Inserta el Inicio
de estado");
agregarComponente(new JTextField("Inicio: " +inicio+"
JTextField("Final:
"+ultimo)
,6,1,1,1);
080
SwingUtilities.updateComponentTreeUI(contenedor);
081
082
}
if(evento.getSource()==botonq)
083
084
")
,6,0,1,1);
cuantosq=metodo.creaint("Cuantas
entradas
son?:
(Q)");
085
086
q=new String[cuantosq];
q = metodo.crearQ (cuantosq,q);
087
088
089
090
botontabla.setEnabled(true);
}
091
092
botoninifin.setEnabled(true);
for(int z=0;z < q.length; z++)
agregarComponente(new
JTextField("
"+q[z]),z+1,2,1,1);
094
SwingUtilities.updateComponentTreeUI(contenedor);
093
095
096
}
if(evento.getSource()==botonalfa)
097
098
cuantosalf=metodo.creaint("Cuantos
el alfabeto?:");
caracteres
099
100
alfa=new String[cuantosalf];
alfa = metodo.crearalfabeto(cuantosalf, alfa);
101
102
tiene
103
104
botontabla.setEnabled(true);
}
105
106
107
for(int m=0;m<=alfa.length-1;m++)
108
agregarComponente(new
"+alfa[m]),0,m+3,1,1);
109
110
111
112
if(evento.getSource()==botonrevisar)
{
SwingUtilities.updateComponentTreeUI(contenedor);
113
114
115
JTextField("
int contador=0;
String cad[] = new String[metodo.creaint("Que Largo
tiene la cadena?")];
116
117
121
||
contador++;
125
126
if(contador==cad.length)
inicio = metodo.revisar(alfa, q, tabla, cad, inicio);
127
else
JOptionPane.showMessageDialog(null, "la cadena tiene
128
errores");
129
130
131
132
if( inicio.equals(ultimo))
{
JOptionPane.showMessageDialog(null,
completo la cadena");
134
}
133
"el
automata
135
else
JOptionPane.showMessageDialog(null, "el automata NO
136
completo la cadena");
137
138
139
140
if(evento.getSource()==botontabla)
{
141
142
143
SwingUtilities.updateComponentTreeUI(contenedor);
tabla
metodo.creartabla(alfa,
cuantosalf, q);
for(int z=0;z < q.length; z++)
{
cuantosq,
144
145
146
agregarComponente(new
"+tabla[z][j]),z+1,j+3,1,1);
147
148
149
150
int conta=0;
for(int z=0;z < q.length; z++)
151
152
153
154
155
156
if(q[sim].equals(tabla[z][j]) )
conta++;
157
158
JTextField("
}
if(
tabla[z][j].equals("")
||
tabla[z][j].equals(" ") )
159
160
conta++;
}
161
162
if(conta == cuantosq*cuantosalf)
163
164
else
botonrevisar.setEnabled(true);
165
166
{
botonrevisar.setEnabled(false);
171
172
173
}
private void agregarComponente( Component componente, int fila, int
174
columna, int anchura, int altura )
175
176
{
// establecer gridx y gridy
177
178
restricciones.gridx = columna;
restricciones.gridy = fila;
179
180
181
182
restricciones.gridwidth = anchura;
restricciones.gridheight = altura;
183
184
185
186
187
188
}
public static void main( String args[] )
189
190
191
192
193
194 } // fin de la clase DemoGridBag
PRUEBAS Y DEPURACION
La primera prueba de nuestro cdigo es una versin acercada del diseo principal,
esta es una vista preliminar del programa:
Como primera prueba se han creado los botones respectivos y solo el botn "Crear
smbolos de estados" y "Crear alfabeto" son funcionales:
Conclusiones esperadas
Creemos firmemente que una herramienta como el software que queremos realizar seria de mucha utilidad
para los alumnos de la materia de teora de la computacin. Al usar grficos el aprendizaje se vuelve ms
sencillo, es por eso que el simulador de autmatas debe ser aprobado.
Glosario tcnico
Bibliografa
http://html.rincondelvago.com/automatas-programables_2.html
http://es.wikipedia.org/wiki/Desarrollo_en_cascada