Computación evolutiva en entornos no tradicionales JJ Merelo Universidad de Granada Http://facebook.com/jjmerelo
Entorno tradicional
Entorno  no  tradicional
¿Por qué? Buscar nuevos paradigmas bioinspirados.
Conseguir ciclos de computación en desuso.
Entender la esencia de los algoritmos bioinspirados.
¿Qué vamos a ver? Diferentes formas de llevar a cabo EAs en entornos no tradicionales
Un ejemplo parásito para abrir boca $parcial =( $parcial ? &quot;$parcial+&quot; : &quot;&quot; ) . &quot;log($i*$i*exp($i))+sqrt($i)&quot; ; if   (   $opt   ) { print eval  $parcial ,   &quot; \n &quot; ; }   else   { my   $s   =   uri_escape ( $parcial ); my   $url = &quot;http://google.com/search?q=$s \& btnG=B \% C3 \% BAsqueda&quot; ; my   $response   =   $browser -> get (   $url   ); die  &quot;Canâ't get $url -- &quot; ,   $response -> status_line  unless   $response -> is_success ; my   ( $resultado )= ( $response -> decoded_content  = ~ m {< b > . + ?  = ( . + ? )</ b ></ td >}); $resultado   = ~ s {(< font size =- 2 > </ font >)}{} g ; print  &quot;$i => Resultado es $resultado \n &quot; ;
Otro par de ejemplos secuenciales Un algoritmo genético en PowerPoint 97
Y también en una  cámara Canon .
Las mulas no nadan Pero pueden servir para computación distribuida.
Las redes P2P (entre pares) reflejan la complejidad del mundo actual..
Son redes dinámicas, ad-hoc, y superpuestas a las redes normales.
Topología P2P Red superpuesta Red física
Modelo de capas para computación evolutiva distribuida P2P PCs conectados a internet Red superpuesta P2P Sistema de agentes Computación evolutiva
Agentes evolutivos: ¿Cómo funcionan? Basado en DREAM (Distributed Resource Evolutionary Algorithm Machine)
Algoritmo evolutivo estructurado espacialmente
Cada agente estructura un sólo individuo
La vecindad se autoorganiza usando el protocolo  Newscast Cada nodo tiene conocimiento finito del resto de los nodos, e intercambia información con los que conoce En la implementación básica: agente == hebra
Pero ¿esto funciona?
¿Y porqué no en AJAX? function   migrate (   pop   ) { request  =   new   XMLHttpRequest (); var  peticion_str  =   'http://geneura.ugr.es/~jmerelo/proyectos/ga-js/cgi/get_guy.cgi?chromosome='   +   pop [ 0 ]. chromosome  + &quot;&fitness=&quot; + pop [ 0 ]. fitness ; masca  =   null ; request . open ( 'GET' ,  peticion_str  ,   true ); request . onreadystatechange =  add_to_population  ; request . send ( null ); } function   add_to_population   () { if   (  request . readyState  ==   4   ) { if   (  request . status  ==   200   ) { var  json  =  request . responseText ; eval (   &quot;masca = &quot; + json  ); document . getElementById ( 'ga-2' ). innerHTML   =  json ; if   (  masca [ 'generaciones' ] >   0   ) { run_ga (  masca [ 'generaciones' ] ); } } } }
AJAX al rescate Javascript sólo no es suficiente para usar el navegador como entorno de computación distribuida.
Hace falta un sistema de comunicación asíncrono
AJAX=Asynchronous Javascript & XML.
AJAX al alcance de todos La mayoría de los navegadores incluyen JavaScript.
El modelo de objetos también es compatible.
Requisito: objeto  XMLHttpRequest  en el navegador.
Venga, va, ¿cómo funciona?
Por las vías pasa el tren Ruby on Rails  es un entorno de desarrollo ágil basado en el paradigma MVC, el lenguaje Ruby, AJAX y un gestor de bases de datos (MySQL, por ejemplo).
¿Qué es DCoR? Un sistema de computación distribuida que usa AJAX sobre Ruby on Rails para problemas, principalmente, de computación evolutiva.
La distribución se realiza entre cliente/servidor, y también podría hacerse entre diferentes servidores.
Las pruebas nos permitirán establecer su factibilidad, y el entorno más favorable para la misma, así como una línea base de prestaciones. Se busca logo molón. Razón, aquí.
Los experimentos, en casa y con gaseosa Problema Royal Road Maximizar el número de unos de una cadena binaria por grupos. =3 1 1 1 =0 1 0 1
Montaje experimental Pruebas con cliente/servidor en el mismo ordenador (Linux) y en diferentes ordenadores (servidor:Linux, cliente:Windows).
Resultados distribución carga
Vámonos de excursión Problema de la mochila binaria Maximizar el  peso  del contenido de una mochila respetando restricciones.  Experimentos en una instalación doméstica
Escalado
Presentando AGAJAJ Asynchronous Genetic Algorithm with JavaScript and JSON
Se trata, una vez más, de usar el navegador para computación distribuida masiva.
En este caso, todo el algoritmo evolutivo se ejecuta en el navegador
O volviendo a la carretera real
El efecto Microsiervos
Be fluid, my friend “ FluidDB is an openly writable shared database” http://fluidinfo.com/about
FluidDB nació de la computación evolutiva La compañía la creó Terry Jones. “ FluidDB  es una sola maraña de cosas.”
“ FluidDB  permite que los datos sean sociales.”
“ Modelo de control único pero potente”
Reutilización simple de la información.
¿Cómo funciona? Thing fluiddb/about Another Thing http://wcci2010.org jjmerelo/likes dwcorne/stars 5 The sound of music
Fluidificando algoritmos evolutivos Thing fluiddb/about Another Thing 0100 1001 1100 1101 jjmerelo/exp-xyz/fitness dwcorne/exp-abc/fitness 33 22 0110 0001 1111 1101 jjmerelo/exp-xyz/current
Ejecutando un EA fluido 0010101100 001010000 0010101100 0010101100 1110101100 1101101100 0011101100 0010101100 0010101100 1011101100 0011101100 0010101100
Software libre El software te lo puedes bajar de  http://sl.ugr.es/001U
Implementado en Perl
1600 evaluaciones

Computación evolutiva no tradicional

  • 1.
    Computación evolutiva enentornos no tradicionales JJ Merelo Universidad de Granada Http://facebook.com/jjmerelo
  • 2.
  • 3.
    Entorno no tradicional
  • 4.
    ¿Por qué? Buscarnuevos paradigmas bioinspirados.
  • 5.
    Conseguir ciclos decomputación en desuso.
  • 6.
    Entender la esenciade los algoritmos bioinspirados.
  • 7.
    ¿Qué vamos aver? Diferentes formas de llevar a cabo EAs en entornos no tradicionales
  • 8.
    Un ejemplo parásitopara abrir boca $parcial =( $parcial ? &quot;$parcial+&quot; : &quot;&quot; ) . &quot;log($i*$i*exp($i))+sqrt($i)&quot; ; if ( $opt ) { print eval $parcial , &quot; \n &quot; ; } else { my $s = uri_escape ( $parcial ); my $url = &quot;http://google.com/search?q=$s \& btnG=B \% C3 \% BAsqueda&quot; ; my $response = $browser -> get ( $url ); die &quot;Canâ't get $url -- &quot; , $response -> status_line unless $response -> is_success ; my ( $resultado )= ( $response -> decoded_content = ~ m {< b > . + ? = ( . + ? )</ b ></ td >}); $resultado = ~ s {(< font size =- 2 > </ font >)}{} g ; print &quot;$i => Resultado es $resultado \n &quot; ;
  • 9.
    Otro par deejemplos secuenciales Un algoritmo genético en PowerPoint 97
  • 10.
    Y también enuna cámara Canon .
  • 11.
    Las mulas nonadan Pero pueden servir para computación distribuida.
  • 12.
    Las redes P2P(entre pares) reflejan la complejidad del mundo actual..
  • 13.
    Son redes dinámicas,ad-hoc, y superpuestas a las redes normales.
  • 14.
    Topología P2P Redsuperpuesta Red física
  • 15.
    Modelo de capaspara computación evolutiva distribuida P2P PCs conectados a internet Red superpuesta P2P Sistema de agentes Computación evolutiva
  • 16.
    Agentes evolutivos: ¿Cómofuncionan? Basado en DREAM (Distributed Resource Evolutionary Algorithm Machine)
  • 17.
  • 18.
    Cada agente estructuraun sólo individuo
  • 19.
    La vecindad seautoorganiza usando el protocolo Newscast Cada nodo tiene conocimiento finito del resto de los nodos, e intercambia información con los que conoce En la implementación básica: agente == hebra
  • 20.
  • 21.
    ¿Y porqué noen AJAX? function migrate ( pop ) { request = new XMLHttpRequest (); var peticion_str = 'http://geneura.ugr.es/~jmerelo/proyectos/ga-js/cgi/get_guy.cgi?chromosome=' + pop [ 0 ]. chromosome + &quot;&fitness=&quot; + pop [ 0 ]. fitness ; masca = null ; request . open ( 'GET' , peticion_str , true ); request . onreadystatechange = add_to_population ; request . send ( null ); } function add_to_population () { if ( request . readyState == 4 ) { if ( request . status == 200 ) { var json = request . responseText ; eval ( &quot;masca = &quot; + json ); document . getElementById ( 'ga-2' ). innerHTML = json ; if ( masca [ 'generaciones' ] > 0 ) { run_ga ( masca [ 'generaciones' ] ); } } } }
  • 22.
    AJAX al rescateJavascript sólo no es suficiente para usar el navegador como entorno de computación distribuida.
  • 23.
    Hace falta unsistema de comunicación asíncrono
  • 24.
  • 25.
    AJAX al alcancede todos La mayoría de los navegadores incluyen JavaScript.
  • 26.
    El modelo deobjetos también es compatible.
  • 27.
    Requisito: objeto XMLHttpRequest en el navegador.
  • 28.
  • 29.
    Por las víaspasa el tren Ruby on Rails es un entorno de desarrollo ágil basado en el paradigma MVC, el lenguaje Ruby, AJAX y un gestor de bases de datos (MySQL, por ejemplo).
  • 30.
    ¿Qué es DCoR?Un sistema de computación distribuida que usa AJAX sobre Ruby on Rails para problemas, principalmente, de computación evolutiva.
  • 31.
    La distribución serealiza entre cliente/servidor, y también podría hacerse entre diferentes servidores.
  • 32.
    Las pruebas nospermitirán establecer su factibilidad, y el entorno más favorable para la misma, así como una línea base de prestaciones. Se busca logo molón. Razón, aquí.
  • 33.
    Los experimentos, encasa y con gaseosa Problema Royal Road Maximizar el número de unos de una cadena binaria por grupos. =3 1 1 1 =0 1 0 1
  • 34.
    Montaje experimental Pruebascon cliente/servidor en el mismo ordenador (Linux) y en diferentes ordenadores (servidor:Linux, cliente:Windows).
  • 35.
  • 36.
    Vámonos de excursiónProblema de la mochila binaria Maximizar el peso del contenido de una mochila respetando restricciones. Experimentos en una instalación doméstica
  • 37.
  • 38.
    Presentando AGAJAJ AsynchronousGenetic Algorithm with JavaScript and JSON
  • 39.
    Se trata, unavez más, de usar el navegador para computación distribuida masiva.
  • 40.
    En este caso,todo el algoritmo evolutivo se ejecuta en el navegador
  • 41.
    O volviendo ala carretera real
  • 42.
  • 43.
    Be fluid, myfriend “ FluidDB is an openly writable shared database” http://fluidinfo.com/about
  • 44.
    FluidDB nació dela computación evolutiva La compañía la creó Terry Jones. “ FluidDB es una sola maraña de cosas.”
  • 45.
    “ FluidDB permite que los datos sean sociales.”
  • 46.
    “ Modelo decontrol único pero potente”
  • 47.
    Reutilización simple dela información.
  • 48.
    ¿Cómo funciona? Thingfluiddb/about Another Thing http://wcci2010.org jjmerelo/likes dwcorne/stars 5 The sound of music
  • 49.
    Fluidificando algoritmos evolutivosThing fluiddb/about Another Thing 0100 1001 1100 1101 jjmerelo/exp-xyz/fitness dwcorne/exp-abc/fitness 33 22 0110 0001 1111 1101 jjmerelo/exp-xyz/current
  • 50.
    Ejecutando un EAfluido 0010101100 001010000 0010101100 0010101100 1110101100 1101101100 0011101100 0010101100 0010101100 1011101100 0011101100 0010101100
  • 51.
    Software libre Elsoftware te lo puedes bajar de http://sl.ugr.es/001U
  • 52.
  • 53.

Notas del editor

  • #2 Foto de J. Bakker Ijmuiden en http://www.flickr.com/photos/joost-ijmuiden/3613829273/in/photostream/
  • #3 Un sólo ordenador/procesador, secuencial, o incluso si es paralelo usando una configuración homogénea, estática. Imagen de http://www.flickr.com/photos/wizzer/5357865167/ por wizzer2801
  • #4 Casi cualquier entorno que no sea ese: lenguajes no tradicionales, soportes no tradicionales (una cámara de fotos, por ejemplo, o incluso un teléfono móvil), computación basada en hebras, P2P, asíncrona.. Foto de .m for mathijs en http://www.flickr.com/photos/matthijs/3514892055/.
  • #5 Foto por The U. S. Army http://www.flickr.com/photos/soldiersmediacenter/4685688778/ Por supuesto, también hay una razón importante: publicar trabajos. Igual la más importante.
  • #7 Algoritmo genético que usa a Google para hacer cálculos. Va a ser más lento, porque hay que tener en cuenta la capacidad de la red, pero es cuestión de aprovecharlo. Ojo, esto es Perl, es para hombres de pelo en pecho. Y mujeres de pecho en pecho.
  • #14 En este caso, lo que se hace es que se usa el mecanismo asíncrono de AJAX para enviar un individuo a un servidor. El servidor responde con otro, escogido entre los mejores.
  • #16 JavaScript está construido alrededor de una serie de estándares ECMA. En realidad, hay otras formas de interaccionar de forma asíncrona entre el navegador y el servidor; ahora mismo, ésta es la más popular.
  • #18 Se podría haber usado un entorno diferente. En realidad, tampoco se usa excesivamente RoR y puede ser incluso una rémora a la hora de conseguir altas prestaciones. La gran ventaja que tiene es la integración con ajax. Es muy fácil hacer llamadas AJAX. Pero quizás hoy lo haría en otro lenguaje: Perl o usando el Google Web Toolkit. También se podría usar un entorno totalmente diferente: Microsoft .Net, por ejemplo, o Ruby. Pero no sería tan ubicuo.
  • #19 En principio, se podría usar otro cualquiera. De hecho, es posible que lo cambiemos, según el “peso” de la aplicación vaya del servidor al cliente. Pero el desarrollo en RoR es rápido, y tiene una comunidad activa
  • #23 En mi casa, con mi ordenador de sobremesa, y dos portátiles, el mío y el que le compramos a Lourdes, dos VAIO.
  • #24 No es como para tirar cohetes, pero algo se consigue. El problema es que RoR (mongrel) tiene una sola hebra de salida, y en estas condiciones se producen bloqueos para servir al cliente los resultados. Tampoco está optimizado en este sentido. Está en modo debug y no producción (aunque esto afectaría sobre todo a las prestaciones por nodo, no al escalado). En pruebas hechas con clusters de nodos se han conseguido mejores resultados, pero la aplicación no está hecha para trabajar con muchos nodos clientes. Así que hay que plantearse un cambio en el servidor, o en la distribución cliente-servidor
  • #27 Microsiervos lo publicó aquí: http://www.microsiervos.com/archivo/ordenadores/experimento-computacion-distribuida.html
  • #30 Objects are shared, can&apos;t be deleted. Graph link values are not, and depend on the permissions you have granted them. By default, just the creator can do anything on them.That&apos;s why they are shown in blue. Since the “about” tag belongs to fluiddb, once it&apos;s created it can&apos;t be changed (write-only)
  • #32 Take into account that the population must remain constant, and that it&apos;s ensured that every member in the population is unique. If the newly generated chromosome is repeated, it is dropped. The new chromosomes do have already its fitness attached, but in pinciple this is not needed; one client could do the evolutionary operators, and another the evaluation.
  • #33 It&apos;s free as in freedom, not as in free beer. Scientific software should be free from the get go, becasue it encourages reproctibility Image from: http://www.flickr.com/photos/zarwan/79822984/sizes/l/in/photostream/ It&apos;s the Perl camel drinking from the fluid evolutionary algorithm. Take into account that the concept of population does not really apply here. We have a “current” population, and also a “local” population, and a number of evaluations before each immigration.
  • #34 Since individuals are unique, the number of them added each generation goes down, which is only obvious. It could be done some other way, but it would involve many more database queries. It never goes down to 0, anyways.
  • #35 This is a sequential run; take into account that the number of evaluations is rather low; even so, it reaches the maximum due to high diversity in the pool
  • #36 Due to the alpha state of FluidDB and the concurrency problems, we have used sequential runs, with the second run starting after the first.The second gets random chromosomes from the pool, which increasingly mean that former solutions are reused. Esta es una de las ventajas de usar un sistema en el cual todas las soluciones son persistentes; siempre se va mejorando sobre lo ya obtenido. Lo único que tienes que preocuparte es de etiquetar correctamente cuales son las mejores soluciones.
  • #37 Batch size is 2 in this case; two are taken from the current population and put back into it (if new). Since inmigration is much more frequent, improvement is faster and steadier. This probably means that making more fluidinfo queries increases probability of obtaining good results
  • #39 Describe basic working principles of Dropbox as a free file synchronization service, how it monitors certain files and how they are copied when modifed under its own schedule. It&apos;s got a permission system that regulates who&apos;s got access to which resources; it&apos;s usually done per directory, and you can also make directory results publicly available.
  • #41 Every node runs independently, although they are started (roughly) at the same time. After an appointed number of generations, an individual (the best) is logged into the common directory, and another one is taken. A file with the total number of evaluations is also created, and the sum of all evaluations is checked as a termination condition. To speed up processing and reduce overhead speeding up synchronization, the individual is codified into the filename, so that the only thing that is read is the directory, not the content of the file itself. We use different kinds of codifications depending on the chromosome length, but lengths of several hundreds are not a problem. As it can be seen, the fitness is also codified into the name.
  • #44 Deberías usar los del paper. Se ven mejor...
  • #48 Picture from Andrew Rivett, Veggiefrog