Archive for the 'Charlas' Category

JavaScript e Inteligencia Artificial (3)

Monday, January 5th, 2015

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

JavaScript e Inteligencia Artificial (2)

Sunday, November 30th, 2014

Anterior Post
Siguiente Post

Gracias a la gente de JSConf Argentina 2014 por haberme dado la oportunidad de dar esta charla, ayer, en esa excelente conferencia. Para darle un formato dinámico, las charlas fueron de veinte minutos. Quisiera en esta serie de posts completar la exposición de lo que quería mostrar, comentando más en detalle algunos puntos, y presentando también otras demos y proyectos que quedaron fuera de la charla.

El tema de hoy es recomendarles EL libro que me sirvió de guía de estudio para un tema interminable, un clásico de la ciencia de la computación (el cuarto más citado en este siglo):

Artificial Intelligence, a Modern Approach
http://aima.cs.berkeley.edu/

de Stuart Russell y Peter Norvig. Para saber más sobre la tapa de la última edición, ver:

http://aima.cs.berkeley.edu/cover.html

Hay alguna edición en español, y yo la habré conseguido en las librerías de Buenos Aires, ya hace unos años. Son algo más de mil páginas, en veintisiete capítulos y apéndices, donde se visita desde agentes inteligentes hasta redes neuronales, desde algoritmos de búsqueda y evaluación de árboles hasta robótica y temas filosóficos. Me parece muy interesante que cada capítulo esté acompañado de notas sobre la historia del tema, lo que siempre pienso que nos da perspectiva y mejor comprensión sobre los problemas y dificultades en un desarrollo. No hay que quedarse solamente con “lo que se sabe ahora”, sino también estudiar cuál fue el camino seguido para llegar al estado actual, lo que también puede servir para entender cuál es el futuro que podemos seguir.

Tienen el seudocódigo de los ejemplos en http://aima.cs.berkeley.edu/algorithms.pdf  y también en código Lisp, Python, Java en http://aima.cs.berkeley.edu/code.html

Es interminable también para investigar: AI on the web http://aima.cs.berkeley.edu/ai.html

En la edición que tengo, no aparece JavaScript como lenguaje de programación a usar. Es un buen ejercicio ir adaptando los ejemplos en seudocódigo a implementaciones en distintos lenguajes. Cada tanto, trato de implementar algo en el proyecto https://github.com/ajlopez/NodeAima. Notablemente, JavaScript debe ser el lenguaje más simple para implementar muchas de las ideas del libro. Implementaciones en lenguajes tipados y no dinámicos, como Java y C#, me parecen que tienen siempre algo de “convoluted” comparando con una implementación directa en JavaScript. Ver por ejemplo https://github.com/ajlopez/SharpAima

Nos leemos!

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

JavaScript e Inteligencia Artificial (1)

Saturday, November 29th, 2014

Siguiente Post

Gracias a la gente de JSConf Argentina 2014, hoy voy a estar dando una charla corta sobre JavaScript e Inteligencia Artificial. La idea es presentar rápidamente algunas ideas, algoritmos, demo de implementaciones, y cerrar con comentarios sobre lo que parece interesante seguir. Inteligencia Artificial es un término muy amplio, y que nació hace décadas. Desde entonces, ha ido acumulando definiciones, ambiciones, herramientas y aproximaciones a tratar de construir agentes inteligentes.

El repositorio de la charla en:

https://github.com/ajlopez/JavaScriptAI

donde hay enlaces a los proyectos presentados, demos, y recursos adicionales.

Los “fuentes” de la presentación de la charla en:

https://github.com/ajlopez/Talks/tree/master/JavaScriptAI

La presentación en línea en:

http://ajlopez.github.io/Talks/JavaScriptAI/index.html#/
http://ajlopez.github.io/Talks/

En la charla visito dos grandes temas: algoritmos genéticos, y redes neuronales. También hay un corto tiempo dedicado a explorar un árbol de juego de tablero. Y hay una demo de algoritmo genético aplicado a programación evolutiva. Quedó fuera de la charla el tema de crear árboles de decisiones, basados en datos. Pero ya lo voy a comentar en los próximos posts las ideas, demos y recursos que me interesaron, y los proyectos que estuve escribiendo.

Nos leemos!

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

Mis próximas Charlas en Buenos Aires: Actores en C#, Single Page Applications

Tuesday, September 30th, 2014

Tengo varios temas que quiero tratar, en distintos lenguajes y tecnologías. Hoy quiero comentar dos charlas que se vienen, que puedo dar gracias al Microsoft User Group:

Aplicaciones Distribuidas en C#, un modelo de actores

http://www.mug-it.org.ar/Event.aspx?Event=180

Lugar: Auditorio del MUG, Rivadavia 1479 Primer Piso “A”, Buenos Aires.
Fecha y Horario: Miércoles 8 de octubre de 2014 de 18:30 a 20:30 hs.

La idea es presentar conceptos de actores, y actores distribuidos, comentar la principal implementación en Java: Akka. Y luego pasar a discutir y mostrar una implementación en C#

Luego

Desarrollando Single Page Applications con JavaScript

http://www.mug-it.org.ar/Event.aspx?Event=181

Lugar: Auditorio del MUG, Rivadavia 1479 Primer Piso “A”, Buenos Aires.
Fecha y Horario: Miércoles 29 de octubre de 2014 de 18:30 a 20:30 hs.

Veremos las fuerzas que llevan a la aparición de aplicaciones web compuestas de una sola página, con dinámica en JavaScript. Siguiendo “baby steps” y simplicidad, exploraremos cómo podemos armar algún ejemplo con simple JavaScript y JQuery, cómo alimentar los datos desde un servidor con una API expuesta (agnóstico de la tecnología) y luego visitaremos algunas librerías JavaScript del lado cliente que nos ayudan, como Angular y Backbone.

Espero que estas charlas aporten algo a estos temas, entre tantos que son interesantes en estos tiempos. Estoy preparando otras charlas, como Inteligencia Artificial en JavaScript para la JSConf 2014 de Argentina. Y espero que me aceptan alguna más, sobre JavaScript y Ruby, en la RubyConf 2014 de Argentina.

Nos leemos!

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