martes, 29 de diciembre de 2009

Sandbox / Arenero

I am trying to do something sensible with the double language posting. Now I will try I tried a solution given by Ezequiel. Now I am using Luciano's solution. English Version

Estoy tratando de resolver el problema con las publicaciones en dos idiomas. Estoy intentando Estaba usando una solución que me dió Ezequiel. Ahora estoy usando una que me pasó Luciano. Versión en Español

martes, 8 de diciembre de 2009

Steering Behaviors: Part I / Comportamientos de dirección: Parte I

(Does anybody has a better Spanish translation for the title? / ¿Mejor traducción al Español para el título?)

Usign Google Wave push a friend of mine (Ezequiel) and me to re-start with some old projects. The idea is to explore Artificial Intelligence for games. He has his programmer/gamer approach and interest and I am more into the scientific/gamer side, anyway we both share a lot of interest in common and, despite eventual arguments (:D), the project is flowing smoothly. You can check the webpage of the current project at Google Code, fell free to check out the SVN and send us your comments. / Luego de experimentar con Google Wave por un tiempo, mi amigo Ezequiel y yo, nos motivamos a re-iniciar proyectos antiguos inconclusos. La idea es explorar inteligencia artifical para juegos. Eze encara los problemas desde el punto de vista del programador/jugador mientras que yo me soy del estio científico/jugador; por suerte ambos tenemos un ben solapamiento de intereses y, dejando d elado alguna que otra discusión (jeje), el projecto está sobre ruedas. Si estás interesado podes mirar la pagina en Google Code y hacer un checkout del repositorio SVN. tus comentarios son bienvenidos.

Currently I am doing my PhD at the Artificial Intelligence Laboratory one of my research interest is to understand the difference in the behavior of an agent (and the algorithms used to program it) when we allow the use of information acquired only through sensors of the agent, without external references. In short, What is the effect of using a frame of reference fixed to the agent? Where the meaning of "fixed" is a used in a wider sense than in rigid body mechanics. At the moment I am happy if I can re-write an algorithm that was defined using variables respect to an external fixed frame of reference, to one using only local variables, and variables that can be acquired by the use of sensors, without knowing the existence of an external reference. Confusing? Well, today's post brings an example. / Actualmente estoy haciendo mi doctorado en un laboratorio de inteligencia artificial y uno de mis intereses es entender como cambia el comportamiento de un agente (y los algoritmos que usamos para programarlo) cuando la información sobre el "mundo exterior" se la obtiene solo a travéz de sensores situados en el agente mismo. En pocas palabras: ¿Cuál es el efecto de utilizar un sistema de referencia solidario al agente? Donde "solidario" lo utilizo en un sentido un poco más amplio que en la mecánica de cuerpos rígidos. Por ahora me contento con traducir algoritmos que fueron definidos utilizando variables en referencia a un sistema de coordenadas fijo, a otros donde solo se utilizan variables en el sistema de referencia local, y ademas que son adquiribles, sin necesidad de conocer el sistema de referencia fijo. Ok, un poco confuso ¿verdad? El post de hoy trae un ejemplo.

You may have heard of Craig Reynolds and his implementation of steering behaviors using agent to agent interaction (sort of molecular dynamics for agents). If you didn't check out the myriads of applets out there in the web, like this one. I won't explain here all the details (check Reynolds webpage or his paper for full details), but is enough to say that for the sake of optimization and the objectives he had in mind (games, games! bwahaha!) all the behaviors are written using the positions and velocities of the agents respect to a global fixed frame of reference; even more an agent can know its own velocity respect to that frame, something not wrong in mathematical terms but impossible if the agent doesn't know the transformation (in this case a Galilean one) from the local frame to the global one, at all times...something difficult in a real agent (without external help, like GPS)./ Quizás hayas escuchado hablar de Craig Reynolds y su implemntación de comportamientos de dirección usando interacciones entre agentes (algo como una dinámica molecular para agentes). Si no escuchaste de el, podés mirar alguno de los applets del montón, como este. No voy a entrar en detalles de todos los comprtamientos (los detalles están en la pagina de Reynolds o en su artículo (todo en inglés)) pero basta decir que, por razones de optimización y porque el tenía en mente juegos, todos los comprtameintos utilizan posiciones y velocidades definidas en un sistema fijo global, incluso un agente puede conocer su velocidad respecto a ese sistema de referencia. Si bien esto no es matemáticamente incorrecto, es imposible hacerlo si el agente no conoce la trasnformación (de Galileo en este caso) entre su sistema local y el global, en todo momento... algo que es muy dificil de tener en un agente real (si ayuda externa, como un GPS).

There is one behavior that I want to look at, the one that aligns the agent to produce flocking. Reynolds paper states: "The Alignment steering behavior gives a character the ability to align itself with other nearby characters...can be computed by finding all characters in the local neighborhood, averaging together the velocity (or alternately, the unit forward vector) of the nearby characters. This average is the desired velocity, and so the steering vector is the difference between the average and our character's current velocity (or alternately, its unit forward vector)." . Can this behavior be written in terms of local (to the agent) variables? Can we achieve an easier (in terms of time complexity) algorithm by doing that? I will try to answer the first question, and to do that lets interpret Reynolds explanation: / En particular me voy a referir a uno de los comportamientos propuestos por Reynolds, el que alinea los agentes para producir flocking. En su artículo, Reynolds nos indica que para cada agente hay que hacer lo siguiente (lo indica en palabras, por lo tanto esto es una interpretación):
  1. Get average velocity of agents nearby (or unit forward vector). / Calcule la velocidad promedio de los agentes cercanos (o el vector unitario que indica su orientación).
  2. Get the difference between that average and the agents velocity. / Tome la diferencia entre ese promedio y la velocidad del agente en cuestión.
  3. Apply a force proportional to that difference. / Aplique una fuerza al agente en cuestion proporcional al resultado de la diferencia.

I am looking to have something more like: / Yo estoy buscando algo como:

  1. Get average relative velocity of agents nearby (or relative heading); This can be achieved with distance sensors and some assumptions about the way another agents looks like or behaves (more on this to come). / Calcule la velocidad relativa promedio de los agentes cercanos (o la orientación relativa); que se puede obtener por medio de sensores de distancias y algunas hipótesis sobre el aspecto y la forma de moverse de los otros agentes.
  2. Apply a force to minimize the norm of that result. / Aplique una fuerza para reducir la norma de ese resultado.

To be continued.../ Continuará...

lunes, 9 de noviembre de 2009

Reunión CC - IM - F / CS - ME - P - Meeting

El viernes salí a tomar unas cervezas con un colega del trabajo, Matêj Hoffmann y con un ex-colega y gran amigo Emanuel Benker. Entre cerveza y cerveza ilustrabamos nuestra conversación...que importante tener papel y hoja a mano! / On Friday I went out for a couple of beers with Matêj Hoffmann and Emanuel Benker, both friends from the lab. Between beers we were illustrating our conversation in a piece of paper...How important to have pen and paper at hand!

Por ahi abajo se lee: / Down there you can read:
"Frauen sind wie Wellblech. Wenn du sie nicht nagelst, fliegen sie davon"
La broma es sexista y muy fea, producto del consumo excesivo de cerveza, pero es gracioso ver como lo popular se encuentra en muchas culturas...una lástima que sea esto. / The joke is sexist and ugly, due to the excess of beer, but is funny to see how popular stuff is multi cultural... a pitty that it is this joke.

sábado, 7 de noviembre de 2009

Sudoku para 2 segunda vuelta! / Sudoku for 2 second round!

I got an invitation to Google Wave form my friend Ezequiel. While learning how to use this mysterious application I found that there is a gadget (an extension/ plug-in) that allows multiplayer Sudoku, haha, pretty similar to my previous post on Sudoku for 2. check it out!
LabPixies: Sudoku Puzzles

Hace unos días recibí una invitación a Google Wave de mi amigo Ezequiel. Mientras intentaba aprende run poco sobre esta misteriosa aplicación, encontré que tiene un gadget (una extension) que permite hace juegos de Sudoku con muchos jugadores. Increiblement eparecido a lo que comentaba en mi post sobre el tema. Jaja, que bueno!
Aqui está el webapge de los que lo programaron...en inglés. LabPixies: Sudoku Puzzles

lunes, 26 de octubre de 2009

Swarms in Inkscape

Voy a mostrar un pequeño tutorial de Inkscape para hacer "enjambres" de flechitas., hay muchas maneras de hacer esto. / This is a short Inkscape tutorial that shows one possible way to do swarms.
Paso 1 / Step 1:

Contruye un circulo sin relleno. / Make a circle without filling.

Paso 2 / Step 2:
Con la herrameinta de edición de nodos incrementa el numero de nodos en el circulo (cada nodo será un agente en el enjambre). / Select the node tool and increasse the numebr of nodes (each node will be an agent in the swarm).

Paso 3 / Step 3:
Usando el menu de propiedades de línea, elije que se muestren flechas en nodos intermedios. / On the stroke properties menu, choose to show middle markers, I used arrows.

Paso 4 (Opcional) / Step 4 (Optional):
Usando el menu Efectos -> Modificacion de camino/linea (no se como se llama en la versión en español) -> "Jitter"(sacudir/mezclar?) nodos, deforma un poco el círculo . / Using the menu Effects -> Modify Path -> Jitter nodes add some noise to the path.

Paso 5 / Step 5:
En Inkscape los marcadores y las lineas no comparten el color (algunos creen que e sun bug), por esto podemos remover el color de la linea y los marcadores serán visibles. Remueve el color de la linea haciendo click derecho en el cuadro del color de línea en la esquina izquierda inferior de la plantalla on en el menu d epropiedades de línea que usaste antes. / Using the feature (some people think it is a bug) of having markers of different color than the one of the stroke, remove the stroke (right-click on the color of the stroke, on the bottom left of the screen) or in the stroke properties menu we used before.

Nota que algunas flechas estan fuera del dibujo y no son visibles. Puedes arreglar esto con la herramienta de edición de nodos, moviendo los nodos parahacelros visibles. Ahi miestro como arreglé la flecha en la parte inferior. / Note that some markers are outsid eof the drawing region. To fix this you could use the node edition tool and rerrange the rrows that are not visible (or partially visible). Here is my fix of the bottom arrow.

El ejambre esta listo! aumenta mas lineas para hacer enjambres mas locos! / The swarm is done! Add lines to do crazy swarms!

Comparte tus resultados en el blog! / Share your results!

Gracias. / Thanks.

miércoles, 7 de octubre de 2009

a day not enough!!!

El martes estuve con un amigo en Technorama, en Wintenthur, Suiza.
Mortal el alguno con guita se manda a visitar suiza, o viaja de suerte, no se pierdan esto.

Aqui algunos videitos que pude filmar... perdon por la calidad pero solo tenia el celular.

Si quieren mas busquen Technorama en youtube!

Above there are a few videos I took in Technorama, Wintenthur. The place is amazing, and a day is way too short for doing an extensive visit.
Check Youtube on Technorama for more videos...


lunes, 9 de marzo de 2009

Dynamical Entities

After a long time without posting - and thanks to a comment from Luciano - I am posting again.
I read in a few blogs that posting periodically becomes an issue if we pursue long post. Some guys opt for reducing the length of their post in order to keep posting without big time gaps. I will try the same.
Today I will reproduce a nice example taken from a discussion in a forum about physics ( alas in Spanish). The author of the post, Alejandro Kolton, was trying to introduce (and he did it!) the notion of sink and limit cycle in dynamical systems in a conceptual way. He proposed the following rule

TOE rule
  1. Take an arbitrary Integer
  2. Count the number of Odd digits, O=# Odd digits
  3. Count the number of Even digits, E=# Even digits (including zeros)
  4. Add the total, T=O+E
  5. Write the number TOE
  6. Go back to 2 and use this new number.
Applying the rule to any number will send you to a fixed value, namely

A second rule was proposed by a forum member: Take into account the number of
zeros! The new rule is

TOEZ rule
  1. Take an arbitrary Integer
  2. Count the number of Odd digits, O=# Odd digits
  3. Count the number of Even digits, E=# Even digits (excluding zeros)
  4. Count the number of zeros, Z=# zeros
  5. Add the total, T=O+E+Z
  6. Write the number TOEZ
  7. Go back to 2 and use this new number.
This new rule has a limit cycle of period 3.

Or in the field's jargon

Here is an example,
TOE=1055 TOEZ=10541
TOE=431 TOEZ=5311
TOE=321 TOEZ=4400
TOE=321 TOEZ==4022
TOE=321 TOEZ==4031
TOE=321 TOEZ==4211
TOE=321 TOEZ==4220
TOE=321 TOEZ==4031
TOE=321 TOEZ==4211
TOE=321 TOEZ==4220

I hope you find these games amusing!
If you would like to learn more about dynamical systems, I recommend the book by S. H. Strogatz (my Hero! :D) .