pctroll { jorge palacios }

desarrollador de juegos, programador, investigador de IA

Inteligencia Artificial: Las Bases

Esto es algo que debí comenzar a hacer hace un año, más o menos. Llámalo como que soy lento echando código, me faltaban bases teóricas, en parte también me las eché al hombro porque quizás no entendía en lo que me estaba metiendo y subestimé el trabajón que tengo por delante.

El caso es que finalmente siento que estoy haciendo el trabajo de investigación que me toca, en el área que me quiero especializar (como punto de referencia, estoy comenzando a escribir esto a las 4:15 am y estoy despierto desde más o menos las 2:00 am terminando de leer un par de cosas). ¿Desperdicié mi tiempo? no del todo… echo código más rápido, tengo mejores bases teóricas que cuando comencé el postgrado y aprendí cómo investigar y conseguir papers sin pagarle un centavo a la ACM (rápido: colocas el título del paper en comillas y Google hace el trabajo por tí. Uno de los links seguramente será la página universitaria, blog o site del investigador y voilá; hola paper gratis).

chica preparada para correr¿Qué necesito para comenzar a darle con inteligencia artificial? Conocimiento sobre grafos, algoritmos sobre grafos y todo material adicional que sepas de programación es ganancia (ordenamiento, búsqueda, estructuras de datos, etc.). Conocimientos en lógica proposicional y de primer orden son altamente recomendados. Sí, se dice en un par de líneas pero esto requiere tiempo, dedicación y paciencia.

Lo anterior queda completamente invalidado si no se tiene cariño y pasión por lo que se hace. Vas a sufrir, vas a tener que leer/ver/escuchar explicaciones varias veces; pero al final del día vale la pena. No tengo palabras para enfatizar en que es un área de investigación ruda (te vayas por I.A. clásica o para juegos) y requiere trabajo. Pero como lo he dicho anteriormente, nada que valga la pena es sencillo.

Tocando el tema de grafos, lo puntos que yo he visto que son más importante y se dan como material de pregrado en la USB son los siguientes:

  • Grafos, propiedades, y cosas finas que se pueden hacer/modelar usando grafos.
  • Distintas representaciones de grafos, con sus respectivas ventajas y desventajas (matriz cuadrática, lista/vector de adyacencias, etc.).
  • Algoritmos sobre grafos (Wikipedia [en Inglés] marik).
    • Roy-Warshal
    • DFS.
    • BFS.
    • Dijkstra.
    • Bellman-Ford.
    • Prim.
    • Kruskal.
    • Interesantes
      • Tarjan.
      • Kosaraju.

grafo no dirigido

Yo, por ejemplo, soy muy de tener que resolver problemas y que me den ejemplos de para qué me sirven las cosas (eso me ha llevado a discusiones con profesores de matemáticas, pero no viene al caso). Entonces, un buen sitio con problemas que pueden ser resueltos con grafos es el UVa Online Judge. En ese enlace tienen los problemas segmentados por algoritmos; una papita (al menos en identificar en algoritmo a usar ;)).

Ojo, la idea no es que primero te vuelvas un duro primero y luego continúes y hagas cosas; es que te vuelvas un duro a medida que resuelves problemas e investigas. Si tienes el tiempo y estás rascándote los mocos, adelante. Las circunstancias de la gente promedio obligan a resolver problemas/trabajar a la par que se aprende. Y es incluso natural; el conocimiento por el conocimiento es fino, pero es igual de gratificante -a veces más- llegar a una solución [buena] de un problema del que no tenías mucha noción de cómo atacar y te diste algunos tropezones en el camino.

niña frustradaOtra cosa que he aprendido es que el objetivo es aprender, no reinventar la rueda y el fuego. ¿Qué quiero decir con esto? Busca aprender por todos los medios posibles (leer, ver videos, pedir clases, preguntar en StackOverflow está de moda y es fino -yo lo hago-). El propio profesor Leiserson (M.I.T.) lo dice en sus clases; no vale la pena seguir trabajando solo después de 45-60 min. en un problema si no tienes ni remota idea de cómo atacarlo. Pide/busca ayuda. Ya luego te tocará quebrarte el cerebro resolviendo problemas interesantes, quizás nuevos, pero con las bases hay que entenderlas y seguir. Si de 3 problemas te explican cómo atacar 1, te quedan 2 para echarle bolas y darte cuenta que aprendiste.

Es simple; algunas personas entienden simplemente recibiendo la información y otros (me cuento) aprendemos por reconocimiento de patrones. Algunos con leer les basta, y a otros se nos hace más sencillo cuando nos explica un pana. Cuestión de ver cómo aprendes más rápido y luego reforzar haciéndolo de otra forma.

Eso es, a grandes rasgos, lo que he aprendido son las bases fundamentales para el área. Sin al menos haber tocado superficialmente grafos, el camino se volverá complicado y tocará ir “pa’lante y pa’trás” con algoritmos más avanzados. Dudas, comentarios y sugerencias, son bienvenidos.

Créditos imágenes: H+ MagazineMichal Zacharzewski, Wikimedia, Google y sus respectivos autores :P.
Montaje: Christian Chomiak.

1 Comment

  1. Me gusta!
    Un problema durísimo contra el que la inteligencia se las ve negras es el juego de Go. http://en.wikipedia.org/wiki/Computer_Go

Deja un comentario