Loading…

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

Like this presentation? Why not share!

Herramientas para algoritmos evolutivos en el siglo XXI

on

  • 1,303 views

 

Statistics

Views

Total Views
1,303
Views on SlideShare
1,303
Embed Views
0

Actions

Likes
0
Downloads
53
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as OpenOffice

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Herramientas para algoritmos evolutivos en el siglo XXI Herramientas para algoritmos evolutivos en el siglo XXI Presentation Transcript

    • Herramientas para el desarrollo de algoritmos evolutivos J. J. Merelo http://geneura.ugr.es/~jmerelo jj@merelo.net GeNeura Team / Universidad de Granada DIIS/Universidad de Zaragoza Herramientas desarrollo AEs 1 jj@merelo.net
    • ¿Es la hora de la herramienta? ➢ El código es la ley ➢ Los algoritmos siempre funcionan según los términos impuestos por las herramientas ➢ Conocer diferentes herramientas ayuda a mejorar los algoritmos. Herramientas desarrollo AEs 2 jj@merelo.net
    • Cuando uno tiene un martillo ➢ Siempre se piensa primero en el lenguaje y luego en cómo resolver el problema. ➢ Es difícil usar un solo lenguaje en una aplicación, hoy en día. Herramientas desarrollo AEs 3 jj@merelo.net
    • Hay todo un mundo ahí fuera ➢ Programación ¿Y a mí qué más concurrente. me da todo ➢ Sistemas distribuidos y eso? P2P. ➢ Servicios web. ➢ Metaprogramación. ➢ Web 2.0 Herramientas desarrollo AEs 4 jj@merelo.net
    • Se trata de resolver problemas ... y de la forma más eficiente posible Herramientas desarrollo AEs 5 jj@merelo.net
    • Piensa en código Primero el código, luego la ciencia Herramientas desarrollo AEs 6 jj@merelo.net
    • Los pájaros ➢ Darwin se preguntó sobre la variación de especies de pinzón existentes en las Galápagos. ➢ Lo explicó mediante dos mecanismos básicos: variaciones aleatorias y supervivencia del más adaptado. ➢ Wallace también, más o menos al mismo tiempo. Herramientas desarrollo AEs 7 jj@merelo.net
    • Los repollos ➢ Mendel describió la herencia como algo atómico. ➢ Von Neumann fue el primero en especular sobre el código genético. ➢ Watson y Crick describieron en los años 50, la estructura y función del código ADN (ácido desoxirribonucleico) Herramientas desarrollo AEs 8 jj@merelo.net
    • O séase ➢ La evolución procede a través de cambios en el ADN, que dan lugar a diferencias somáticas. ➢ Los cambios se conservan si son viables y el propietario se reproduce (fitness > 0). Cambio →Adaptación →Supervivencia. ➢ ➢ La Naturaleza optimiza ➢ Localmente, espacial y temporalmente. Herramientas desarrollo AEs 9 jj@merelo.net
    • El algoritmo ➢ Los algoritmos evolutivos imitan a la naturaleza trabajando sobre una población de posibles soluciones a un problema, cambiándolas aleatoriamente, combinándolas las unas con las otras, seleccionándolas de acuerdo con su adecuación o fitness. ➢ Repítelo varias generaciones. ➢ Yastá! Herramientas desarrollo AEs 10 jj@merelo.net
    • Tribus genéticas ➢ Algoritmos genéticos: representación binaria ➢ Programación genética: árboles ➢ Programación evolutiva, estrategias de evolución: números reales. ➢ Evolución gramatical: gramáticas. ➢ Objetos evolutivos: estructuras de datos en general. Herramientas desarrollo AEs 11 jj@merelo.net
    • Programación dirigida a objetos ➢ ¿Alguien no sabe qué es la PDO? ➢ El dominio del problema se refleja en clases, que se instancian en objetos. ➢ Algoritmos + estructuras de datos = objetos ➢ Facilita ➢ La reutilización de código. ➢ Depuración (por la encapsulación). Herramientas desarrollo AEs 12 jj@merelo.net
    • PDO: conceptos ➢ Encapsulación. ➢ Herencia. ➢ Polimorfismo. ➢ Abstracción de datos. ➢ Serialización/deserialización. Herramientas desarrollo AEs 13 jj@merelo.net
    • Lenguajes orientados a objetos ➢ Java ➢ C# ➢ Python ➢ Perl ➢ Ruby ➢ Javascript ➢ C++... Herramientas desarrollo AEs 14 jj@merelo.net
    • Veamos un ejemplo: Glot-bot ➢ http://www.ocf.berkeley.edu/~jkunken/glot-bot/version2.c Herramientas desarrollo AEs 15 jj@merelo.net
    • O el Gloto Boto http://geneura.ugr.es/cgi-bin/jmerelo/EvolveWords.cgi Herramientas desarrollo AEs 16 jj@merelo.net
    • Los X-Men ➢ La mutación es una variación aleatoria de un solo individuo ➢ Se genera una población de n individuos ➢ Se muta uno hasta que mejora ➢ Se le pone en la población ➢ Vuelta a empezar ➢ Problema: encontrar una cadena, por ejemplo. Herramientas desarrollo AEs 17 jj@merelo.net
    • X-Men: Estructuras de datos = { _str => '', my $chromosome _fitness => 0 }; ➢ Se puede usar cualquier estructura de datos ➢ Históricamente: bitstrings, vectores, autómatas celulares, árboles eoBit<double> indi; // EO en C++ DoubleVectorIndividual ind; //ECJ (en Java) Herramientas desarrollo AEs 18 jj@merelo.net
    • O en JavaScript function Guy( len ) { this.length = len; this.chromosome=new String; for ( var i = 0; i < this.length; i++ ) { this.chromosome += (Math.random()>0.5)?quot;1quot;:quot;0quot; ; } this.fitness = null; this.clone = clone_guy; this.zap = zap_guy; } Herramientas desarrollo AEs 19 jj@merelo.net
    • Y cuando llega el invierno... create_table quot;guysquot;, :force => true do |t| t.column quot;cromosomaquot;, :string t.column quot;fitnessquot;, :float t.column quot;algoritmo_idquot;, :integer t.column quot;statusquot;, :integer end Herramientas desarrollo AEs 20 jj@merelo.net
    • Lo que va y viene ➢ JSON { chromosome: “101010101011111”, fitness: 45 } Herramientas desarrollo AEs 21 jj@merelo.net
    • Finalmente en XML <indi type='BitString' fitness='16' > <atom>0</atom> <atom>1</atom> <atom>1</atom> <atom>1</atom> <atom>1</atom> <atom>0</atom> <atom>0</atom> <atom>1</atom> <atom>0</atom> <atom>0</atom> <atom>1</atom> <atom>1</atom> <atom>1</atom> <atom>0</atom> <atom>0</atom> <atom>1</atom> <atom>1</atom> <atom>1</atom> <atom>1</atom> <atom>1</atom> <atom>0</atom> <atom>1</atom> <atom>1</atom> <atom>1</atom> <atom>0</atom> <atom>0</atom> <atom>1</atom> <atom>1</atom> <atom>1</atom> <atom>0</atom> <atom>0</atom> <atom>0</atom> <atom>1</atom> <atom>1</atom> <atom>1</atom> <atom>1</atom> <atom>1</atom> <atom>0</atom> <atom>0</atom> <atom>0</atom> <atom>1</atom> <atom>1</atom> <atom>1</atom> <atom>1</atom> <atom>1</atom> <atom>0</atom> <atom>0</atom> <atom>1</atom> <atom>1</atom> <atom>0</atom> <atom>0</atom> <atom>1</atom> <atom>1</atom> <atom>1</atom> <atom>1</atom> <atom>1</atom> <atom>1</atom> <atom>0</atom> <atom>0</atom> <atom>1</atom> <atom>0</atom> <atom>1</atom> <atom>0</atom> <atom>0</atom> </indi> Herramientas desarrollo AEs 22 jj@merelo.net
    • Operadores ➢ Los operadores son functores ➢ Objetos que cambian otros objetos, o funciones con sintaxis de objetos. ➢ Pueden ser parte de los métodos del individuo ➢ Pero no es aconsejable ➢ Aunque casi todo el mundo lo hace así. Herramientas desarrollo AEs 23 jj@merelo.net
    • Todo tiene que cambiar ➢ Diferentes tipos de operadores ➢ Cambio: alteran una sola solución ⇒ Mutación ➢ Intercambio: crean una nueva solución a partir de varias, o intercambiar información genética entre varias soluciones ⇒ Crossover Herramientas desarrollo AEs 24 jj@merelo.net
    • Mutación my @alphabet = ('a'..'z'); sub mutate { my $chromosome = shift; my $mutationPoint = rand( length( $chromosome->{_str})); my @thisAlphabet = @alphabet; substr( $chromosome->{_str}, $mutationPoint, 1 ) = splice( @thisAlphabet,@alphabet))]; $alphabet[( rand( } ord(substr($chromosome->{_str},$mutationPoint,1))-ord('a'),1 ); substr( $chromosome->{_str}, $mutationPoint, 1 ) = $thisAlphabet[( rand( @thisAlphabet))]; Herramientas desarrollo AEs 25 jj@merelo.net
    • Más mutaciones ➢ EO, en C++ eoBitMutation< eoBit<double> > mutation(P_MUT_PER_BIT); mutation( indi ); Functor: sobrecarga del ➢ ECJ, en Java operador () ind.defaultMutate( state, thread ); Herramientas desarrollo AEs 26 jj@merelo.net
    • Y más todavía ➢ DcoR, en Ruby def mutate(str) pos=rand(str.length) valor='0' valor='1' unless str[pos].chr =='1' str[pos]=valor str end Herramientas desarrollo AEs 27 jj@merelo.net
    • X-Men: Mutación ➢ Resultados: ➢ Encuentra la solución... eventualmente (algunas veces). ➢ Hace falta algo más: Herramientas desarrollo AEs 28 jj@merelo.net
    • Haciendo la cama ➢ Crossover == recombinación ➢ 2 o más “progenitores” intercambian material ➢ Con un poco de suerte, mejorará. Herramientas desarrollo AEs 29 jj@merelo.net
    • Ejemplo de crossover sub crossover { my ($chr1, $chr2) = @_; my $crossoverPoint = int (rand( length( $chr1->{_str})-1)); my $range = int( rand( length( $chr1->{_str}) - my $range = 1 + + 1)); $crossoverPoint my int( rand( length( $chr1->{_str}) - $crossoverPoint )); $str = $chr1->{_str}; substr( $chr1->{_str}, $crossoverPoint, $range, substr( $chr2->{_str}, $crossoverPoint, $range)); substr( $chr2->{_str}, $crossoverPoint, $range, substr( $str, $crossoverPoint, $range )); } Herramientas desarrollo AEs 30 jj@merelo.net
    • Sex: Crossover Do { $clone1 = { _str => $chr1->{_str}, _fitness => 0 }; $clone2 = { _str => $chr2->{_str}, _fitness => 0 }; mutate( $clone1, @alphabet ); mutate( $clone2, @alphabet ); crossover( $clone1, $clone2 ); $clone1->{_fitness} = fitness( $clone1->{_str} ); $clone2->{_fitness} = fitness( $clone2->{_str} ); } until ( ($clone1->{_fitness} < $population[$#population]->{_fitness}) || ($clone2->{_fitness} < $population[$#population]->{_fitness})); if ($clone1->{_fitness} > $population[$#population]->{_fitness}) { $population[$#population]=$clone1; } else { Herramientas desarrollo AEs $population[$#population]=$clone2; 31 jj@merelo.net }
    • ¿Cómo funciona el crossover? Herramientas desarrollo AEs 32 jj@merelo.net
    • Estamos hablando del fitness ➢ El fitness normalmente es un número ➢ Pero, en general, debe ser comparable ➢ Idealmente, debería ser la única parte del problema que se le deja escribir al usuario o cliente. ➢ Generalmente, harán falta punteros a función. Herramientas desarrollo AEs 33 jj@merelo.net
    • X-Men: Evaluación de fitness sub fitness ($;$) { my $string = shift; my $distance = 0; for ( 0..($strLength -1)) { $distance += abs( ord( substr( $string, $_, 1)) - ord( substr( $targetString, $_, 1))); } return $distance; } Herramientas desarrollo AEs 34 jj@merelo.net
    • Y las poblaciones ➢ Un conjunto de individuos. A veces llamados isla o deme. ➢ Sin estructura, excepto el orden ➢ Por fitness, habitualmente // EO eoPop< eoBit<double> > pop; // ECJ DoubleVectorIndividual pop[POPSIZE]; Herramientas desarrollo AEs 35 jj@merelo.net
    • Visitando las poblaciones ➢ Perl: Algorithm::Evolutionary my @pop; for ( 0..$popSize ) { my $indi = Algorithm::Evolutionary::Individual::Vector->new( 2 ); push( @pop, $indi ); } Herramientas desarrollo AEs 36 jj@merelo.net
    • Muchos son los llamados ➢ Los algoritmos evolutivos funcionan (habitualmente) por generaciones. ➢ Repetir (hasta condición de terminación) ➢ aplicar-métodos-generación (población) my $contador=0; do { $generation->apply( @pop ); $contador++; } while( $contador < $numGens ); Herramientas desarrollo AEs 37 jj@merelo.net
    • Pero pocos los elegidos Ydtvslqflr -> 42 Ydtvslqflr -> 42 ygrslvihcr -> 44 ygrslvihcr -> 44 vfodoqaegj -> 47 vfodoqaegj -> 47 rjyaknrqts -> 48 rjyaknrqts -> 48 tgiaakugps -> 49 tgiaakugps -> 49 hecdimrhbr -> 49 hecdimrhbr -> 49 pexesvqgac -> 52 pexesvqgac -> 52 zxpiipwmhn -> 53 zxpiipwmhn -> 53 ygrslgiqcr -> 54 ygrslgiqcr -> 54 cglinjtihl -> 55 Ydtaakqflr jhkdkphbiq -> 57 tgivslugps Herramientas desarrollo AEs 38 jj@merelo.net
    • Aunque pueden ser menos todavía Ydtvslqflr -> 42 Ydtvslqflr -> 42 ygrslvihcr -> 44 ygrslvihcr -> 44 vfodoqaegj -> 47 vfodoqaegj -> 47 rjyaknrqts -> 48 rjyaknrqts -> 48 tgiaakugps -> 49 tgiaakugps -> 49 hecdimrhbr -> 49 hecdimrhbr -> 49 pexesvqgac -> 52 pexesvqgac -> 52 zxpiipwmhn -> 53 ygrslvaecr ygrslgiqcr -> 54 vfodoqihgj cglinjtihl -> 55 Ydtdoqaflr jhkdkphbiq -> 57 vfovslqegj Herramientas desarrollo AEs 39 jj@merelo.net
    • El mercado del pescado Herramientas desarrollo AEs 40 jj@merelo.net
    • Buscando el equilibrio ➢ Exploración vs. Explotación ➢Exploración: creación de nuevas posibilidades; puede degenerar en El mester de la algoritmia evolutiva consiste en búsqueda aleatoria. ➢ Explotación: explorar por dondey explotación equilibrar exploración ya se conoce que va la cosa bien. Puede llevar a ascenso de gradiente, consanguineidad y estancamiento. Herramientas desarrollo AEs 41 jj@merelo.net
    • Pero vayamos por partes ➢ Cada generación ➢ Evaluar nuevos individuos: evaluador ➢ Elegir los que se van a reproducir: criador ➢ Crear nuevos individuos a partir de esos: transformador ➢ Insertar los nuevos individuos en la población, eliminando algunos: cosechador. ➢ Operadores específicos: hipermutación, migración... Herramientas desarrollo AEs 42 jj@merelo.net
    • La simplicidad en JS function gen_apply( pop, fitness ) { //Evaluar la población aquí... pop.sort( compare_fitness ); var elite_pop= pop.slice( 0, this.pop_size - this.elite ); var new_pop = reproduce( elite_pop, this.pop_size-elite_pop.length, this.operadores ); for ( i = 0; i < new_pop.length; i ++ ) { elite_pop.push( new_pop[i] ); } return elite_pop; } Herramientas desarrollo AEs 43 jj@merelo.net
    • La complicación en XSL <xsl:template name='select'> <xsl:param name='params' /> <xsl:param name='dejar' /> <xsl:for-each select='saxon:node-set($params)/*' > <xsl:sort select='@fitness' order='descending' /> <xsl:if test='position() &lt;= $dejar'> <xsl:copy-of select='.' /> </xsl:if> </xsl:for-each> </xsl:template> Herramientas desarrollo AEs 44 jj@merelo.net
    • Un algoritmo genético canónico ➢ Goldberg lo propuso en su libro Genetic Algorithms in Search, Optimization and Machine Learning. ➢ Selección de rueda de ruleta, crossover y mutación. Herramientas desarrollo AEs 45 jj@merelo.net
    • El cogollo canónico for ( 1..$generations ) { my @newPop, @rates; for ( @population ) { push @rates, 1/$_->{_fitness}; } my $popWheel=new Algorithm::Evolutionary::Wheel @rates; for ( my $i = 0; $i < $popSize/2; $i ++ ) { my $chr1 = $population[$popWheel->spin()]; my $chr2 = $population[$popWheel->spin()]; my $clone1 = { _str => $chr1->{_str}, _fitness => 0 }; my $clone2 = { _str => $chr2->{_str}, _fitness => 0 }; mutate( $clone1, @alphabet ); mutate( $clone2, @alphabet ); crossover( $clone1, $clone2 ); $clone1->{_fitness} = fitness( $clone1->{_str} ); $clone2->{_fitness} = fitness( $clone2->{_str} ); push @newPop, $clone1, $clone2; } @population = sort { $a->{_fitness} <=> $b->{_fitness} } @newPop; Herramientas desarrollo AEs 46 jj@merelo.net
    • Y los resultados Herramientas desarrollo AEs 47 jj@merelo.net
    • Mejor con aristocracia ➢ Elitismo: mantienen al mejor para la siguiente generación, determinísticamente. Herramientas desarrollo AEs 48 jj@merelo.net
    • Otros sistemas ➢ AI::Gene::Simple ➢ AI::GP (antes myBeasties). ➢ AI::Genetic ➢ Diversos módulos no publicados en CPAN. Herramientas desarrollo AEs 49 jj@merelo.net
    • Algorithm::Evolutionary: GA Canónico ➢ Principios de diseño ➢ Completo ➢ Extensible ➢ Serializable ➢ Disponible en http://opeal.sourceforge.net o en CPAN: http://search.cpan.org/~jmerelo/Algorithm-Evolutionary-0.54/ Herramientas desarrollo AEs 50 jj@merelo.net
    • Algorithm::Evolutionary: GA Canónico use Algorithm::Evolutionary::Experiment; use Algorithm::Evolutionary::Op::Easy; my $fitness = sub { my $indi = shift; my $total = grep($_==1,split(//,$indi->Chrom() )); return $total; }; Herramientas desarrollo AEs 51 jj@merelo.net
    • Algorithm::Evolutionary: GA Canónico my $ez=new Algorithm::Evolutionary::Op::Easy $fitness; my $popSize = 100; my $indiType = 'BitString'; my $indiSize = 32; my $e = new Algorithm::Evolutionary::Experiment $popSize, $indiType, $indiSize, $ez; print $e->asXML(); Herramientas desarrollo AEs 52 jj@merelo.net
    • Algorithm::Evolutionary: Final canónico my $populationRef; do { $populationRef = $e->go(); print quot;Best so far: quot;,$populationRef->[0]->asString(), quot;nquot;; } until ($populationRef->[0]->Fitness() == $indiSize); print quot;Finalnquot;, $e->asXML(); Herramientas desarrollo AEs 53 jj@merelo.net
    • Algorithm::Evolutionary: El XML resultante <ea> <initial> <op name='Easy' > <op name='Bitflip' rate='1' > <param name='howMany' value='1' /> </op> <op name='Crossover' rate='1' > <param name='numPoints' value='2' /> </op> <!-- and so on... --> Herramientas desarrollo AEs 54 jj@merelo.net
    • Todavía puede ser más corto #!perl use strict; use warnings; use Algorithm::Evolutionary::Experiment; my $xmlDoc = join(quot;quot;,<>); my $e = Algorithm::Evolutionary::Experiment->fromXML($xmlDoc); my $populationRef = $e->go(); print quot;Finalnquot;, $e->asXML(); Herramientas desarrollo AEs 55 jj@merelo.net
    • Algorithm::Evolutionary: Y ahora uno completito my $creator = new Algorithm::Evolutionary::Op::Creator( $popSize, 'BitString', { length => $numberOfBits }); my $selector = new Algorithm::Evolutionary::Op::RouletteWheel $popSize; my $mutation = new Algorithm::Evolutionary::Op::Bitflip; my $crossover = new Algorithm::Evolutionary::Op::Crossover; my $replacementRate = 0.4; my $generation = new Algorithm::Evolutionary::Op::GeneralGeneration( $fitness, $selector,[$mutation, $crossover],$replacementRate ); Herramientas desarrollo AEs 56 jj@merelo.net
    • Algorithm::Evolutionary: segunda parte my $terminator = new Algorithm::Evolutionary::Op::DeltaTerm $numberOfBits, 0; my $algorithm = new Algorithm::Evolutionary::Op::FullAlgorithm $generation, $terminator; my $experiment = new Algorithm::Evolutionary::Experiment $creator, $algorithm; $experiment->go(); Herramientas desarrollo AEs 57 jj@merelo.net
    • Los no menos importantes ➢ Ficheros de configuración ➢ Acabar y reinicializar ➢ Generación de números aleatorios ➢ Interfaces gráficos Herramientas desarrollo AEs 58 jj@merelo.net
    • Software Patterns ➢ Singleton: clase con una sola instancia. ➢ Interfaz de usuario ➢ Mason (albañil): capaz de construir otros objetos ➢ Generadores de población (con un cierto criterio) ➢ O a partir de un objeto hibernado Herramientas desarrollo AEs 59 jj@merelo.net
    • Patrones de software II ➢ Adaptador: cambia los interfaces de clase ➢ Pueden usarse para adaptar los interfaces de operadores (por ejemplo, en EO) ➢ O para código legacy. ➢ Estrategia: encapsula las diferentes formas de encajar las partes de un algoritmo ➢ Se usa, por ejemplo, para los algoritmos: el criador, reproductor y demás son reemplazables. Herramientas desarrollo AEs 60 jj@merelo.net
    • ¿Y la caché? ➢ Tecnologías simples de programación, como usar una variable asociativa como caché de las evaluaciones de fitness, pueden acelerar un algoritmo genético ➢ Use Memoize en Perl ➢ Permite examinar la parte del espacio de búsqueda real que se ha explorado. Herramientas desarrollo AEs 61 jj@merelo.net
    • Algoritmos evolutivos distribuidos ➢ DGA dan mejores resultados que los serie; se consiguen aceleraciones superlineales. ➢ La distribución supone un cambio algorítmico ➢ PVM (parallel virtual machine) o MPI (message passing interface), ➢ Otras tecnologías: RMI (remote method invocation, Java), RPC, sockets. Herramientas desarrollo AEs 62 jj@merelo.net
    • De isla en isla Selección Recombinación Herramientas desarrollo AEs 63 jj@merelo.net
    • Las mulas no nadan ➢ Pero pueden servir para computación distribuida. ➢ Las redes P2P (entre pares) reflejan la complejidad del panorama informático actual. ➢ Son redes dinámicas, ad-hoc, y superpuestas a las redes normales. Herramientas desarrollo AEs 64 jj@merelo.net
    • Topología P2P Red superpuesta Red física Herramientas desarrollo AEs 65 jj@merelo.net
    • Modelo de capas para computación evolutiva distribuida P2P Computación evolutiva Sistema de agentes Red superpuesta P2P PCs conectados a internet Herramientas desarrollo AEs 66 jj@merelo.net
    • ¡Quiero uno! ➢ DREAM: Distributed Resource Evolutionary Algorithm Machine: http://dr-ea-m.org ➢ Agentes evolutivos ➢ Próximamente en la forja de RedIris Herramientas desarrollo AEs 67 jj@merelo.net
    • ¿Y porqué no en AJAX? function add_to_population () { function migrate( pop )){ { if ( request.readyState == 4 request = new == 200 ) { if ( request.status XMLHttpRequest(); var json = request.responseText; var peticion_str = 'http://geneura.ugr.es/~jmerelo/proyectos/ga- eval( quot;masca = quot;+json ); js/cgi/get_guy.cgi?chromosome=' + pop[0].chromosome +quot;&fitness=quot;+pop[0].fitness; document.getElementById('ga-2').innerHTML = json; if ( masca['generaciones'] > 0 ) { masca = null; run_ga( masca['generaciones'] ); request.open('GET', peticion_str , true); } request.onreadystatechange= add_to_population ; } } request.send(null); } } Herramientas desarrollo AEs 68 jj@merelo.net
    • Llegamos a la web 2.0 ➢$parcial=($parcial?quot;$parcial+quot;:quot;quot;).quot;log($i*$i*exp($i))+sqrt($i)quot;; Más márketing que otra cosa ➢ifAplicaciones ( $opt ) { accesibles por web ofrecen un print eval $parcial, quot;nquot;; interfaz abierto, que permite crear mashups ➢ } else { Mezclan la funcionalidad de diferentes my $s = uri_escape($parcial); aplicaciones my $url=quot;http://google.com/search?q=$s&btnG=B%C3%BAsquedaquot;; ➢ ¿Podemos aprovechar la capacidad de my $response = $browser->get( $url ); cálculo de algún servidor? 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 $resultadonquot;; Herramientas desarrollo AEs 69 jj@merelo.net
    • Toda una constelación de servicios ➢ Simple Object Access Protocol: Convierte la internet en una galaxia de servicios. ➢ Más allá de RPC: acceso a objetos remotos. Similar a CORBA y COM. ➢ Usa cualquier transporte, y la mayoría de los lenguajes. Herramientas desarrollo AEs 70 jj@merelo.net
    • No hay que olvidarse de ➢ Test unitarios y globales. ➢ Herramientas de control de versiones como Subversion ➢ Diseño experimental sistemático. ➢ ¿Si tienes que escribir un trabajo dos años más tarde, sabes qué es cada fichero? ➢ El 90% de cualquier experimento es la publicación. Herramientas desarrollo AEs 71 jj@merelo.net
    • Nunca se escribe el software para uno mismo ➢ Se escribe para el mundo. ➢ El software libre hace la investigación reproducible ➢ Y permite que otros se aúpen a hombros de gigantes ➢ Si trabajamos con becas o como funcionarios, es una obligación ética. Herramientas desarrollo AEs 72 jj@merelo.net
    • Y eso es todo Muchas gracias Herramientas desarrollo AEs 73 jj@merelo.net