Máquina de Turing

Implementación en java de una máquina de turing

Una maquina de Turing es un modelo matematico matematico de computacion que representa una maquina abstracta, capaz de manipular simbolos sobre una cinta de acuerdo a una tabla de reglas. A pesar de su simplicidad, esta es capaz de simular la logica de cualquier algoritmo que podria simular un computador. Esto la hace un objeto de estudio, por lo que seria interesante poder observar esta maquina en marcha, surge el problema de poder implementar un programa que simule esta maquina, con el fin de comprender de mejor manera su funcionamiento.

Analisis del problema

Como se ha dicho, la maquina de Turing consiste en un cabezal que modifica los simbolos sobre una cinta de infinitas celdas, para esto debe seguir las instrucciones, tales como escribir en la cinta, moverse y cambiar de estado, que se definen en su tabla de estados. Los actores que participan en el funcionamiento de esta maquina son facilmente distinguibles entre ellos, por lo cual resulta ideonea la implementacion en un lenguaje orientado a objetos como Java. Estos elementos se relacionaran de la siguiente manera: El cabezal posee un cinta que ira modificando, que estara compuesta por una lista de celdas. A su vez, el cabezal tendra un lista de estados, cada uno compuesto por un conjunto de instrucciones que le indicaran al cabezal como actuar. Se crea ademas una clase abstracta que interpretara la tabla de estados y se la entregará al cabezal. Se busca poder representar de manera simple estos componentes, de modo que mediante una interfaz grafica se mostraran los simbolos en la cinta, junto con el estado en que se encuentre la maquina y sus instrucciones. Ademas se permitira al usuario interactuar al usuario dandole la lista de estados a la maquina (ya sean de ejemplos o creados por el), introduciendo el estado inicial de la cinta, y podiendo cambiar la velocidad a la que opera la maquina. Algunos de los casos de uso son: 1. El usuario intenta iniciar la maquina sin darle la tabla de estados 2. El usuario carga un programa de ejemplo y lo ejecuta 3. El usuario le cambia la velocidad de ejecución

Dificultades

El hecho de que la maquina necesitara una cinta de celdas infinitas se hizo presente en el desarrollo del programa, esta fue representada mediante un arrayList que se hacia crecer dependiendo de las necesidades, sin embargo esto implicó tener un especial cuidado en la forma de representar la posición del cabezal. La manera de ingresar los estados e instrucciones por el usuario resulta un poco rudimentaria, pues requiere escribir estos en su totalidad en una area de texto siguiendo un formato especifico, ademas de que el programa no es capaz de interpretar bien estos datos si algo esta mal escrito. Resultaria conveniente en un futuro implementar una mejor forma de ingresar las instrucciones que incluya ademas una forma de detectar los errores

Sebastián Yuste

Matías Zúñiga

ELO329 – 2017-1

Base page author: Sebastian Nitu
Creative Commons License