Elucubraciones doctorales. Capítulo 1
martes, 30 de octubre de 2007
Optimización de funciones computacionales usando conceptos de vida artificial
En este primer capítulo de mis ideas alocadas comentaré una de las primeras ideas que me vinieron a la mente en medio de una clase y que pensé que podría ser increíblemente útil. Desgraciadamente antes de que acabará la clase el profesor hizo algunos comentarios que me hundieron en la miseria y deje la idea por imposible. Pero ahí sigue la idea.
Para empezar voy a explicar un poco lo que es la vida artificial, que básicamente se resume en jugar a ser dios y crear vida, de ahí el termino "artificial". Pero, ¿qué es la vida? o mejor dicho ¿qué es un ser vivo? Existen multitud de definiciones y aún hay gente que sigue discutiendo por definir el concepto de vida. A mi me gusta la definición que dice que un ser vivo es algo que se opone a la segunda ley de la termodinámica, pero me voy a quedar con la que me explicaron de pequeño en el colegio: "los seres vivos nacen, crecen, se relacionan con el entorno, se reproducen y mueren" a lo que voy a añadir el término de evolución, porque los seres vivos evolucionan. Y por si alguien es seguidor de la teoría del creacionismo o similar, por favor que se lea un maravilloso libro que escribió Charles Darwin: El origen de las especies (1859, On the Origin of Species by Means of Natural Selection, or the Preservation of Favoured Races in the Struggle for Life) (Texto íntegro en Wikisource).
Partiendo de esta definición de vida voy a contar una historia, la historia de un biólogo, Thomas S. Ray, que se presento a una conferencia de inteligencia artificial. El primer año se rieron de él por proponer la posibilidad de crear vida en el ordenador, el segundo año no tuvieron otra cosa que hacer sino asombrarse de lo que Thomas había conseguido. Como dice él: "Jugué a ser Dios y creé la vida en mi computadora". Y ¿cómo lo hizo? En primer lugar decidió lo que iba a ser el mundo de la vida que iba a crear, como se trataba de crear vida en el ordenador no hay mejor mundo que la memoría, o al menos, una parte de ella. Lo segundo que hizo fue crear un pseudo lenguaje de programación un poco más avanzado del lenguaje ensamblador pero lejos del los lenguajes de alto nivel que sería utilizado para ejecutar un código capaz de autoreplicarse en la memoria, en el universo. En este punto merece la pena mencionar la necesidad de crear un nuevo lenguaje, ya que los lenguajes actuales contienen bucles y estos bucles cuando se dejan a manos del azar y el ordenador es muy, pero muy fácil que aparezcan bucles infinitos (bucles que nunca acaban) y esto es mortal para cualquier programa. De ahí la necesidad de intentar mitigar un poco este problema con un nuevo lenguaje que hiciera más difícil estos bucles. El siguiente paso fue crear un programa capaz de autoreplicarse en memoria. Para que el programa no se replicara y fuera siempre igual añadió mutación para ver si se generaban nuevos programas capaces de replicarse pero diferentes del original. Por último determino la forma de morir de los individuos, recordar que morir es un instrumento esencial para que las especies evolucionen. Así pues, los individuos que más tiempo llevaban en memoria dejaban de ejecutarse y morían, además los individuos que hacían "cosas raras" como ejecutar instrucciones determinadas cuando no debían eran penalizados y morían antes.
Con todo listo Thomas lanzo su experimento y se puso a observar. Lo primero que vio aparecer fueron los parásitos, individuos que se aprovechaban de los huéspedes para replicarse. Luego los huéspedes crearon mecanismos para defenderse, en concreto dejaban que el parásito se replicase aprovechándose de ellos pero luego proporcionaban información falsa para que el parásito replicase al huésped y no a si mismo. Y entonces los parásitos desaparecieron y los huéspedes empezaron a cooperar unos con otros creando comunidad para replicarse, era el principio de una sociedad. Pero como en toda sociedad, siempre tiene que haber parásitos y estos volvieron a aparecer. A parir de aquí la evolución se había vuelto tan loca que Thomas decidió eliminar la mutación para poder observar a los individuos. Sin la mutación Thomas pensó que no aparecerían individuos nuevos, pero sorprendentemente sí seguían apareciendo individuos nuevos distintos de sus progenitores. Fue entonces cuando descubrió que había aparecido la reproducción sexual en el universo que había creado.
Por si alguien tiene más interés en la vida artificial que creo Thomas existe un software desarrollado por el mismo llamado "Tierra Net" que se ejecuta de forma distribuida y aún sigue generando individuos nuevos.
Y cómo encaja todo esto en mi idea de optimización de funciones, pues bien, no solo apareció la reproducción sexual en el universo de Thomas, sino que también se crearon individuos capaces de replicarse con un número de instrucciones mucho menor del que Thomas había diseñado en un principio. Esto podría parecer una memez porque Thomas no creo un programa optimizado, pero cuando se le propuso a un grupo de estudiantes que crearán ellos individuos capaces de replicarse con el menor número de instrucciones posibles, ninguno fue capaz de aproximarse a lo que el universo de Y cómo encaja todo esto en mi idea de optimización de funciones, pues bien, no solo apareció la reproducción sexual en el universo de Thomas, sino que también se crearon individuos capaces de replicarse con un número de instrucciones mucho menor del que Thomas había diseñado en un principio. Esto podría parecer una memez porque ThomasThomas había creado. En este punto podría decirse que la evolución en la vida artificial supera la inteligencia humana en lo referente a crear individuos que se autorepliquen.
Partiendo de esta base por qué no aprovecharse de que la vida artificial es capaz de optimizar una función para crear nuevas funciones que desarrollen su cometido mucho más rápido. Me parece un tema especialmente interesante para cualquier aplicación de tiempo real donde una fracción de segundo pueda suponer una diferencia entre el éxito o el fracaso, además es mucho más fácil crear un código que funcione y que luego el ordenador optimice a crearlo directamente optimizado. Como dije antes, ningún programa creado por los estudiantes fue más óptimo que lo que se creo en el universo de Thomas. Pero no todo es tan bonito como parece, cuando dije que los comentarios del profesor me hundieron en la miseria fue porque aunque los científicos se entusiasmaron mucho con los resultados de Thomas nadie ha sido capaz de extrapolar los resultados a aplicaciones que no fueran una mera simulación de un universo virtual.
¿Cuales son los problemas que plantea esta idea?
- Crear un lenguaje más complicado que el de Thomas con toda las potencia de los lenguajes actuales pero con las ventajas del lenguaje que creo Thomas. Esto es casi imposible y tal vez resultaría más fácil hacer un programa traductor, pero entonces puede que en la traducción se perdiera la optimización conseguida.
- Añadir la función a optimizar al código capaz de replicarse. En este punto se pueden tener esperanzas porque en lugar de que las instrucciones se ejecuten una en cada ciclo y se den los mismos ciclos de computadora a todos los individuos se podría utilizar el tiempo que la función tarda en realizar su cometido para determinar cuanto tiempo de reproducción doy a cada individuo. De forma que a una función más optimizada se le dan más ciclos para que pueda replicarse, aún así el código para replicarse debería también replicar la función.
- En caso de conseguir el punto anterior habría que tener en cuenta también que la mutación es parte del universo y esta afectaría a las funciones y estas podría dejar de realizar su cometido de forma eficaz y empezar a hacer cosas extrañas. Una solución sería penalizar a estos individuos pero entonces es posible que no hay evolución, todo sería probar.
- Con todas las restricciones anteriores, si todo funcionara sin problemas entonces a lo mejor la reproducción sexual no sería necesaria en este universo y puede que no apareciera, con todas las implicaciones que esto supone en la evolución. Una solución sería que los primeros individuos si contase con reproducción sexual.
- Y lo peor de todo es que si todo acaba funcionando puede que lo único que haya conseguido es reinventar la programación genética pero de una forma más sofisticada.
0 comentarios:
Publicar un comentario