Buenos días.
Vamos a tener, creo que es la quinta conferencia
de este ciclo del máster y doctorado en Ingeniería de Sistemas
y de Control del curso actual.
Y hoy va a venir un profesor joven.
Pero ya con bastante experiencia
y sabiduría acumulada, que es el profesor Álvarez Gutiérrez,
que es catedrático de Ingeniería de Sistemas
y Automática en la Escuela de Telecomunicaciones de la Politécnica
de Madrid.
Es realmente un especialista en lo que podríamos decir
enjambre de drones.
Ha hecho bastantes proyectos, inclusive con el grupo de la UNED
ha coordinado proyectos en los que se hacían enjambres,
en este caso de drones submarinos,
principalmente para hacer misiones de distinto tipo,
ecologistas, rescates y demás.
También, por tanto, es especialista en lo que podríamos llamar
robótica colaborativa y redes de sensores.
De hecho, su charla de hoy va a ser algo más novedosa,
inclusive de las líneas de trabajo que venía desarrollando,
pero creo que va a ser muy interesante
porque es de emergencia y transferencia de comunicaciones
semánticas en robótica colaborativa.
Así que, Álvaro, cuando quieras.
Pues muchas gracias Joaquín, buena presentación.
Compartir la pantalla, si me permiten.
En un principio parece que está.
Muy buenos días a todos.
Muchas gracias por la presentación.
La conferencia que les traigo hoy es una conferencia.
Con un título un poco singular relacionado
concretamente en la comunicación de robots colectivos,
algo que hemos llamado Emergencia y Transferencia de Comunicación Semana
.
El motivo de este título
y de esta presentación es intentar basarnos en un pilar fundamental
de la robótica colectiva y es la comunicación.
Algo bastante olvidado generalmente cuando estamos trabajando en aspectos
de robótica pero con una relevancia bastante importante
en cuanto estamos hablando de individuos robots
en este caso que tienen que realizar estas tareas cooperativas y auto
organizarse de ciertas maneras
entonces la conferencia va a estar fundamentada en cinco pilares
vale básicamente.
Vamos a encontrarnos dentro del campo de la robótica evolutiva.
Es decir, el sistema,
y por supuesto incluida la comunicación,
tiene que ser creada y evolucionada por robots.
Además, lo que queremos es que emerja una comunicación
que sea independiente de la tarea.
Estos son los problemas que mencionaremos a día de hoy.
En la literatura lo que encontramos son.
Trabajos de robotía colectiva donde en función
de lo que queremos resolver siempre evolucionamos algo nuevo,
siempre creamos algo nuevo y cuando queremos transferirlo
a una tarea es imposible realizar dicha transferencia.
Vamos a intentar atacar ese problema.
Cuando hablamos de comunicación queremos trascender
y superar lo que es una mera señalización,
no unos robots que hagan unos pitidos,
una comunicación que encienden un LED y otros robots lo ven,
sino que realmente se genere un léxico
de alguna manera que ellos mismos sean capaces de poder desarrollar
y que además sean capaces de poder transferirlos entre los individuos.
Por último, lo que queremos es que ese léxico,
que de alguna manera ha sido creado y evolucionado por los individuos,
pueda ser adoptado por un colectivo de robots
de tal manera que generen su propio diccionario
para hablar de objetos que encuentran en el entorno,
tareas que tienen que resolver, etc. Estos son básicamente
los pilares de la conferencia
y lo he dividido en cuatro apartados.
Un primer apartado de introducción en el que quiero plantear un poco
el contexto y el planteamiento
de cómo coordinamos estos cuatro apartados.
Este planteamiento se va a dividir en dos fases fundamentales,
que es el punto 2 y el 3, unos resultados preliminares
y posteriormente la parte concreta de transferencia y emergencia
de datos.
De la propia semántica y finalmente espero que más
o menos dentro de una hora realicen unas pequeñas conclusiones.
Pues bien, ¿dónde nos situamos?
Como les he comentado,
nos encontramos dentro del campo de la robótica colectiva
y especialmente dentro del campo de la robótica de Hambre.
La robótica de Hambre o Sun Robotics es un campo de la robótica
que estudia fundamentalmente un conjunto de robots,
pero que estos robots son simples.
Con el objetivo de resolver tareas que podríamos definir complejas.
El grado de complejidad ya depende un poco de lo que queramos resolver,
pero siempre relacionado con los robots.
Básicamente los individuos del colectivo, esos robots,
no serían capaces de poder resolver la tarea por sí solos.
Digamos que esa podría ser la definición más básica.
En la literatura está más o menos aceptado ciertas características
que tienen que tener un sistema de robótica de enjambres.
Por supuesto los robots tienen que ser autónomos,
tiene que haber un número suficiente,
un gran número de robots,
que generalmente son heterogéneos y homogéneos.
¿Por qué homogéneos?
Porque si falla un robot puede ser reemplazado por otro robot
sin que el conjunto sufra ningún impacto en la resolución
de la tarea.
Como comentaba previamente,
son robots simples que lo podríamos denominar ineficientes,
robots que no son capaces de resolver la tarea por sí solos.
Ese sería el concepto de ineficiencia que queremos trasladar.
Y por último.
Está el concepto de la comunicación o la propia percepción del entorno.
Siempre lo plantearemos desde una perspectiva local,
es decir,
no queremos grandes comunicaciones a grandes distancias,
simplemente el robot percibe su entorno
a través de sus propios sensores y realiza comunicaciones
entre otros individuos que se encuentran en su entorno local.
Esos serían los cinco puntos fundamentales
de la robótica de Enjambra.
Dicho esto, la robótica de hambre está bien inspirada, generalmente,
en colonias de insectos sociales o animales más o menos regarios,
para resolver tipo de tareas de transporte colectivo,
recolección, formaciones, construcciones de nidos,
como hacen por las hormigas, termitas, abejas, avispas,
cucarachas, o movimientos de animales como bandadas de pájaros o de peces,
a la hora de realizar ciertas formaciones,
o cómo son capaces de moverse.
Las preguntas que van por dentro es cómo.
Seres tan sencillos tan ineficientes tan simples son capaces
de resolver tareas de alguna manera tan complicadas
y digamos que a lo largo de las últimas cuatro o cinco décadas
realmente en las últimas dos décadas con carácter más predominante
todo este tipo de aplicaciones han sido trasladadas al campo
de la robótica ya sea en simulación o con robótica real.
Robots móviles en superficie, robots aéreos,
drones, al día de hoy tenemos un colectivo,
incluso robots submarinos.
O incluso un grupo de robots heterogéneos,
voladores, escaladores, robots en superficie, que son capaces
de realizar diferentes tipos de tareas en función
de las características que tienen.
La realidad es que en todos estos experimentos
siempre existe algún tipo de comunicación
y ese es el pilar en el que nos centramos hoy.
La comunicación generalmente la dividimos en tres tipos,
podríamos clasificarlas.
Lo que llamamos comunicación a través del entorno,
como realizan por ejemplo las hormigas
o las termitas al seguir feromonas, ya sea para construir nidos
o para generar caminos en localización.
O comunicación a través del estado,
en función de cómo se encuentra un individuo,
se percibe a los individuos de al lado
y es la comunicación a través de obtener información
de cómo un individuo percibe a otro.
O por último, la comunicación directa,
es comunicación entre un individuo y otro.
Es ahí donde vamos a centrar hoy esta presentación,
pese a que generalmente lo que encontramos en la literatura
son trabajos centrados en las comunicaciones a través
del entorno, fundamentalmente estirmeras.
Y dentro de la comunicación directa
distinguimos dos tipos de comunicación.
Una comunicación abstracta, que es
toda la información se encuentra en el mensaje,
lo que comunico es simplemente la información que aparece.
O una comunicación situada.
El propio contexto de donde nos encontramos es necesario
para entender el mensaje.
No es lo mismo que yo les diga, diríjanse a la puerta o diríjanse
a la puerta que está a mi izquierda.
En ese caso es necesario saber cómo yo estoy posicionado,
cómo estoy referenciado con respecto a ustedes,
con la idea de poder llegar a ese objetivo.
Y dentro de todo este concepto de comunicación,
cuando hablamos de comunicación emergente
o emergencia de comunicación,
que en castellano queda un poco raro, digamos que es,
queremos que tanto el léxico como la semántica,
independientemente de lo complejo que sea,
emerja de un proceso evolutivo, aparezca de un proceso evolutivo,
sea creado a través de un proceso evolutivo.
Ahí es donde nos centraremos en el día de hoy.
¿Cuál es el problema que encontramos?
Cuando analizamos la comunicación existente en trabajos
en la literatura.
Fundamentalmente encontramos tres problemas.
El problema de la señalización.
Ese es un problema en el que cuando ponemos una tarea,
la diseñamos, mantenemos un sistema evolutivo
y ponemos a evolucionar nuestros robots,
al final emerge simplemente una pequeña señalización,
como comentaba previamente.
Y no hay muchos trabajos que consigan
una evolución de algo que sea un poquito más complicado
para darle una característica un poquito más importante
o para poder incluso resolver tareas más complicadas
a lo largo del tiempo.
Ese es el primer problema.
El segundo es que, como gráfico general,
es imposible que ese trabajo que se ha realizado
sea trasladado a otro entorno.
Un sistema de seguir caminos simulando feromonas en tierra
lo trasladamos a un entorno acuático,
ya que ha sido así presentado el asunto,
y tenemos diferentes individuos que son incapaces de comunicarse y seguir
un camino específico.
Por lo tanto, no tenemos una estructura
que esté estandarizada.
Ese es el tercer problema.
Por lo tanto, no podemos generalizar entre tareas,
no podemos trasladar conocimiento entre individuos.
Y existe un tercer problema
y es en los pocos casos en los que ya no nos centramos
en una señalización, sino que tenemos una representación simbólica,
tenemos una semántica, un pequeño léxico,
aparece ya el diseñador.
Y ahí somos nosotros los que le trasladamos
a los individuos los conceptos.
Y bien es conocido, supongo,
por muchos de ustedes, el problema del anclaje del símbolo,
que básicamente hace referencia en.
Como los símbolos están anclados a las propias percepciones
del robot.
Simplifiquémoslo así, aunque entraremos un poco en detalle
posteriormente.
Por lo tanto, para resolver este concepto que estamos hablando
de comunicación emergente,
necesitamos resolver todos estos problemas.
Y de eso es un poco la propuesta
y el planteamiento que les traigo hoy.
Un planteamiento en cuatro fases.
Voy a empezar por la última.
Primero, lo que hemos denominado semántica emergente.
¿Qué es lo que consideramos aquí?
Es decir, los robots deben crear representaciones,
ellos, autónomamente, a través de sus sensores,
de objetos o acciones o tareas que tienen que resolver,
generando un propio léxico que se comparte,
se consensua entre los individuos de un colectivo.
¿Para que eso ocurra?
Consideramos que tiene que ser necesario que los robots
tengan una estructura de comunicación que sea consistente
y que pueda ser trasladada entre ellos.
Podríamos asemejarlo a lo que pudiera
ser el Mentalae de Fodor probablemente,
esa caja de comunicación que tenemos ahí nata de alguna manera,
salvando las distancias por otro lado.
Para conseguir esto lo primero que necesitamos por lo tanto
sería algo mucho más básico
y es que existan un conjunto de robots
que sean capaces de resolver tareas de manera simultánea
bajo un mismo controlador,
tanto en términos de ejecución de tarea
como en términos de comunicación.
Y por último, lo que consideramos el primer paso es que,
aunque una misma estructura no sea capaz de resolver
las mismas tareas, al menos esa misma estructura
evolucionada de diferentes maneras sí que debería permitir
a un conjunto de individuos que realicen tareas diferentes.
Digamos que si voy de atrás adelante tal y como lo hemos planteado,
queremos una estructura neuronal en nuestro caso
para que los robots resuelvan tareas,
aunque tengamos que entrenarlas y adaptarlas permanentemente.
Posteriormente que esa misma estructura sea
adaptada para resolver un conjunto de tareas determinado,
no solo una, no todas a la vez.
Que exista una estructura fija
que pueda ser transferida en diferentes individuos
para que posteriormente seamos capaces de crear un léxico.
Ahí es básicamente donde se centra este trabajo.
Las dos primeras las presento en los resultados preliminares,
unas pequeñas pinceladas exclusivamente
y las otras dos en el punto 3 de transferencia de emergencia.
Así que voy a intentar situar nuestro problema.
Primitivas cooperativas.
Básicamente intentamos resolver tres preguntas para desgranar todo
lo que he comentado previamente.
Básicamente queremos saber si es posible
resolver tareas colaborativas con una comunicación simple.
Si ese es el caso,
que la robótica evolutiva sea capaz de generar esa comunicación
y que además un mismo controlador,
ahí es donde estaría la parte un poquito más novedosa
de este aspecto,
pueda resolver varias tareas aunque tenga que ser evolucionada.
Si ese es el caso, vamos a proponer una serie de experimentos sencillos
para comprobar si esto es factible.
Les planteo cuatro experimentos incrementales en complejidad,
muy sencillos,
por eso lo llamamos primitivas, un concepto de selección de líder.
Selección de líder
significa que tenemos un conjunto de individuos,
todos homogéneos, iguales, en los que ellos deciden
quién es el líder, de una manera autoorganizada.
Un segundo experimento en el que hablamos de identificación
de borde.
Básicamente tenemos un conjunto de individuos
y tenemos que saber quién se encuentra en el perímetro
del conjunto de los robots o quién se encuentra en el interior.
Tercer experimento ya implica algo de movimiento,
un consenso de orientación.
Queremos que los robots acaben orientándose hacia un mismo sentido.
Y por último.
Un experimento un poco particular.
Queremos un seguidor de luz que hemos definido.
Todos los robots deben seguir una luz que se está moviendo por el entorno,
pero no todos los robots son capaces de ver la luz.
De tal manera que tenemos robots ciegos,
tenemos robots que son capaces de sentirla y tienen
que aprovechar la comunicación para que unos robots sigan a otros.
Básicamente son los cuatro escenarios que planteamos que vamos a intentar
resolver con un único controlador, exclusivamente,
que será entrenado para cada una de las características,
eso sí, cada una de las tareas.
De manera sencilla, para intentar no extendernos mucho,
todos los trabajos que se van a presentar
en los diferentes apartados, estamos trabajando
con redes neuronales recurrentes continuas en el tiempo
y los sintonizaremos con algoritmos genéticos,
generalmente.
Vamos a proporcionar un sistema de comunicación
a los robots muy sencillo.
Básicamente los robots
tienen unas restricciones de comunicación en rango,
para que la comunicación sea local, eso por un lado.
Vamos a generarles una capacidad que definan
ellos qué mensaje quieren trasladar y a la hora de transmitir información
vamos a dividir,
discretizar el espacio omnidireccional del robot.
Básicamente van a transmitir información,
en este caso en cuatro orientaciones,
hacia adelante, hacia detrás, hacia la izquierda
o hacia la derecha.
Vamos a analizar fundamentalmente qué tipo de comunicación
emerge porque va a ser la que nos dé el paso a los siguientes apartados
y vamos a intentar analizarlo también en conceptos de escalabilidad
y robustez.
La comunicación concretamente,
mantenemos una escala de comunicación con un vector de estados
como el que muestro en la presentación.
Básicamente existe un mensaje que transmiten
los robots que se ha recibido por otro conjunto de robots que está
en el rango que puedan escuchar.
Además, aparte de recibir el mensaje,
reciben una intensidad de señal, una relación señal a ruido.
Básicamente,
la distancia a la cual se encuentra el individuo que está transmitiendo.
Cuanto más lejos está,
llegará un poquito más degradada la señal.
Y además es capaz de recibir de dónde está recibiendo la información,
por delante, a la izquierda, por detrás,
por saber un poco cuál es la situación
del otro individuo.
Lo que se conoce normalmente como el lenguaje anglosajón,
como el range and viewing de la comunicación del robot.
El robot, como comentaba previamente,
es capaz de decidir por dónde transmite, que sería
ese transmission orientation que ven ahí.
Y tenemos dos modos de comunicación.
Un individuo es capaz de estar en modo de envío
y, por lo tanto, decide enviar un propio mensaje.
Representelo que represente, ahora veremos qué es lo que ocurre,
o estar en modo relay,
que básicamente es que el robot retransmite mensaje
de otro individuo que le ha llegado.
Heurísticamente generaremos cuál es el mayor número de saltos
que permitimos a un mensaje
y una de las restricciones es que un mismo robot
no puede reenviar el mensaje que ha enviado él mismo.
Por poner un poco las reglas de juego.
Bien, pues si.
Esto lo trasladamos a nuestros cuatro experimentos.
Lo que montamos es una estructura neuronal.
En este caso, creo que tampoco tiene mucha relevancia
qué tipo de estructura, pero básicamente, como comentaba,
una red continua recurrente en el tiempo,
dos capas ocultas.
Y lo importante es que es la misma red
para todos los individuos y para todas las tareas.
Con la única diferencia de que las capas de salida,
en algunos de los casos,
están inhibidas, por ejemplo, en movimiento de los motores,
en las aplicaciones en las que el robot
no se tiene que mover.
O en los experimentos en los que no hay luz,
pues está inhibida la señal sensorial,
básicamente.
Entonces, para cada una de estas redes
arrancamos un proceso evolutivo con unas funciones de fitness
en las que intentamos maximizar estos conceptos que les traslado.
En el caso de la selección del líder,
básicamente lo que queremos es que haya solo un líder.
Por lo tanto, cuantos menos líderes, más puntos le damos
a la función de fitness.
Y además, cuanto más tiempo esté un individuo autoproclamándose
o reivindicándose como el mejor, le daremos una mayor puntuación.
En el caso de la identificación del borde,
generamos el convex hull del grupo y generamos heurísticamente
quién está en el interior y quién está en el perímetro
y a partir de ahí, si los individuos se identifican como borde
y están en el borde, le damos puntos y si no, pues le restamos puntos
e igualmente con respecto al interior del grupo.
En el caso de consenso-orientación intentamos mantener dos estructuras.
Una.
Que los robots estén alineados con la orientación media del enjambre
y además que reduzcan su movimiento angular lo máximo posible,
de tal manera que los robots no estén permanentemente girando.
Veremos en alguno de los vídeos que les voy a mostrar
que no es posible llegar a ese cero deseable.
Y por último, el concepto seguidor de luz.
Aquí simplemente lo que evaluamos es que los individuos que no son capaces
de ver la luz están más cerca de la luz
y cuanto más cerca estén de la luz, pues más puntuación
le damos en este proceso evolutivo.
Bien, con estas cuatro fitness, misma estructura neuronal,
obtenemos diferentes emergencias de comunicación.
Es decir, lo que emerge en el proceso evolutivo.
Parece que sí que depende de la tarea de alguna manera, que es
una cosa relevante para nosotros, aunque nos va a suponer un problema.
En el caso de la selección de líder, no hay ni comunicación abstracta
ni comunicación situada.
Simplemente señalización.
Los robots se ponen a pitar.
Soy un poquito pequeño,
pero aquí al principio todos ellos empiezan a pitar,
que hacen una reivindicación de quién es el líder,
hasta que de repente solo queda uno pitando.
Entre ellos hay un proceso autorrealizativo
y de repente él es el líder.
Y consigue.
En iteraciones, a lo largo del tiempo,
reivindicar.
Veremos un ejemplo incluso con problemas asociados
a este experimento.
En el caso de la identificación del borde,
lo que analizamos es que existe una comunicación situada.
El mensaje no importa nada, pero sí importa de por dónde proviene
el mensaje.
Claramente un individuo que se encuentra en el centro
del grupo recibe mensajes por todo su perímetro.
Va adelante, atrás, izquierda, derecha.
Mientras que un individuo que esté en el borde
probablemente no recibe información por uno de sus lados,
puesto que no tiene más individuos por uno de los lados.
Entonces, por dónde proviene esa señalización
o ese mensaje es muy relevante en ese tipo de tareas.
En el caso del consenso de orientación.
Observamos que emerge una comunicación tanto abstracta
como situada.
Es decir, los individuos son capaces de obtener información
de hacia dónde están apuntando cada uno de los individuos
y, por otro lado, a qué distancia
y por dónde se están comunicando cada uno de ellos,
de tal manera que les permite acabar orientándose conjuntamente.
Finalmente, un experimento como el seguidor de luz,
en este caso, Solo utilizan una comunicación situada.
El mensaje, el valor del mensaje observamos que es irrelevante
y simplemente por donde les proviene el mensaje es cuando los robots
consiguen seguir a individuos que están siguiendo una luz
porque ellos mismos no son capaces de ver la luz.
De esta manera lo que emerge es como un seguimiento
no de luces sino un seguimiento de robots,
normalmente.
Esa es un poco la expresión.
El cómo hemos evaluado que cada uno de estos comportamientos
utiliza o no comunicación situada o comunicación abstracta
es básicamente cuando hemos evaluado el trabajo,
hemos bloqueado las señales correspondientes
al mensaje y las señales correspondientes a la orientación
de dónde viene el mensaje.
Y es ahí como observamos que estos individuos,
esta comunicación que emerge es de diferentes maneras.
Les muestro unos pequeños vídeos que creo
que son más representativos.
Una pequeña simulación en la que tenemos 20 robots,
están ahí comunicándose, se observan ahí lucecitas,
que es el proceso de comunicación y acabamos teniendo aquí un robot,
como ven ahí a la izquierda, oye, arriba a su derecha,
que se ha proclamado líder.
Un poquito más rápido,
pero básicamente ahora observamos un mismo problema con 10 robots,
donde lo que vamos a hacer es que a ese líder
que se ha proclamado, cuando pasa un tiempo.
No lo cargamos, le deshabilitamos como si hubiera cometido un fallo
el robot.
De tal manera que tenemos ahora aquí ya autoproclamado un robot,
aquí a la izquierda, y de repente hacemos
como que la apagamos.
De repente el sistema se vuelve inestable otra vez y los individuos
tienen que estar comunicándose para volver a funcionar.
Proclamar a un líder no continúa la comunicación
y de repente vuelve a emerger esa selección de líder
al cabo del tiempo volvemos a hacer lo mismo etcétera
etcétera insisto que el vídeo debería ir un poquito más rápido
tenemos experimentos con más robots pero voy pasando a ver los resultados
y si quieren luego al final volvemos
e incidimos en alguno de estos aspectos.
Segundo vídeo sería el concepto de identificación de borde.
Usamos misma simulación, mismo concepto,
tenemos un conjunto de individuos que en este caso
se señalizan ellos mismos como somos bordes
y lo estamos representando con un círculo blanco alrededor.
Observamos que hay algunos que son muy fáciles de converger.
Hay otra convergencia que es un poquito más complicada.
Por ejemplo, vemos
a este individuo que de vez en cuando se autodenomina borde,
a veces no, simplemente por cuál es su posicionamiento,
puesto que está recibiendo información de este otro individuo.
De aquí de la derecha en el experimento del consenso
orientación aquí usamos un conjunto robots que están
poco a poco aleatoriamente aparecen con diferentes orientaciones
representada por esta.
Este palo es realmente hacia donde sería su cero de orientación
de coordenadas y poco a poco vemos como ellos con su sistema
de comunicación acaban convergiendo hacia la misma orientación.
Como les comentaba,
no es posible que los individuos se paren por un motivo
y es que en cuanto empezamos a crecer en población dentro de los individuos
existe un retardo en la propagación de la comunicación
y eso hace que exista una especie de ola a la hora
de moverse los individuos.
Y finalmente el último experimento, un experimento también sencillo,
que sería básicamente, tenemos un entorno con una luz,
en el que tenemos unos cuantos robots.
En este caso hemos quitado parte de la dinámica
y de las masas de los individuos.
Tenemos una simulación basada en partículas,
no nos interesa trabajar tanto con el problema
de la colisión de obstáculos.
Ahora veremos otros experimentos en los que sí.
Y vemos cómo solo dos robots en este caso son capaces
de seguir la luz y el resto de los individuos son capaces de.
Seguirla, aparentemente, en base a lo que le están comunicando
el resto de los individuos que se quedan ahí cerca.
Bueno, nada especialmente espectacular, diría yo,
dentro de estos experimentos.
Son experimentos que podemos encontrar en la literatura
bajo diferentes implementaciones.
Pero una de las cosas importantes que debemos destacar
es que hemos conseguido resolver las mismas tareas
con una misma arquitectura.
Pese a que esta arquitectura ha tenido que ser evolucionada
bajo diferentes condiciones.
La siguiente pregunta que planteábamos es ¿y somos capaces
de usar una misma estructura para resolver varias tareas?
Ese sería un poquito el concepto.
Y para eso entramos en lo que estamos llamando primitivas simultáneas,
en las que vamos a intentar resolver problemas similares,
pero de una manera de que el mismo controlado sea capaz de resolverlos.
Activar diferentes estructuras.
Para esto, tres preguntas vamos a intentar resolver también.
¿Es posible evolucionar controladores que permitan resolver
varias tareas simultáneamente?
¿Qué ocurre?
Porque eso va a ser muy importante para aplicaciones de más alto nivel
cuando el colectivo no es homogéneo.
Es decir, nos ocurre como en el seguidor de luz.
Hay unos individuos que son capaces de ver y otros no.
Es decir, hay fallos en sus sensores.
Y por último, ¿es posible que la evolución permita
que esta comunicación resuelva este problema?
Pues bien, para ello vamos a hacer dos experimentos.
En este caso no me voy a centrar tanto,
estamos en todas las bases.
Simplemente voy a plantear unos pequeños resultados.
El experimento en este caso se basa también en redes continuas
recurrentes en el tiempo, por supuesto,
y en este caso vamos a trabajar con algoritmos NIT.
No se lo conocen, pero es básicamente Neuro Evolution of
Augmented Topologies.
Es un tipo de algoritmo en el que no solo el algoritmo
está intentando sintonizar los parámetros libres
de la red neuronal, sino que también somos capaces
de modificar la estructura de la red neuronal.
La propia morfología de la red neuronal
evoluciona a lo largo del tiempo en función de las necesidades
de los individuos.
Por simplificarlo, de alguna manera.
Por supuesto, a lo largo del tiempo tenemos aprendizaje giviano,
pero tampoco es tan relevante para la aplicación en comunicación.
Vamos a plantear dos experimentos donde siempre vamos
a tener dos tareas que se van a tener que ejecutar.
Empezaremos con una tarea
y a mitad del experimento le obligaremos al robot
a cambiar una tarea.
En este caso tenemos una tarea que va a ser seguir una luz,
como veíamos previamente,
y una segunda tarea que va a ser transportar cubos
a una zona concreta, que sean diferentes,
no sea solo un concepto de percepción.
Y un segundo experimento
en el que simplemente vamos a estar siguiendo luces,
en este caso una luz roja y una luz amarilla,
Pero lo que vamos a hacer es que hay un robot que no tenga conocimiento
de qué tarea tiene que realizar.
Mientras que a un robot si le vamos a decir
tú tienes que ir ahora por la luz roja
y cuando pase la mitad del tiempo que te da la luz amarilla
o viceversa, al otro robot no le vamos a decir nada.
Entonces va a tener que asumir que existe
un líder que le está diciendo cuáles son las tareas que tiene
que implementar.
Bien, pues.
Algo similar al experimento anterior,
sin entrar en mucho detalle,
mantenemos este tipo de redes también,
con una capa de entrada en el que, en nuestro caso,
ya le proporcionamos colisiones a los individuos,
por lo tanto tenemos sensores de distancia.
Así hacemos una cosa más realista,
que nos vamos aproximando al mundo de usabilidad
dentro de robots reales.
Somos capaces de distinguir distintas luces.
Somos capaces de proporcionar cuál es la tarea que tiene
que hacer el individuo.
Se lo vamos a proporcionar con este vector de entrada.
Y por último, pues recibimos el mensaje.
Y en este caso simplemente vamos a recibir los valores de los mensajes
y vamos a obtener la información de por dónde me está llegando a mí
el mensaje de una manera radial con respecto al robot, a su persona.
Una pequeña capa oculta y la salida básicamente,
el movimiento de los motores y el mensaje a transmitir.
Una representación diferente a la que veíamos
en el experimento anterior, pero similar en concepción.
¿Qué resultados obtenemos aquí?
Por centrarnos simplemente en los vídeos.
Lo primero que obtenemos es un conjunto
de individuos que son capaces de ir a la luz roja.
En este caso, ambos individuos saben que tienen que ir hacia la luz roja.
Tal y como están implementados los cubos,
como ven ahí en la simulación,
son los cubos que se quedan pegados al robot.
Entonces, si pasas tan cerca, hay como una especie de campo magnético,
el robot absorbe el cubo.
Entonces, no se lo puede quitar y tiene que seguir moviéndose con él
a no ser que llegue a la zona gris.
Pero como pueden observar, los robots están permanentemente siguiendo
a la luz roja, que es el objetivo que tienen,
y de repente llegará un momento.
Ahora, el transporte de cubo,
los robots dejan de perseguir a la luz roja
y son capaces de estar moviéndose por el entorno
y cada vez que detectan que tienen un cubo dentro de ellos
van hacia esa zona gris que ven a la izquierda que van guiados
también por fototaxis, es decir,
a través de la luz van llegando hacia donde se encuentra
la luz amarilla.
Todo esto con la misma red neuronal, ¿vale?
Ese es importante el objetivo.
Y exactamente lo mismo somos capaces de.
Hacer en un contexto heterogéneo.
Tenemos un robot que es capaz
de saber qué tarea tiene que realizar, este que ven aquí
que está marcado así con un poquito de rojo,
que tiene que seguir a la luz amarilla,
lo vemos en la pantalla,
y el segundo robot solo es capaz de seguir
las órdenes que le transmite o los mensajes,
de alguna manera así, no debería ser órdenes,
que acaba emergiendo que ese mensaje que le está transmitiendo es sígueme
o sigue a la luz amarilla.
De repente cambia el sincronizado del vídeo,
es curioso, el seguimiento de la luz roja
y a partir de ahí los robots acaban siguiendo esa luz roja.
Por lo tanto,
digamos que de alguna manera es satisfactorio,
aunque sea en este caso con dos robots,
por no complicar la presentación,
han conseguido homogeneizar este mismo controlador
para resolver diferentes tareas.
Lo que nos quedaría para seguir avanzando es
cómo resolver que la comunicación también sea homogénea
entre las propias tareas.
Y es ahí donde nos centramos en este tercer apartado
y probablemente de las partes más novedosas,
las dos partes novedosas que les quiero presentar.
Como la presentación no está a su disposición, decirle
que los experimentos anteriores tienen publicaciones existentes,
estas a día de hoy no están publicadas todavía,
así que, bueno, de hecho la segunda vez que las presentamos, realmente.
¿Qué significa cuando hablamos de comunicación transferible?
Ya sabemos hacer robots que se comporten de una manera homogénea,
que además utilicen el mismo controlador
para resolver varias tareas.
¿Podemos hacer que la comunicación sea independiente de la tarea?
Y una vez que hagamos eso, ¿podemos hacer que esa estructura
que se ha generado
la podamos transferir entre diferentes individuos?
Esa sería un poco la pregunta.
Bien, vamos a hablar un poquito más en detalle realmente.
Y vamos a intentar definir qué es esto de generar
esta comunicación transferible.
Y para eso vamos a generarnos un espacio virtual de trabajo,
un espacio de comunicación virtual que vamos a llamar.
Si lo representáramos visualmente.
Puede ser un espacio unidimensional, bidimensional, n-dimensional,
aquí en la gráfica A y B ven un espacio unidimensional arriba,
en la gráfica A y en B un espacio bidimensional,
que está dividido en diferentes regiones.
Para nosotros diferentes regiones
van a suponer diferentes conocimientos
de una ejecución que van a tener que realizar nuestros robots.
De momento, permítanme que lo deje así en abstracto.
Por lo tanto, tenemos un espacio de comunicación
y por lo tanto nuestros robots dentro de ese espacio virtual
de comunicación van a tener un vector de estados
en el que se van a estar moviendo.
Realmente va a ser la posición en ese espacio virtual.
Cosas importantes de este espacio de comunicación.
Ven unas estrellitas aquí, sería un landmark
o el centro de masas de esa región.
Digamos que para que un robot se sitúe en una región,
tiene que estar dentro de los bordes de la misma,
pero cada robot vamos a intentar que vaya acercándose
a ese centro de masas de esa región.
Y esa región se queda en ese espacio virtual.
En el espacio real, en el trabajo del robot,
vamos a generar un conjunto de primitivas
que van a tener que estar ejecutando nuestros individuos.
Ves hacia la luz, recoge un cubo,
traslada esto de este objeto aquí, vete al centro de masas,
declarate como líder.
Esas son nuestras primitivas.
Y vamos a generar un selector de primitivas que va a relacionar.
Dónde se encuentra en el espacio de comunicación virtual
nuestro individuo y qué primitiva tiene que ejecutar.
Dicho de otra manera,
cuando yo soy un robot que quiere ir hacia la luz amarilla
es porque voy a estar en una región determinada
y voy a comunicar esa región, ese concepto de región
voy a comunicar, voy hacia la luz amarilla.
O cuando soy un individuo que quiero ir a generar una formación circular,
soy un robot que quiere hacer una formación circular.
O soy un robot que tiene que ir a cargar la batería.
O un robot que estoy recolectando.
Eso es un concepto de las tareas que estoy haciendo.
O un robot que dice, esto es un círculo,
o esto es un cuadrado, o veo una pared,
o veo una silla.
Intentamos abstraer suficientemente lo que es este concepto de espacio
de comunicación virtual.
Más allá de la abstracción,
si intentamos implementar esto realmente, ¿qué es lo que ocurre?
Veamos que vamos a mantener dos controladores en nuestro sistema.
Un controlador estándar, lo que llamamos robot controller,
lo que vemos aquí en la figura B,
aquí abajo.
Tenemos nuestros sensores, nuestros actuadores
y tenemos internamente un controlador que va a mover nuestro robot.
Una red neuronal, una arquitectura de subfunción,
un sistema motor esquemas, lo que queramos realmente.
Una cosa importante,
va a haber una comunicación entre el módulo de controlador.
Un traspaso de información entre el módulo de comunicación
y el módulo del robot.
Por un lado, nuestro robot va a ser capaz
de trasladar al módulo de comunicación
cuáles son sus prioridades.
Oye, me estoy quedando sin batería, tengo que ir a cargar la batería.
Y por otro lado, nuestro sistema de comunicación
nos va a decir en qué región nos encontramos.
Ya que nos encontramos en una región,
trasladamos cuál es nuestro vector de estados para poder elegir,
sabiendo en qué región está,
qué primitiva tengo que resolver.
De tal manera que desacoplamos completamente lo que es
nuestro módulo de comunicación con nuestro controlador del robot.
El módulo de comunicación básicamente tiene varias funciones.
Variables de estado.
Por un lado
conocemos dónde nos encontramos en ese espacio virtual,
conocemos hacia dónde tenemos que ir,
conocemos dónde se encuentran mis vecinos o cuánta gente hay en una
misma región.
Idealmente y por simplificación en esto que les presento hoy vamos
a generar tantas regiones virtuales como robots allá
en el entorno.
Y lo que vamos a hacer es que todo robot
tenga que estar exclusivamente en una región virtual.
Y esa y hacia dónde va, va a ser relacionado en función
de la prioridad que tenga una región u otra.
Intentaré trasladarlo con algunos ejemplos.
¿Cómo gestionamos el movimiento virtual de ese robot
en el espacio de comunicación?
Podríamos hacerlo con cualquier tipo de controlador.
Nosotros,
por mantener un poco la constancia dentro de esta presentación,
les traslado básicamente una nueva red neuronal.
Una nueva red neuronal
que básicamente recibe todo este tipo de información,
dónde estoy, dónde tengo que ir, dónde están mis compañeros
y básicamente me desplazo en función de orientación y distancia
al objetivo al que tengo que moverme.
Eso me genera simplemente que esté posicionado
en diferentes puntos del espacio en el que me muevo
y le traslado eso de vuelta a mi selector de periódicos.
De tal manera que entonces la realimentación que se produce
es, yo soy un individuo que tengo una prioridad,
solo comunico mi módulo de comunicación,
el módulo de comunicación desplaza donde se encuentran cada uno
de los robots, cada uno de ellos comparten el espacio virtual,
pero realmente cada individuo se mueve él en su propio plano
y una vez que yo me encuentro en un punto o en otro,
se lo estoy comunicando a mi entorno,
a mi controlador de nuevo,
para que seleccione qué primitiva tiene que hacer.
En el fondo tenemos una tabla de comunicación
y donde de momento, y dejémoslo ahí,
por el momento nosotros definimos cuáles son las regiones,
por lo tanto le estamos diciendo a los robots cuál es el símbolo
que tiene que comunicar al resto de individuos para decirle
estoy cargándome la batería o estoy yendo hacia el usuario.
De momento está en el lado del diseñador.
Probamos esta arquitectura en tres ejemplos que les traigo
para intentar demostrar cómo funcionaría.
El primero es un ejemplo muy sencillito de agregación.
Tenemos un conjunto de robots que lo que queremos hacer
es dividirlos en grupos, básicamente.
Esas serían nuestras tareas o nuestras funciones primitivas.
¿Cómo hacemos de una manera primitiva que el robot tenga que irse,
se agrupen?
Pues básicamente, como ya tenemos conceptos de selección de líder,
selección de borde,
tenemos un concepto de vete al centro de masas o agrúpate,
júntate con los individuos que pertenecen a tu mismo grupo.
Si mis robots están comunicando yo
soy grupo 1, yo soy grupo 1, grupo 2, grupo 3,
cada uno de los que están comunicando grupo 1
y tengo información de lo que me está trasladando,
información situada, soy capaz de acercarme.
Entre esos individuos
si por ejemplo tenemos un grupo de 21 robots
y quiero dividirlos entre grupos homogéneos
los siete robots para cada uno de los grupos
por lo tanto las regiones tendré 21 regiones porque eso sí que yo estoy
como les digo en el lado de diseñador definiendo cuáles son las regiones
las siete primeras regiones para el grupo uno la siguiente siete
para el grupo dos y las últimas siete de la quinta 21 para el grupo tres
de tal manera que mis los siete robots
que se encuentren virtualmente en la región 7
estarán comunicando permanentemente, soy grupo 1, soy grupo 1,
y el controlador dirá, acércate a los individuos
que están comunicando que es un grupo.
De esta manera nosotros conseguimos incluso variar el número de grupos
a lo largo del tiempo.
Tengo un conjunto de individuos que les digo, oye,
formar un grupo, dos grupos, o ahora formar tres grupos,
o cuatro, cinco, puedo en tiempo real modificar independientemente
qué es lo que quiero construir dentro del robot.
Algo muy similar sería un experimento de formación.
Tengo un conjunto de individuos,
los que digo que quieren realizar una formación,
una elipse, un triángulo, una rejilla, fundamentalmente.
¿Qué diferencia hay con respecto al experimento anterior?
Prácticamente nada.
Vamos al mismo centro de masas, vamos agrupándonos,
pero con una distancia entre nosotros,
de alguna manera.
Entonces nosotros somos un grupo y le decimos, idealmente,
si lo aterrizamos a un plano mucho más analítico,
le decimos, vete a donde se encuentra este centro de masas,
ya veremos cómo lo pudiéramos extraer con distancia.
Un épsilon diferencial, en este caso
como estamos trabajando en un plano bidimensional,
pues una coordenada x y de desplazamiento
con respecto a ese centro de masas.
De tal manera que soy capaz
de construir diferentes tipos de estructura.
Por ejemplo, tenemos aquí una serie de experimentos
en un conjunto de robots
que su estado inicial lo representamos en morado
y su estado final lo representamos en rojo y en gris
pues está el desplazamiento que realizan en la simulación
los robots.
Tenemos un conjunto de individuos, se mueven entre ellos, acaban.
Representando pues un círculo o formato rejilla un triángulo
o incluso a lo largo del tiempo lo que le puedo decir a los robots
es vosotros tenéis que moveros y trasladarlos
a una estructura en forma de rejilla posteriormente pasar a ser un círculo
o volver a ser una rejilla independiente aquí creo
que les muestro pequeño vídeo en el que bueno algo tan sencillo
como trasladamos los robots a que formen una estructura.
Circular y posteriormente les modificamos una excentricidad
para que vayan cambiando una forma de elipse
básicamente son trasladados ellos cada uno pertenece
a una región diferente están.
Situando y ejecutando una primitiva diferente en función
de la región en la que se encuentran y posteriormente somos capaces,
con un poco de lentitud, de modificar cuál es la posición en la que
se encuentran nuestros individuos.
Que ellos mismos están comunicando entre todos ellos.
Bien, por poner algo un poquito más divertido,
vemos un tercer experimento de recolección,
básicamente.
Tenemos unas zonas que vamos a representar por zonas grises
en la imagen que ven arriba y una zona negra que va a ser
el nido y los robots tienen que estar moviéndose de la zona gris
a la zona negra permanentemente.
Además los robots se quedan sin batería de vez en cuando
y lo que tienen que hacer es irse a cargar y se van a ir a cargar
a una zona que representamos con unas luces rojas en este tipo.
De tal manera que vamos a tener una serie de robots
que están permanentemente navegando entre la zona gris y negra
y de repente van a tener que algunos que abandonar esa recolección
y irse a la zona roja para cargarse y luego posteriormente volver
a su tarea.
Lo que vamos a intentar
es que el 50% de los robots se estén recolectando
y el otro 50% de los robots estén parados.
Si tienen que ir a cargarse la batería,
pues algunos se tendrán que ir a cargar la batería
y habrá una mayor prioridad para que estén recolectando.
De tal manera que mi sistema de prioridad,
que aquí se puede ver bastante bien, es primero carga la batería,
entra en máxima prioridad
una vez que me estoy quedando sin batería.
Lo siguiente más prioritario es ir a recolectar de una zona u otra
y finalmente lo menos prioritario es quédate parado en la zona del nido
o en el área negra en este caso.
Entonces, ¿qué es lo que hacemos?
Dividimos de nuevo nuestras regiones en la mitad
de la región para primitiva relacionada con quédate en el nido.
Dos regiones o dos cuartos de regiones centradas,
el 25% cada una en primitiva.
Recolecta de la zona 1
o de la zona 2 y finalmente generamos una región extra que en este caso
permitimos que haya más de un robot en la misma que es vete
a cargar la batería y que sea nuestra región prioritaria
y que sea el elemento que comunique también nuestro robot.
Nuestro robot va a comunicar permanentemente
estoy realizando la tarea de recolección de la zona 1
o estoy realizando la tarea de la colección 2
o estoy parado en el nido o tengo que ir a cargar mi batería
para que el resto de individuos alrededor sean capaces de entender.
Bien aquí les presento un pequeño resultado yo creo
que me voy a centrar exclusivamente en la gráfica de abajo.
Digamos que es una gráfica en el tiempo,
es un tiempo de simulación donde observamos cuatro líneas.
La recolección de comida
está representada en verde y naranja,
por lo tanto, observamos cómo nada más arrancar nuestro robot,
un pequeño transitorio, acaban prácticamente al 25%,
el eje en I. Está en porcentaje, 25% de nuestros robots están recolectando
entre la zona 1 y la zona 2 y tenemos más o menos el 50%
de nuestros individuos parados en la zona del 10.
De repente nuestros robots empiezan a quedarse sin batería,
por lo tanto existe un número de robots que empiezan,
representado en rojo, a tener que ir a cargar la batería.
Y son nuestros robots que están parados en el nido
sin hacer nada los que tienen que asumir las tareas de estos individuos
que estaban recolectando para poder intentar seguir manteniendo ese 25,
con un poco de ruido como pueden observar en la gráfica,
ese 25% en cada una de las zonas
de recolección.
Posteriormente los robots se cargan la batería
y tenemos otro intervalo en el que estamos bastante tranquilitos,
no hay que cargar baterías, el 50% de nuestros individuos están parados
y aquí aunque no se ve tanto la curva naranja
como la curva verde, el 25% cada uno de nuestros robots
se están recolectando hasta que vuelve otra vez
a haber un periodo en el que el robot tiene que empezar a cargar su batería
y se vuelve a producir el.
Desplazamiento de nuestros robots que están parados al sistema a reconectar
y ayudar para mantener ese 50% de individuos de recolección creo
que se puede ver mejor probablemente con estos dos vídeos probablemente
incluso mejor el vídeo de la izquierda
tenemos solo cuatro robots que están recolectando básicamente
estos robots son cuatro pues el 50% de los robots
recolectan un 25% un robot cada uno de una zona de la zona de izquierda
y de la zona de la derecha.
En algún momento los robots se quedarán sin batería,
concretamente lo visualizarán en el vídeo de la izquierda,
es el robot de la izquierda también el que se queda sin batería.
En algún momento señalizará que él tiene que ir a cargarse la batería,
entonces irá hacia la luz roja y habrá otro individuo de la zona
del centro ahora que asume su tarea automáticamente.
Ha pasado en uno de ellos la prioridad de moverse
a otra región de comunicación, el individuo comunica,
tengo que irme hacia la zona de carga y el otro individuo dice,
yo dejo de estar en la zona de carga en función de las prioridades
y empieza a comunicar que soy yo el que empieza a recorrer.
Lo mismo podríamos observar en la gráfica de la derecha,
pero como les comento,
debido a la velocidad de reproducción del vídeo va extremadamente lento,
así que se lo dejo para su visualización.
Bien, estas serían las tres pequeñas tareas
que hemos conseguido hacer con un mismo controlador
evolucionado una única vez,
que básicamente es un control un poquito particular.
Tenemos una zona de regiones, regiones virtuales,
que nuestro robot se está moviendo alrededor de ellas
sin cambiar absolutamente nada,
simplemente el significado de las propias regiones.
Nuestros robots son capaces
de resolver diferente tipo de tareas.
Bien, es la misma estructura,
la hemos conseguido diseñar, pero tenemos un problema fundamental
de los que hablamos al principio y es,
¿seguimos teniendo que plantear nosotros cuáles son esas regiones?
Trasladar una perspectiva de comunicación,
es decir, ¿le tenemos que decir nosotros a los robots
qué es lo que tienen que decir o qué es lo que tienen
que comunicar?
Ahí es donde entra la parte de semántica emergente.
Lo que queremos hacer es que sean los robots,
propiamente ellos, los que generen ese número de regiones,
generen ese léxico de qué cosas tienen que comunicar
en función de las cosas que tienen que resolver o de las tareas
que tienen que hacer.
Y ahí entra en este concepto de semántica emergente,
donde lo que queremos trasladar es, de nuevo, tres preguntas.
Primero, ¿es posible que un robot
cree un léxico que, por supuesto, esté anclado a sus sensores,
en función de las percepciones que él tiene?
¿Es posible que estos robots compartan ese léxico?
Por lo tanto, yo genero mis propias regiones,
pero soy capaz de transferírselas a mis compañeros
para que generemos unas mismas regiones.
Es decir, que esas mismas regiones signifiquen lo mismo para ambos.
Esta misma palabra que representa gafas
representa lo mismo para dos robots.
Y por último, ¿seríamos capaces de que ese léxico
o ese número de regiones sea el mínimo posible?
Si tenemos 10 individuos que hablamos
y vemos este objeto que es una gafa, ¿podríamos intentar llamarlos
todo gafas?
¿O cada uno de nosotros lo llamaría de una manera diferente?
¿O en grupos?
Nuestro objetivo sería que todos lo llamáramos exactamente igual.
Es un poco lo que intentamos trasladar con este experimento,
que vamos a intentar que sea de la manera
un poquito más reducida para poder trasladarlo.
Pero antes de prestar el experimento,
tengo que plantear problemas y un poquito de contexto.
El problema, en las dos líneas de arriba resumido,
el que veníamos viendo hasta ahora.
Es decir, la señalización generalmente es solo,
la comunicación generalmente solo es una pequeña señalización
y hecha exclusivamente para ciertos experimentos,
al menos en el campo de la robótica colectiva.
Pero sí que es cierto,
y no os lo he dicho desde el principio,
que desde hace un par de décadas existen diferentes trabajos
centrados en aspectos de juegos del lenguaje,
como son denominados, evolución cultural,
con la idea de desarrollar léxicos en combinación de palabras
entre diferentes agentes.
No sería la nomenclatura que usaríamos en este contexto.
El problema es que generalmente todos esos trabajos
hablan de pocas palabras,
Tareas muy específicas y pocos individuos.
De hecho, trasladado al campo de la robótica,
el experimento más típico que no se conocerá,
se llama un experimento que es el Talking Heads,
que son dos cámaras que están apuntando
a una pizarra donde hay diferentes colores
o diferentes figuras y dos individuos intentan ponerse de acuerdo
en cómo nombran a cada una de estas figuras.
O objetos, digamos.
Claro, trasladar eso a un campo en el que haya 100 individuos la cosa
empieza a ser un poquito más complicada
y para empezar claramente necesitamos una estructura,
como veíamos en el apartado anterior.
Bien, ese ha sido uno de los conceptos y el otro problema,
como mencionamos al principio,
es el problema de la anclaje del símbolo.
Es decir, básicamente, cuando empezamos a hablar de léxico,
empezamos a hablar de símbolos,
tenemos que ser muy precavidos porque lo que tenemos que intentar
es que sean los robots los que creen esos símbolos en base a sus sensores
y que no seamos nosotros como diseñadores
y como hemos hecho en la fase anterior
de proporcionar unas palabras, unas regiones, en nuestro caso,
para hacer el símil,
que probablemente nada tengan que ver con las percepciones sensoriales
de nuestro símil.
Entonces,
digamos que uno de los objetivos también de este trabajo
es que todo léxico que emerja esté representado, esté anclado,
sería la palabra correcta, el anglosajón, el ground,
probablemente de fundamentarse en las experiencias
o en los objetos que hay en el entorno
y que es capaz de recibir y sensar el robot, ¿no?
¿Cómo ocurre y cómo se desarrolla esto?
Bien, pues ya Harnas y Stills, allá para los años 90,
definieron que son necesarios tres procesos para poder
extraer este tipo de información.
El primero sería un concepto de iconización, que es,
tenemos que transformar nuestras señales sensoriales
en representaciones internas.
Estas representaciones serán propias de cada individuo,
privadas.
Cada uno vemos las cosas de diferente manera
y las representaciones que adquirimos internamente son diferentes.
Hay un segundo proceso que es discriminación, que es básicamente
determinar si dos cosas que veo son iguales o diferentes.
Y por lo tanto, si esas representaciones
que yo mantengo internamente mías tienen que ser la misma o no.
Yo veo un color verde aquí de los asientos
y no sé si cuando veo otro color verde.
No veo ninguno otro por ahí
es el mismo es un verde oscuro verde claro son dos conceptos distintos
es el mismo verde o son dos palabras posiblemente compuestas
el claro o el oscuro necesitamos saber qué es lo que significa
y por último tengo que identificarlo no tengo
que asignar un símbolo a esa representación interna
que tengo en el final sea nuestra palabra
la que usemos la palabra verde para poder transmitirlo
no para trabajar en estos tres procesos
también encontramos la literatura el.
Muy relacionado con el problema de la anclaje del símbolo físico.
Le ponemos ahí un adjetivo que ya definió Bob
en los años 2000, básicamente.
Y es, es posible que todo individuo ancle su conocimiento al entorno
basado en lo que denominamos el triángulo semítico.
El triángulo simbiótico básicamente hace referencia a tres cosas.
Una es al propio objeto, que ya se denomina referente, lo que veo,
este verde que hablamos aquí, en la transparencia,
pues rojo, uno de los colores de la bandera que vemos,
por ejemplo.
Dos, el significado, que es la representación simbólica interna mía
y es solo mía y propia.
Que yo percibo y como yo almaceno ese valor rojo
que vemos aquí y por último 3 la forma que era
como le llamaba realmente va a ser la palabra
o sabemos mejor es esa palabra propiamente dicha a la hora
de resolver este problema y es qué palabra
generamos para representar a este objeto
que tiene la representación interna la palabra o trabajo en este caso
eso sería un poco el triángulo.
Y en base a estos conceptos lo que intentamos
es extraigo para acabar en nuestras representaciones
un experimento en el cual tenemos un conjunto de individuos
que son capaces de moverse en el entorno con diferentes objetos
estos objetos los van a tener que ir descubriendo van a intentar
generar unos.
Unos significados de dichos referentes
y van a generar unas palabras de cómo nombrar a esos individuos.
Y posteriormente esos individuos tendrán que ir comunicando
las palabras entre el resto de compañeros del colectivo.
Nuestros robots van a censar características del entorno
y serán características relacionadas con el color,
con la forma.
Y posteriormente irán construyendo conceptos más complicados.
Es decir, tenemos un color verde.
O un color rojo.
Y luego vamos a ver una pirámide.
O un cuadrado.
O un cubo.
Disculpen, como ven en la imagen.
Entonces el robot va a tener que.
Que acabar representando algo que sea cubo verde,
pirámide roja.
Ese va a ser un poquito el objeto.
En los libros de texto encontramos esto
como concepto de composicionalidad y el ejemplo por excelencia
es el concepto de cebra.
Vamos, el caballo más rayas, pues cebra.
Básicamente es un poco
como intentamos trasladar dentro del experimento.
Entonces, ¿cómo implementamos todo esto?
De nuevo, tenemos que ir a un poco de detalles, ¿no?
Y entonces, digamos que tenemos un conjunto
de objetos que por simplicidad en el experimento
vamos a definir exclusivamente siete características, ¿vale?
Un espacio vectorial con siete características exclusivamente.
Tres relacionadas con el color, RGB,
tres relacionadas con la forma, cubo, esfera y pirámide,
y una relacionada con un concepto de calidad.
Calidad puede ser alta o baja.
Básicamente, pues el cubo tiene forma de cubo o no parece un cubo,
o el color es rojo o está un poco degradado, ¿no?
Básicamente, y está un poco pálido, y entonces es un cubo de baja calidad
o un color rojo de baja calidad, ¿no?
Básicamente son siete propiedades,
siete características que extraemos del sistema.
Entonces nuestro robot va navegando por el entorno,
perciben estas características que proporcionan estímulos
en el sistema.
Entonces el robot tiene ese estímulo.
Cada estímulo que percibe el robot al final acaba trasladándose
en lo que denominamos un prototipo interno.
Es decir, si nosotros recibo en el espacio de trabajo del color.
Recibo algo que se parece a un verde,
entonces se me activan, probablemente las señales,
la R no, la B tampoco, se me activa la característica G
y acabo teniendo lo que denomino un prototipo, que es básicamente
el color verde, que es poco intensidad, por decirlo así,
en rojo y en azul y mucha intensidad en verde.
Y yo a partir de ahí, eso para mí es muy productivo.
Según yo voy avanzando y en función de cosas similares
que veo, en función de cómo de cerca
o de lejos estén en ese espacio vectorial,
Pues asignaré prototipos nuevos porque sean estípulos diferentes
o asignaré estípulos parecidos a prototipos similares.
Una vez que tenemos el prototipo,
que además va a ser homogéneo en todos nuestros individuos,
porque eso simplemente depende de mis sensores.
Internamente asigno un significado en mi espacio interno.
Cada uno tendremos un significado diferente.
El concepto,
no palabra, concepto cubo, concepto esfera, concepto verde,
concepto azul.
O sea, conceptos que yo internamente almaceno.
Y una vez que tengo ese significado, basado en el triángulo semiótico,
le asigno una palabra.
La palabra rojo, ahora sí, la palabra azul.
Por simplicidad en el trabajo
lo que hacemos es no ponemos palabras conocidas,
sino que le dejamos a los robots que utilicen cualquier símbolo,
de tal manera que así no induzca confusión con conceptos
como redes de lenguaje actuales o cosas por el estilo.
Por tanto, ya tenemos mi prototipo, mi significado y mi palabra
o mi forma.
¿Cómo genero yo internamente
y cómo voy almacenando esos espacios significados?
Básicamente generamos un pequeño grafo,
un pequeño grafo que va a ir creciendo en profundidad,
donde mis características elementales, que han pasado a ser
un significado elemental, rojo, esfera, verde, alta calidad baja,
están en la capa más interna.
Yo según me voy moviendo por el entorno,
voy percibiendo estos estímulos y genero estos significados.
De repente puede ocurrir que muy a menudo yo vaya avanzando
y tenga dos estímulos simultáneos.
Verde, cubo.
Bueno, a seguir con el rojo, cubo.
Para seguir con el grafo que tenemos aquí delante.
Y sigo avanzando y veo muy a menudo rojos y cubos juntos.
Bajo un proceso Hevian, básicamente lo que hago es, pum,
emerge un significado nuevo.
Rojo, cubo.
Porque existe
un concepto que permanentemente está ocurriendo a menudo.
Entonces tengo un rojo y un cubo
y genero un significado compuesto al cual le asigno una palabra compuesta
que será cubo rojo.
Y a lo mejor otro compañero lo define rojo, cubo.
Pero esa será la palabra o el significado que tengamos.
Y así podemos crecer.
Veo bajas calidades, por ejemplo, junto con cubo,
pues baja calidad con cubo.
Y luego baja calidad cubo con rojo
y genero una última palabra, en mi caso,
en este caso significado, que sería cubo rojo de baja calidad.
Pues este cubo que tengo aquí.
O esfera verde de alta calidad.
Es un poco como voy creciendo en el grafo.
Ahora bien, ¿cómo esto soy yo?
¿Cómo lo comparto con mis compañeros?
Bueno, creamos un pequeño juego de lenguaje.
Básicamente aquí estaría un poquito el algoritmo
de cómo transmitimos esta información.
Por un lado tenemos un tiempo en el instante inicial,
el léxico que disponemos es vacío, no sabemos nada.
Vamos avanzando, vamos recibiendo estímulos,
vamos generando significado, vamos generando palabras.
Y periódicamente voy comunicando palabras a mi entorno,
básicamente.
¿Qué palabra puedo comunicar en este caso?
Puedo comunicar una palabra elemental.
Si es una palabra elemental voy a comunicar cuál es la palabra
y cuál es el estímulo.
El prototipo.
Si es una palabra compuesta comunico cuál es la palabra
y cuáles son los antecedentes de la palabra.
Si es cubo rojo, rojo y cubo.
Eso es lo que yo voy comunicando a cada individuo.
Maneja así el entorno.
Un.
Robot que recibe esta palabra.
¿Qué ocurre?
Bueno, pues la palabra que recibe es nueva
y es una palabra elemental.
Simplemente añade el prototipo, le otorga un significado propio suyo
y le asigna esa misma palabra.
Si por el contrario la palabra es compuesta,
solo lo añade si los antecedentes son conocidos.
Es decir, yo la palabra rojo
cubo que me comunica un compañero, solo lo almaceno si conozco
que existe algo que es rojo y algo que es cubo.
Independientemente del significado que tenga.
Si por el contrario la palabra es conocida,
lo que hacemos es, si la palabra es elemental,
almacenamos, reescribimos, por decirlo así,
actualizamos el significado que tenemos al más cercano,
dentro de nuestro espacio vectorial.
Y si la palabra es compuesta y no se corresponde
con mis antecedentes, rehago mi grafo
y mi nueva palabra compuesta dependerá de palabras anteriores.
Bien, con este juego y transmitido en un espacio de simulación,
donde los robots solo se pueden comunicar en un espacio de un metro,
Les presento las tres métricas que vamos a utilizar para evaluar
qué tal funciona esto.
La primera es el tamaño del léxico,
cuántas palabras hay en el léxico.
Necesitamos saber cuál es el número de palabras elementales
y el número de palabras compuestas.
Queremos saber cómo evoluciona nuestro sistema.
Y por otro lado, dos métricas relacionadas con.
Cuán de iguales son los léxicos de cada uno de los individuos
dentro de todo el headhub.
Para eso vamos a usar el índice de HACA,
básicamente la intersección entre la unión,
que básicamente lo que dice es que si el índice de HACA nos da un cero,
básicamente son conjuntos, intersección vacía, cada uno tiene
un léxico diferente y si es uno, pues todos tenemos el mismo léxico.
Y son dos métricas distintas porque la primera,
lo que llamamos LSS, está relacionada con el léxico completo,
palabras elementales y palabras compuestas.
Y el CSS solo de las palabras compuestas.
Y veremos ahora los experimentos el por qué de estas dos métricas.
Bueno, eso dejo ahí un poco en expectación.
Bien, pues, les voy a presentar los resultados solo
con dos ejemplos.
Uno sencillo en el cual tenemos simplemente tres referentes
en el entorno y un conjunto, si no estoy equivocado,
de 20 robots.
Estos tres referentes son los que ven ahí dibujados.
Un cubo rojo de baja calidad,
una esfera azul de alta calidad
y un cubo azul de alta calidad.
¿Vale?
Esto que implica, dentro del contexto,
por simplificar un poco la situación,
lo que tenemos son seis palabras elementales realmente en el entorno.
Tenemos azul y rojo en el campo del color, cubo y esfera
en el campo de las formas.
Y alta y baja en el campo de la calidad.
Entonces, se forman 11 palabras compuestas.
Cubo rojo, cubo azul,
esfera, bueno, todas las que aparecen ahí.
Claramente no tenemos ningún concepto de rojo alta calidad,
por ejemplo, porque no es algo que vean los individuos
en el entorno.
Todos los rojos,
en este pequeño ejemplo, que solo hay uno,
es de baja calidad.
Por lo tanto, nunca podría emerger algo que sea rojo alta calidad.
Bien, si vemos cómo evoluciona para un único individuo
y cuál es su mapa o su grafo interno, ¿vale?
Utilizamos aquí letras griegas
para representar cada una de las palabras elementales
y compuestas, ¿no?
Al final todos los robots han visto seis palabras,
este robot ha visto seis palabras elementales, ¿no?
Alfa representa cubo,
beta representa azul, gamma calidad alta
y así sucesivamente.
Aquí lo vemos en el grafo, en la parte interna,
que poco a poco van construyendo palabras compuestas.
Dos verdes permiten crear una naranja
y una naranja más una verde genera una estructura roja,
que al final es una palabra de tres composiciones en línea.
Es una de las limitaciones que hacemos en el trabajo
y es obligamos a que toda palabra compuesta solo
pueda estar compuesta de dos antecedentes, ¿vale?
Por simplificar un poco el problema.
Entonces, al final,
acabamos con tres palabras compuestas de nivel 3 y, por ejemplo,
esta de aquí arriba, alfa, epsilon, zeta, tenemos alfa,
cubo, epsilon, baja calidad, zeta, rojo, cubo rojo de baja calidad.
Este significado hace referencia a este objeto, ¿vale?
Alfa, beta, gamma, pues rojo, cubo, azul, alta calidad.
Cubo, azul, de alta calidad.
Hace referencia a este objeto.
Y por último, el de aquí abajo, pues a las esferas.
¿Cómo evoluciona el léxico a lo largo del tiempo,
más allá de este grafo constituido?
Si vemos estas tres gráficas que hacen referencia
a las tres métricas, la gráfica de la izquierda es.
El léxico, el tamaño del léxico.
Lo que observamos es básicamente cuando arranca la simulación,
no tenemos palabras en el entorno
y rápidamente se genera un número de palabras,
teniendo una sobrelongación máxima en poco tiempo, básicamente,
aquí por ejemplo llegamos hasta casi 30, en media 32 palabras,
de un total de.
6 palabras elementales más 11 compuestas,
17 palabras máximas que debería haber en el léxico.
Lo que quiere decir es que, según estamos avanzando,
nuestros robots están creando palabras que hacen referencia
a diferentes objetos.
Algo similar a lo que ocurría con las regiones.
Originalmente teníamos más lecciones que primitivas a ejecutar.
Ese sería el equivalente.
Sin embargo, gracias a la interacción entre los individuos,
a ese juego de lenguaje que creamos,
poco a poco se van destruyendo palabras en el lenguaje y
prácticamente acabamos convergiendo a este óptimo de 17 palabras
en el léxico.
Simplemente por interacciones entre los individuos.
Si vemos el cómo de común o de igual, mejor dicho,
es el léxico, observamos que el léxico real
mantiene una estructura de respuesta exponencial,
parece continua,
parece que poco a poco el monótono creciente,
parece que el individuo,
el conjunto va desarrollando el léxico correctamente.
Pero si nos centramos en la parte compuesta,
vemos algo un poco más extraño.
Observamos cómo poco a poco ha ido creciendo la composicionalidad,
pero de repente se nota un bajón.
¿Qué es lo que está ocurriendo aquí?
Básicamente lo que observamos
es que nuestros individuos están desarrollándose por el entorno.
Ven objetos, crean palabras y habrá algunos individuos
que han visto más objetos que otros a lo largo de la simulación
o a lo largo de la ejecución de la tarea.
Por lo tanto, están creando palabras compuestas diferentes.
Primero, digamos, prioritariamente, antes que otros.
De repente, otro conjunto de individuos empiezan
a generar esas palabras compuestas y de repente surge una dicotomía
en el propio léxico y es, acabo de tener palabras
compuestas para objetos similares.
Palabras compuestas diferentes para los mismos objetos.
Y entonces esta métrica se nos baja.
Poco a poco, cuando empieza a haber interacciones entre los individuos,
empiezan a converger y comunicarse las palabras,
desaparecen palabras del entorno, como estamos viendo a la hora de la.
Una vez que hemos pasado el tiempo de pico, ¿no?
De esa sublocación que tenemos en el léxico.
Y a partir de ahí conseguimos converger
e ir generando un léxico común entre todos los individuos.
Bien, el último experimento está relacionado
con extender el trabajo a un número de robots mayor.
Para ver un poco qué tal escala el sistema.
Vamos a hacer experimentos entre 10 y 100 robots.
Y en este caso, pues un experimento con 5 referentes.
Estos 5 referentes que ven allí mantienen 7 palabras elementales.
Básicamente tenemos objetos de color rojo y verde.
Tenemos cubos, esferas y pirámides.
Y tenemos objetos de altas y de bajas calidades.
Esto desarrollan 26 palabras compuestas.
Podríamos echar las cuentas en función de los objetos
que vemos allí.
Pero básicamente quiero plantearles estos resultados.
Y es.
El sistema escala de una manera bastante robusta.
Ese es el primer resultado.
Observamos cómo,
si nos centramos, por ejemplo, en las gráficas de abajo,
hace referencia al tamaño del léxico,
todos los robots efectivamente empiezan con cero léxico,
de repente empiezan a generar palabras
y se produce un comportamiento muy similar
al que veíamos previamente.
Un sistema de una sobrevaluación máxima
y posteriormente una atenuación hasta más o menos intentar converger
hacia el léxico óptimo.
Por supuesto,
cuanto más robots tenemos, mayor es la sobrelongación,
puesto que más palabras se están generando
de una manera aleatoria entre los individuos.
Y, por supuesto, cuanto más individuos tenemos,
que está representado por el rojo y el morado, las dos líneas
que vemos aquí arriba, tarda más en converger
a un mismo léxico.
Eso por un lado.
¿Qué pasa con los índices de cuán comunes son los léxicos
o cuánto de iguales?
Pues obtenemos el mismo procedimiento,
el mismo desarrollo que veíamos previamente.
Los individuos a nivel de léxico mantienen una respuesta más
o menos exponencial, un poquito más rápida
en el caso de ejambres con menor número de robots,
un poquito más lenta en el caso de ejambres
con mayor número de robots,
pero acabando convergiendo a un léxico más o menos común
como podemos observar.
En la parte de palabras compuestas observamos exactamente igual
esa bajada que vemos al principio de las simulaciones.
Y es grupos independientes que están creando léxicos diferentes.
Y sólo el que entre ellos sean capaces de comunicarse,
cuando los grupos empiezan a mezclarse entre sí,
permite que el léxico o el idioma,
podríamos ya transmitir en este momento, sea similar,
acabe siendo el mismo a lo largo del tiempo.
Una última transparencia relacionada con qué es lo que hemos relacionado
en esta pequeña presentación de emergencia y transferencia
de comunicación semántica en robótica colectiva.
Consideramos que hemos dado un pequeño paso en la situación
de cómo podemos trasladar y hacer
homogénea la comunicación en el campo de la robótica de enjambre
o la robótica colectiva.
Hemos sido capaces de crear una arquitectura.
Independiente de la tarea que además es capaz de transferir
entre diferentes individuos para resolver tareas
de una manera homogénea o de una manera heterogénea también.
Originalmente éramos nosotros quienes diseñamos
qué era lo que tenían que comunicar cada uno de los robots,
pero hemos llegado hasta el caso
de permitir en una tarea muy sencilla que los robots
sean los que ellos creen su propio lenguaje.
Creenlo que ellos tengan que comunicar
y por lo tanto están generando
ese léxico que además está anclado a sus propios sensores,
está anclado en el entorno.
Los individuos son capaces de generar una composición entre palabras
y transferir entre ellos el léxico con un objetivo
de intentar minimizarlo y hacerlo lo más homogéneo posible
dentro del propio colectivo.
Y nada más.
Muchísimas gracias y espero que les haya gustado.
Muchas gracias, Álvaro, por tu presentación.
Y creo que hay alguna pregunta entre los asistentes
o algún comentario.
A ver, Dictino.
Si quieres, primero me alegra ver esta faceta poliédrica
que tienes, porque tengo vacías,
las facetas de colaboración son muy diferentes.
Mira que te traen un micrófono.
Muchas gracias.
Pues eso, Álvaro, me ha gustado mucho la presentación
y quería comentarte que es interesante
conocer otro perfil tuyo, ¿no?
Porque yo te conocía de otras colaboraciones
y cosas que son muy diferentes a lo que estás haciendo aquí
y tiene bastante interés.
Y quería comentarte dos cosas que me han parecido curiosas, ¿no?
O dos cuestioncitas rápidas, ¿no?
La primera es que cuando has desarrollado
tareas que eran independientes, ¿no?
Y después has dicho,
bueno, vamos a intentar que hagan estas tareas conjuntamente.
Yo entiendo que has empezado desde cero
cuando has hecho el reentrenamiento de las tareas conjuntas.
¿Hay alguna o habría alguna ventaja o alguna posibilidad
de transferir el conocimiento de una tarea que ayudase
a las otras, por ejemplo?
Si hay una tarea que es encontrar un líder
y hay otra tarea que es coordenar una orientación,
pues a lo mejor sería útil si ya tienen la habilidad
de determinar un líder para que ese líder
simplemente transmitiese su orientación, por ejemplo,
a los demás.
¿Eso lo habéis probado?
Sí, vamos a ver.
Hemos hecho ambas cosas, digamos.
Siempre y cuando la arquitectura sea la misma,
lo que hacemos es.
Partimos de una evolución en la que ya el individuo
sabe hacer algo.
Si es el caso del líder, por ejemplo,
partimos de esa población última en la que hemos evaluado
y a partir de ahí les revaluamos y les dejamos que siga evolucionando
con otra función de fitness en ese caso.
Es cierto que en el caso de cuando ya las juntamos,
puesto que estamos trabajando con NIT y NIT al final no nos hace.
No nos preocupa tanto como un cromosoma específico
en el algoritmo genético, sino que somos capaces de crecer
y modificar la arquitectura, al final acaba siendo algo muy diferente
a lo que ha arrancado al principio.
Es decir, sí que partimos de ese origen,
cuando la arquitectura es estática nos ayuda,
Pero cuando la arquitectura es más dinámica
porque puede ser modificable,
la verdad que no hemos encontrado una gran ventaja
en partir de algo ya conocido.
Al menos en tareas tan sencillas como las que estamos hablando.
Yo asumo que si lo trasladáramos de nuevo al campo ya del léxico,
en el que ya emerge algo un poquito más complicado,
probablemente nos ahorraría mucho tiempo de computación,
cuanto menos.
Eso seguro.
Pues eso, la verdad que es muy interesante.
La segunda pregunta que te iba a hacer
era sobre lo último que has comentado
cuando se están generando diferentes lenguajes
y luego están haciendo el juego del lenguaje
y están convergiendo hacia un mismo léxico.
En alguna de las gráficas se veía, por ejemplo,
como que, imagínate, en esta figura en la C,
parece que hay como dos comportamientos
un poco distintos, hay como un salto.
¿Qué puede estar pasando ahí?
En estas dos gráficas, por ejemplo.
Sí, hay dos que están como agrupadas
y luego las otras están en otra tendencia que parece
un poco distinta.
Puede que estén a lo mejor formando islas de comunicación,
que cada uno esté desarrollando su idioma, por así decirlo,
y luego tengan que converger.
Es un problema espacial, puramente.
Si te das cuenta, las dos curvas de aquí,
la naranja y la azul, son de ejambres de 10 y 20 robots,
mientras que las otras son de 50, 75 y 100 robots.
Por lo tanto, es bastante más complicado
en un ejambre de 100 individuos que todos acaben.
Con todos
y como además en estos experimentos sí que tenemos dinámica,
el robot tiene masa, no es una partícula,
existen colisiones.
Por lo tanto, se producen grupos
en los que los robots no son capaces de salir de ellos
porque simplemente les hacemos navegar en el entorno y solo
cuando rompen esa situación gregaria, por decirlo así,
que ha emergido simplemente por un problema de colisiones,
es cuando son capaces de transferirse entre grupos.
Dicho de otra manera, podríamos decir que.
Culturalmente necesitamos viajar y movernos de un lado a otro
para que el idioma converja al mismo.
Ese sería probablemente el resultado.
Y hace referencia a ese concepto.
Lo ves exactamente igual si quisiéramos, por ejemplo,
aquí la gráfica D. ¿Por qué tarda mucho más
en converger esta curva morada que la naranja?
Bueno, primero tenemos más palabras,
porque ha habido más individuos, y por lo tanto esos individuos
tienen que reaprender a renombrar los objetos.
Eso sería un poco visto.
Sí, sería de hecho curioso
ver qué pasa si, por ejemplo, los aislases durante un tiempo, ¿no?
A ver cómo cada uno desarrolla
y qué pasa cuando colisionan los dos idiomas, ¿no?
Eso podría ser.
Sí, supongo que JEP ahí tendrá mucho que decir, ¿no?
En función de cómo podemos ir variando en la palabra.
Totalmente de acuerdo.
Muy bien, muchas gracias.
Muchas gracias.
Gracias, Destino.
Si hay alguien que quiera hacer alguna pregunta o comentario.
No sé si hay cuando está alguien que haya levantado la mano
para preguntar, porque aquí no lo vemos.
No sé si aquí puedo ver algo.
Si no, pues.
No veo nada.
Ah, vale.
No hay huevos, no.
Vale.
Vosotros habéis contactado con filólogos y demás para desarrollar
si, uno de los colaboradores de hecho del principio
de los trabajos más que filólogo,
bueno, es un psicólogo dedicado a comunicación a día de hoy
y Helio Tucci trabajamos juntos en la unidad de Bruselas
en la Universidad Libre de Bruselas en Iridia en una estancia
que estoy allí y actualmente está en la Universidad de Ténamur
trabajando y siempre se ha centrado en comunicación empezó
a trabajar con monos.
Y luego se pasó al campo de la robótica.
Supongo que esto es una línea de investigación muy grande
en el campo de la filología.
Pues muchas gracias Álvaro por tu charla
y muchas gracias a los que habéis asistido presencialmente
y telemáticamente si hay alguno.
Muchas gracias.