Martha Hernández
Alfonso Martínez
José Angel Daza
Nuestro ambiente se centra alrededor de los lenguajes de programación, cada uno con sus propias reglas de sintaxis, semántica y símbolos. Basados en estas propiedades se pretende programar a un agente que distinga entre siete lenguajes diferentes.
Nuestro agente aprenderá a determinar el lenguaje de programación en el que está escrito cierto código. Para fines prácticos se decidió usar 100 líneas como el tamaño estándar de un programa y se eligieron python, c, java, brainfuck , clojure, erlang y php como las diferentes categorías de clasificación.
La clasificación de los patrones está basada en el número de ciertos símbolos representativos presentes en el código dado. Basados en nuestra experiencia personal, decidimos contar el número de repeticiones de los siguientes símbolos y palabras
(), *, +, [], |, $, class, private, abstract, #, include, :, -, /, extends
Para entrenar a nuestro árbol de decisión bajamos código de diferentes repositorios de código abierto. Enseguida hicimos un sencillo programa que cuenta el número de repeticiones de los símbolos en los archivos, así generamos los patrones para entrenar al agente.
Para que el agente pudiera diferenciar los diferentes lenguajes utilizamos el algoritmo C4.5, ya que genera árboles de decisión a partir de valores continuos. Particularmente utilizamos la implementación de Orange, que es muy fácil de usar. En el siguiente video se puede apreciar la facilidad con la que el programa genera el árbol de decisión.
Nuestro árbol de decisión quedó finalmente así:
Al hacer esta actividad nos dimos cuenta de que diseñar un patrón de aprendizaje no es una tarea sencilla. El algoritmo ya está programado, y hay paquetería que lo hace muy bien, pero el verdadero reto consiste en saber cuándo el algoritmo funcionará, y darle las condiciones para que lo haga. En nuestro caso afortunadamente funcionó a la primera, pero seguramente si no hubiéramos tenido la asesoría del profesor desde el inicio pudimos haber sufrido bastante en este aspecto.
Por otra parte, recopilar datos también es una de las partes más pesadas del algoritmo, y aunque afortunadamente por nuestro ambiente pudimos obtener rápidamente varios ejemplos de la red, no en todos los casos es tan sencillo hacerlo.
No hay comentarios:
Publicar un comentario