JavaScript e Inteligencia Artificial (3)

Published on Author lopez

Anterior Post

Un tema que presenté con un ejemplo (pero sin ejecutarlo) es la evaluación de la próxima jugada en un juego de tablero. No pude dejar de mencionar a una película que vi hace décadas y que me influyó bastante en la forma de ver la inteligencia artificial, Juegos de Guerra (“War Games” de 1983, ver Wikipedia ver IMDB):

En los juegos de tablero, es común evaluar una posición, y dada las posibles jugadas, evaluar las posiciones resultantes, eligiendo la mejor para nuestro bando. El problema es determinar cuál es “la mejor”. En general, no hay funciones de evaluación perfecta de una posición. Lo que se puede hacer, es explorar un árbol de jugadas, para tener una evaluación “más profunda” de la posición actual. Esto permite calcular un valor de la posición actual en base a la posible evolución de las próximas jugadas. Hay varias formas de explorar un árbol (los remito al libro mencionado en el anterior post, base de toda la charla)

Elegí como ejemplo, un juego de tablero con azar, donde las jugadas son azarozas (hay un tiro de dados), el conocido backgammon. Lo elegí con cierta nostalgia del trabajo de Hans Berliner, en los ochenta, que conocí gracias a un artículo del Scientific American:

 

Fue el primer programa que le ganó a un campeón mundial humano en un juego de tablero. Pueden leer los artículos de Hans Berliner en:

Backgammon Computer Program Beats World Champion
Computer Backgammon

Si leen la descripción del programa, tiene mucha heurística, mucho conocimiento experto del juego. Mi proyecto es más modesto y trata de que la evaluación de una posición “emerga” de explorar el árbol de jugadas, calculando al final una “métrica” sencilla de cuán lejos estamos del objetivo final (sacar todas las fichas del tablero antes que el adversario).

El proyecto en JavaScript en:

https://github.com/ajlopez/SimpleGammon

Escrito usando TDD (Test-Driven Development) desde Node.js consola. Pero el ejemplo es para browser:

https://github.com/ajlopez/SimpleGammon/tree/master/samples/html

Tiene una interfaz simple, a mejorar:

Ejecuta la evaluación de dos jugadas hacia adelante, en el cliente. Antes de “Play” pueden elegir quien mueve, y cuales son los dados iniciales. Pero vean que tarda sus buenos segundos, un tema a mejorar. Varias opciones a explorar, como procesamiento en paralelo (vimos en la conferencia que JavaScript tiene implementaciones para aprovechar procesadores), y también, derivar la evaluación al servidor, y que éste lo derive a varias máquinas “worker” (algo así hice para otro ejemplo, de algoritmos genéticos).

Otros proyectos en los que estoy trabajando para evaluar posiciones (pero todavía sin ejemplos, trabajo en progreso):

https://github.com/ajlopez/SimpleGo
https://github.com/ajlopez/SimpleChess

El juego del Go es atrapante, pero no trivial. Primero, quiero avanzar más con la implementación de backgammon, el primer candidato es evaluación distribuida.

Nos leemos!

Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez