On January 2011 there will be two Hands-on workshops on topics that
may be of your interest. The workshops are in the context of the
AMARSi Project (https://www.amarsi-project.eu/) but their are open to
the general public; feel free to
forward this message to people who you think may also be interested.
Due to space limitations we will prioritize attendees from AMARSi and
the hosting venues. Please, send your application as soon as possible.
Information about the workshops is given below.
"Hands-on introduction to Reservoir Computing", given by Tim Waegeman,
Francis Wyffels and Ken Caluwaerts from Reservoir Lab, Ghent
University
In this three day tutorial we will start with a theoretical
introduction to Reservoir Computing, an efficient training method for
recurrent neural networks. Next, an overview of OGER is given, a
python toolbox for rapidly building, training and evaluating modular
learning architectures. The emphasis of the tutorial is on practical
applications such as time series prediction, speech recognition and
robotics. Participants will have ample opportunity to bring forward
their own research problems with respect to Reservoir Computing.
Activities:
- Theoretical introduction to Reservoir computing
- Setup and use of the OGER toolbox (Reservoir Computing Toolbox for Python)
- Solution to practical problems
- Applications in robotics
- Group activity
Date: 2nd Week (10-12) January 2011
Venue: ZHAW Winterthur
Available seats: 20
"Probabilistic Inference for Motor Control", given by Gerhard Neumann
and Elmar Rückert from the Technische Universität Graz.
In this workshop we will start with an short overview over graphical
models, inference in graphical models, message passing, approximate
message passing. Subsequently we will apply the inference in graphical
models framework for motor planning. We will present the relevant
theory and also show some practical examples in MATLAB.
Activities: - Bayesian inference: theory and examples.
- Graphical models for motor planning and examples.
- Group Activity
Date: End of 2nd(13-14) Week of January 2011.
Venue: AILab Artificial Intelligence Laboratory, University of Zürich.
Available seats: 10
You can find the registration form here
https://spreadsheets.google.com/viewform?formkey=dGhyLTVURkZZOGZlcEh3eTdDeV9XMWc6MQ
For further information and questions contact Juan Pablo Carbajal
carbajal at-symbol ifi dot uzh dot ch
En este blog podrá leer los comentarios del autor y ver algunas fotografías de los lugares que visita y los trabajos que realiza. El objetivo: Dejar que los que esten interesados miren. In this blog you will find comments of the author and some pictures of the places he visits and the jobs he is involved. The objective: Those who are interested can watch.
Translate
martes, 23 de noviembre de 2010
jueves, 10 de junio de 2010
CGAL, Python, Octave
Having a good library for computational geometry is very important for me. A year ago I found CGAL and since then I am enjoying it. Sometimes the burden of C++ can be annoying (for rapid prototyping, for example), therefore lately I was trying the Python bindings and trying to get some functions working on GNU Octave ... English Version
Para mi es fundamental tener una buena bilioteca de geometría computacional a mano. Hace un año, laburando en un programita para seguir objetos en videos, me topé con CGAL y desde entonces es mi primera referencia a la hora de programar cuestiones geométricas (mallas, manipulacion de polígonos, etc...). CGAL está escrita en C++ y a veces programar es un poco tedioso debido al caracter declarativo del lenguaje. Por esta razón, últimamente estuve probando la versión para Python y estoy tratando de hacer funciones para GNU Octave (todavía sin éxito) ... versión en Español
Para mi es fundamental tener una buena bilioteca de geometría computacional a mano. Hace un año, laburando en un programita para seguir objetos en videos, me topé con CGAL y desde entonces es mi primera referencia a la hora de programar cuestiones geométricas (mallas, manipulacion de polígonos, etc...). CGAL está escrita en C++ y a veces programar es un poco tedioso debido al caracter declarativo del lenguaje. Por esta razón, últimamente estuve probando la versión para Python y estoy tratando de hacer funciones para GNU Octave (todavía sin éxito) ... versión en Español
lunes, 7 de junio de 2010
Blinn-Phong Halfway vector and the parallelogram rule / Blinn-Phong vector a "Mediocamino" y la regla del paralelogramo
Studying for the Computer Graphics final exam I bumped into a simple, but important fact about adding vectors. Is stated everywhere that in the Blinn-Phong reflection model, the angle spanned by the Halfway vector and the normal to the surface (where the reflection is taking place) is the half of the angle spanned by the Viewer (or Eye) vector and the Reflected vector ... English Version
Preparando el examen final de la materia Computer Graphics, me topé con una propiedad relacionada a la suma de vectores que, si bien es básica, no deja de ser importante. En muchos sitos de internet (link? no he visto muchos en Español...habrá que poner en wikipedia...tendré tiempo?) se dice que el vector de "Mediocamino" en el modelo de iluminación Blinn-Phong sustiende un ángulo con la normal de la superfice (donde la reflexión ocurre) que es la mitad del ángulo entre el vector que apunta al observador y el vector que indica la dirección de reflexión de la luz ... versión en Español
Figure 1: Light incident from direction L on a surface with normal N. The light is reflected in direction R and the viewer is pointed by V. H is the Halfway vector.
Figure 2: Addition of vectors using the parallelogram rule. The addition of vectors of arbitrary length does not yields the bisector of the angle. The addition of the normalized vectors produces the angle bisector.
Preparando el examen final de la materia Computer Graphics, me topé con una propiedad relacionada a la suma de vectores que, si bien es básica, no deja de ser importante. En muchos sitos de internet (link? no he visto muchos en Español...habrá que poner en wikipedia...tendré tiempo?) se dice que el vector de "Mediocamino" en el modelo de iluminación Blinn-Phong sustiende un ángulo con la normal de la superfice (donde la reflexión ocurre) que es la mitad del ángulo entre el vector que apunta al observador y el vector que indica la dirección de reflexión de la luz ... versión en Español
La Figura 1 muestra la situación que voy a describir. Un rayo de luz llega, desde la dirección $\hat{L}$, a una superficie con normal $\hat{N}$ y es reflejado en la dirección $\hat{R}$. El modelo trata de aproximar cuanta luz llega a un observador que mira desde la dirección definada por $\hat{V}$. Basandose en el modelo de superficies Lambertianas, la cantidad de luz alrededor de $\hat{R}$ tiene una distribución del tipo coseno y se puede calcular utilizando el producto escalar $\hat{R}\cdot\hat{V}$. El modelo de Blinn-Phong reemplaza esa operación con una aproximacion adicional, utilizando el vector $\hat{H}$ que se conoce como vector de "Mediocamino", \[\hat{H}=\frac{\hat{L}+\hat{V}}{\|\hat{L}+\hat{V}\|}\]. El nombre "Mediocamino" viene del echo que $\hat{H}$ divide el ángulo entre $\hat{L}$ y $\hat{V}$ en dos partes iguales. Es decir, es la bisectriz de ángulo. Ok, hay que notar que para que eso sea verdad, $\hat{H}$ se tiene que calcular con los vectors $\hat{L},\hat{V}$ normalizados. De no hacerlo así se incurre en un error, como se muestra en la Figura 2. La suma de dos vectores de longitud arbitraria es, en efecto, la diagonal del paralelogramo definido por los dos vectores. Sin embargo, la suma de los vectores es la bisectriz del ángulo, solo si los vectores están normalizados (o ambos tienen el mismo módulo).
Figure 1 shows the situation. A ray of light is coming form the direction indicated by $$\hat{L}$$ and it is reflected in the direction $\hat{R}$ at the surface point with normal $\hat{N}$. The model tries to estimate the amount of light that goes towards the viewer (or beholder's eye), pointed by $\hat{V}$. Based on the reflection of Lambertian surfaces, we could calculate that using the dot product $\hat{V} \cdot \hat{R}$. The Blinn-Phong model simplifies the calculations by replacing $\hat{V} \cdot \hat{R}$ with $\hat{N} \cdot \hat{H}$. Where
\[\hat{H} = \frac{\hat{L} + \hat{V}}{\|\hat{L} + \hat{V}\|}, \]
is called the Halfway vector. The name comes from the fact that, as shown in Figure 1, this bisects the rhombus defined by the two normalized vectors $\hat{V}, \hat{L}$.
So far so good. Note that I have explicitly write the vectors with a hat to indicate that they are normalized. If you do not use normalized vectors, the vector you will get $W$ is not a halfway vector anymore. Though it is the diagonal of the parallelogram defined by the not normalized vector $L,V$, it is not bisecting the angle. This is shown in Figure 2.
\[\hat{H} = \frac{\hat{L} + \hat{V}}{\|\hat{L} + \hat{V}\|}, \]
is called the Halfway vector. The name comes from the fact that, as shown in Figure 1, this bisects the rhombus defined by the two normalized vectors $\hat{V}, \hat{L}$.
So far so good. Note that I have explicitly write the vectors with a hat to indicate that they are normalized. If you do not use normalized vectors, the vector you will get $W$ is not a halfway vector anymore. Though it is the diagonal of the parallelogram defined by the not normalized vector $L,V$, it is not bisecting the angle. This is shown in Figure 2.
Figure 1: Light incident from direction L on a surface with normal N. The light is reflected in direction R and the viewer is pointed by V. H is the Halfway vector.
Figure 2: Addition of vectors using the parallelogram rule. The addition of vectors of arbitrary length does not yields the bisector of the angle. The addition of the normalized vectors produces the angle bisector.
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
Estoy tratando de resolver el problema con las publicaciones en dos idiomas.
Este es el tutorial que Luciano me mandó:
Es fácil. Te explico cómo hacer para que las funciones de JavaScript te queden en la plantilla de tu blog, así las podés usar en todas tus entradas.
En el panel de control de Blogger vas a Diseño -> Edición de HTML y en el cuadro de texto que te abre con el texto de tu plantilla ingresás el siguiente código javascript entre las etiquetas
La primera función muestra un div y la segunda oculta un div. Para saber con qué div trabajar la función necesitas que le pases como parámetro el ID del mismo.
Una vez que insertás ése código y guardas los cambios podés crear una entrada en la que vamos a necesitar 4 cosas: 2 links (uno para leer la nota en español y otro para leer la nota en inglés) y 2 divs (uno con el texto en español y el otro con el texto en inglés)
Te paso el código que yo usé para probar que todo funcione bien en mi blog.
Fijate que los links primero llaman a la función para ocultar el div del idioma que no hay que mostrar y después muestra el link del idioma que se seleccionó. De esta manera nos aseguramos que siempre se muestre solamente el idioma que se seleccionó.
En las etiquetas de los divs fijate que el id está compuesto por el nombre del post y el idioma. Tenés que asegurarte que el id de cada div sea único, si no el javascript no va a funcionar. Por eso armé así los id teniendo en cuenta que en la página principal del blog se muestran varias entradas juntas y si sólo ponés como id "divIngles" y "divEspanol" vas a tener varios divs con el mismo id en la misma página y el javascript no va a funcionar.
Por último fijate que los divs tienen el atributo style="display:none;". Esto es para que los divs cargue ocultos y después el javascript se encarga de cambiar éste atributo para que el div se muestre o se oculte.
Es fácil. Te explico cómo hacer para que las funciones de JavaScript te queden en la plantilla de tu blog, así las podés usar en todas tus entradas.
En el panel de control de Blogger vas a Diseño -> Edición de HTML y en el cuadro de texto que te abre con el texto de tu plantilla ingresás el siguiente código javascript entre las etiquetas
<head>y
</head>
<script language="javascript">
function showDiv(divId) {
document.getElementById(divId).style.display = 'inline';
}
function hideDiv(divId) {
document.getElementById(divId).style.display = 'none';
}
</script>
La primera función muestra un div y la segunda oculta un div. Para saber con qué div trabajar la función necesitas que le pases como parámetro el ID del mismo.
Una vez que insertás ése código y guardas los cambios podés crear una entrada en la que vamos a necesitar 4 cosas: 2 links (uno para leer la nota en español y otro para leer la nota en inglés) y 2 divs (uno con el texto en español y el otro con el texto en inglés)
Te paso el código que yo usé para probar que todo funcione bien en mi blog.
<a href="javascript:hideDiv('divMiPostIngles');showDiv('divMiPostEspanol');">Versión en Español</a>
<a href="javascript:hideDiv('divMiPostEspanol');showDiv('divMiPostIngles');">English Version</a>
<div id="divMiPostEspanol" style="display: none;">
Texto en español aquí
</div>
<div id="divMiPostIngles" style="display: none;">
English text here
</div>
Fijate que los links primero llaman a la función para ocultar el div del idioma que no hay que mostrar y después muestra el link del idioma que se seleccionó. De esta manera nos aseguramos que siempre se muestre solamente el idioma que se seleccionó.
En las etiquetas de los divs fijate que el id está compuesto por el nombre del post y el idioma. Tenés que asegurarte que el id de cada div sea único, si no el javascript no va a funcionar. Por eso armé así los id teniendo en cuenta que en la página principal del blog se muestran varias entradas juntas y si sólo ponés como id "divIngles" y "divEspanol" vas a tener varios divs con el mismo id en la misma página y el javascript no va a funcionar.
Por último fijate que los divs tienen el atributo style="display:none;". Esto es para que los divs cargue ocultos y después el javascript se encarga de cambiar éste atributo para que el div se muestre o se oculte.
This is a translation of Luciano's tutorial:
It is Easy! Let me explain to you how to add JavaScript functions to your Blog templateg, in this way you can use it for every post.
In Blogger's control panel go to Layout -> Edit HTML and in the text box that has your template add the following snipet anywhere between the tags
Here the snipet
The fisrt function shows a div and the second hides a div. To know which one to hide the function needs the ID of the div.
Once you have save your code you can write entries using this add-on. You need 4 things: 2 links (one to read the post in Spanish and the other to read it in English) and 2 divs (One with the Spanish text and the other with the text in English)
Here is the code Luciano's used in his post to check the functions.
Note that the links first call the hidding function of the other language (which we don't want to show) and then call the function to show the selected language. In this way we are pretty sure that only one language will be shown, the selected one.
In the attributes of the divs, check that the ID is composed with the name of the post and the language. This is because we need unique IDs for each div we create, otherwise javascript wont work. The main page of Blogger has many entries to gether if you use a ID like "divEnglish" y "divEspanol" many divs will have the same ID and javascript wont work.
Finally note that the divs have the attribute style="display:none;". This hides the div at startup and then javascript takes care of modifying this, rendering the div visible or invisible.
It is Easy! Let me explain to you how to add JavaScript functions to your Blog templateg, in this way you can use it for every post.
In Blogger's control panel go to Layout -> Edit HTML and in the text box that has your template add the following snipet anywhere between the tags
<head>y
</head>
Here the snipet
<script language="javascript">
function showDiv(divId) {
document.getElementById(divId).style.display = 'inline';
}
function hideDiv(divId) {
document.getElementById(divId).style.display = 'none';
}
</script>
The fisrt function shows a div and the second hides a div. To know which one to hide the function needs the ID of the div.
Once you have save your code you can write entries using this add-on. You need 4 things: 2 links (one to read the post in Spanish and the other to read it in English) and 2 divs (One with the Spanish text and the other with the text in English)
Here is the code Luciano's used in his post to check the functions.
<a href="javascript:hideDiv('divMiPostIngles');showDiv('divMiPostEspanol');">Versión en Español</a>
<a href="javascript:hideDiv('divMiPostEspanol');showDiv('divMiPostIngles');">English Version</a>
<div id="divMiPostEspanol" style="display: none;">
Texto en español aquí
</div>
<div id="divMiPostIngles" style="display: none;">
English text here
</div>
Note that the links first call the hidding function of the other language (which we don't want to show) and then call the function to show the selected language. In this way we are pretty sure that only one language will be shown, the selected one.
In the attributes of the divs, check that the ID is composed with the name of the post and the language. This is because we need unique IDs for each div we create, otherwise javascript wont work. The main page of Blogger has many entries to gether if you use a ID like "divEnglish" y "divEspanol" many divs will have the same ID and javascript wont work.
Finally note that the divs have the attribute style="display:none;". This hides the div at startup and then javascript takes care of modifying this, rendering the div visible or invisible.
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):
I am looking to have something more like: / Yo estoy buscando algo como:
To be continued.../ Continuará...
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):
- 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).
- Get the difference between that average and the agents velocity. / Tome la diferencia entre ese promedio y la velocidad del agente en cuestión.
- 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:
- 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.
- Apply a force to minimize the norm of that result. / Aplique una fuerza para reducir la norma de ese resultado.
To be continued.../ Continuará...
Suscribirse a:
Entradas (Atom)

