in

Playfun: Un programa que aprende a jugar títulos de NES

La conferencia SIGBOVIK no es una conferencia común y corriente. De hecho, se la puede considerar como una pseudo-conferencia, porque los papeles y los trabajos que son presentados allí son completamente falsos, y en muchos casos rozan lo absurdo. Sin embargo, un sujeto de nombre Tom Murphy VII presentó un trabajo “real”, basado en Playfun, un programa capaz de aprender a jugar títulos en la consola NES y atravesar sus niveles automáticamente. Los primeros intentos fueron un desastre, pero cuando veas los movimientos que puede hacer Playfun en Super Mario Bros., te sentirás como un principiante…

¿Tienes algún trabajo sobre viajes en el tiempo, reactores antimateria, algas en Europa (la luna, no el continente) o navegación interestelar? Entonces, probablemente debas presentarlo en la conferencia SIGBOVIK. Desde hace seis años, la conferencia es un lugar para lo improbable, lo extravagante, y por qué no lo absurdo. Ahora, jugar títulos clásicos de NES no tiene nada de absurdo, pero preparar un software para que lo haga y escribir un informe de 22 páginas sobre ello… creo que encaja a la perfección. Esto tal vez sea lo más sorprendente: Es un trabajo real, con resultados reales. El software existe, y funciona con diferentes niveles de éxito, dependiendo del juego al que se enfrente.

Todo comienza, obviamente, con jugar el juego. El responsable del trabajo, Tom Murphy VII, explica que mientras jugaba una partida de Super Mario Bros., guardó todas las presiones de los botones y tomó “capturas” del contenido de memoria, unas seis veces por segundo. Como la memoria RAM de la NES es de apenas dos kilobytes, la recolección de datos demandó varios miles de estos cuadros capturados. El paso siguiente fue, desde el punto de vista de un programador, establecer qué significa “ganar” el juego, en este caso, Super Mario Bros.. Recordemos que Mario no solo debe derrotar enemigos y evitar otros peligros, sino que también hay un marcador de puntaje, y un reloj.

El primer indicio de “victoria” es que la cantidad de bytes asciende, a través de lo cual se generalizan los valores que mencioné antes, pero también se incluyen cosas como las coordenadas de la posición de Mario en la pantalla, el nivel y el mundo actual en el que se encuentra. Descartando todo lo que no es relevante para su “gameplay” (sonido, vídeo, efectos, etc.), el objetivo del programa es que, a través de ciertos comandos, debe hacer que esos bytes asciendan, determinando el “orden lexicográfico” correcto para ellos. Su propio creador reconoce que esta no es la forma más eficiente o elaborada de hacer que un programa aprenda a jugar Super Mario Bros., sino que prefirió concentrarse en el aspecto estético, o sea, una técnica “estúpida”, pero “elegante” en lo matemático.

Como era de esperarse, los primeros intentos fueron una catástrofe. A pesar de una buena sesión de entrenamiento para el proceso (bautizado “Learnfun”), Mario simplemente se quedaba saltando en su posición original hasta que se terminaba el tiempo. Luego de algunas correcciones, Mario aprendió a avanzar, pero seguía manteniendo una especie de adicción a los saltos, hasta que se encontró con una tubería que simplemente no podía superar. Tras lo que aparentemente fueron “varios fines de semana” de correcciones, Murphy llegó a su versión más pulida, Playfun. La diferencia está en que se tienen en cuenta entradas de comandos aleatorias que “pueden” ser usadas más adelante. A modo de ejemplo, el programa evita que Mario quede atascado junto a la tubería otra vez probando primero todas las secuencias cortas, y luego aplicando esos comandos aleatorios futuros.

Eventualmente, Mario logra superar el nivel 1-1 sin mayores problemas, pero la situación cambia en 1-2, debido a que se queda atascado en otra zona. Esto llevó a Murphy a descubrir un error en Learnfun, y después de aplicar los ajustes necesarios, Mario logró seguir adelante. Otro punto muy interesante es que si observan de cerca el vídeo, Mario realiza algunos movimientos muy arriesgados y extraños, como golpear a los Goombas desde abajo (técnicamente un bug en el juego). Después se aplicó todo este sistema a otros juegos, como Karate Kid (Daniel-san consume sus golpes especiales muy rápido), Adventure Island (muy buenos resultados), Pac-Man (tarda demasiado en completar el nivel, pero es excelente evadiendo fantasmas), Bubble Bobble (tiende a quedarse quieto pero elimina a sus enemigos sin problemas), y el Tetris, que es toda una pesadilla, pero que llega a una conclusión magistral. El vídeo demandará poco más de dieciséis minutos de tu tiempo, pero a pesar de toda esta explicación, deberías verlo completo.

Reportar

¿Qué te pareció?

Escrito por Lisandro Pardo

4 Comments

Leave a Reply
  1. jajaja, al pause y a tomar vientos, total, se estaría estresando…

    Muy interesante; creo que es un buen avance para la IA en general.

  2. Muy chévere, aunque se nota qur todavía falta perfeccionarlo y divertido ver los bugs, por que normalmente creo que un usuario real, difilcimente los hubiera podido sacar.

    Esperemos la versión para completar juegos de otras consolas !

  3. Me encantó la parte final del video:
    "The only winning move is not to play…". Tom Murphy VII
    Crédito a quien lo merece. ñ_ñ

    Excelente investigación, aunque la aproximación al problema es algo enredada.

    Muy buena información!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Juegos Online de la Semana (11/04/13)

PlaneSploit: ¿Es posible hackear un avión con una aplicación para Android?