Es más lista que tú

miércoles, 31 de octubre de 2007

No es mas lista que yo, es que a mi no me gusta pensar.

Fernando Alonso (el amigo, no el piloto)

Sobre la estrategia del ataque

Es mejor conquistar un estado que destruirlo.
Es mejor tomar todo un ejército que destruirlo.
Es mejor tomar todo un batallón que destruirlo.
Es mejor tomar toda una compañía que destruirla.
Es mejor tomar todo un pelotón que destruirlo.
Por tanto, un centenar de victorias en un centenar de batallas no es lo más hábil.
Lo más hábil es someter al ejército contrario sin batalla.

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.

Elucubraciones doctorales. Capítulo 0

viernes, 26 de octubre de 2007

Como antesala al futuro que se me plantea, por la consecuencia intrínseca de los insensatos e irreflexivos actos cometidos durante un trastornado verano, me veo en la obligación de liberar a mi cerebro con el fin de divagar sobre la posible temática que compondrá lo que transcurrido el tiempo puede que nombre como mi tesis doctoral. Por ello, a partir de hoy y sin desmerecer la destreza y aptitud de las pocas mentes que leen asiduamente este indescriptible blog, intentaré exponer de la forma más complicada y enrevesada que conozco las ideas y conceptos que fluyan en el interior de mi cabeza.

El objetivo de estas "elucubraciones doctorales" es dar a conocer las ideas que se me han ido ocurriendo sobre las que de alguna forma estaría interesando en trabajar y desarrollar para elaborar una tesis doctoral, o al menos perder el tiempo en algo que me entretenga y, a priori, me guste. Bueno, para que os voy a engañar, aún no me planteo si haré una tesis doctoral o no, pero los temas que trataré son ideas que se me han ido ocurriendo en diferentes momentos de mi vida y son cosas sobre las que me gustaría, al menos, pararme a reflexionar. Y aunque no se entienda nada de lo que diga por lo concreto que es contenido que voy a tratar cualquier aportación en forma de idea o comentario será bien recibida. En cualquier caso intentaré exponer algunos conceptos básicos de las ramas de la inteligencia artificial que más me atraen para que se pueda entender más o menos mi idea y como puede suponer un posible avance en el campo.

Principios básicos

martes, 23 de octubre de 2007

  1. Todo lo que tiene un principio tiene un final.
  2. Para terminar algo, primero hay que empezarlo.
  3. Calma, constancia y perseverancia. Al final todo llega.
  4. Lo único imposible es lo que no se intenta.
  5. No preguntes algo si puede que no te guste la respuesta.
  6. Piensa siempre en positivo y obtendrás resultados positivos. Olvida lo negativo.
  7. Siempre luchar, nunca rendirse. Aunque todo parezca perdido siempre hay una opción más.
  8. No esperes una segunda oportunidad, aprovecha la primera.
  9. El pasado no se puede cambiar, piensa en el futuro.
  10. No pienses lo que vas a decir, pero piensa a ver a quién se lo dices.
  11. Arrepentirse no es una opción, aceptar la realidad sí.
  12. Aprende de los errores, no te arrepientas de aprender.
  13. La única opinión que cuenta es la tuya.
  14. Los sueños no son comparables con la realidad.
  15. Nunca podrás saberlo todo. Realmente lo que sabes es insignificante.
  16. Tarde o temprano siempre se comete algún error.
  17. Cuando buscas un problema, primero fíjate en ti mismo.
  18. Pensar dos veces la decisión que hay que tomar es una perdida de tiempo que puede hacernos perder la capacidad de decisión.
  19. Sólo conocemos nuestros propios límites cuando los sobrepasamos.
  20. Los únicos secretos posibles son los que no existen.
  21. Piensa por ti mismo.
  22. El que no arriesga no gana nada.
  23. El único miedo que hay que tener es el miedo al propio miedo.
  24. La suerte no existe, pero si se busca es posible encontrarla.
  25. Todo es relativo, depende de cada punto de vista.
  26. Siempre falta algo o hay algo que desconocemos...
  27. Tener principios no sirve para nada.


0. Jorge

Runbot

domingo, 14 de octubre de 2007



Desde que estudié las redes de neuronas siempre me han parecido muy útiles y el día que me pusieron a cacharrear con los lego mindstorms lo primero que pensé fue en hacer un robot que aprendiera a andar. Pero como me pasa siempre alguien se me había adelantado.

Runbot es un robót de unos 23 cm de altura diseñado por unos científicos del MIT capaz de aprender a subir una rampa y, además, es el robot bípedo más rápido del mundo: 3,4 zancadas por segundo. El secreto del robot reside en un diseño muy simple que intenta imitar la forma de caminar de los humanos. Además esta dotado de un sensor infrarrojo que le permite conocer la inclinación del suelo. Es un poco diferente al robot que yo había pensando, pero aún así me resulta impresionante como es capaz de aprender a no caerse tras apenas 3 intentos y de aumentar su velocidad.


Fuentes:

Confía

La ignorancia engendra más confianza que el conocimiento

Charles Darwin