(Melanie) ¡Hola! Nuestra invitada esta semana es Stephanie Forrest, que es profesora de Ciencias de la Computación en la Universidad de Nuevo México, donde dirige el laboratorio de Computación Adaptativa. Stephanie también es profesora externa en el Intituto Santa Fe y co-dirige la Junta Científica del Instituto Steph ha trabajado por muchos años en la intersección entre ciencias de la computación y biología y es una experta en algoritmos genéticos los cuales hemos estado estudiando en esta unidad. Bienvenida, Steph. (Stephanie) Muchas gracias, Es muy bueno estar aquí. (Melanie) Sé que has estado estudiando algoritmos genéticos por mucho tiempo incluso hemos trabajado juntas en proyectos de algoritmos genéticos pero quería conocer tu opinión sobre por qué los algoritmos genéticos son relevantes en el estudio de sistemas complejos. Bueno, lo primero es que los algoritmos genéticos pueden ser vistos como un modelo simple de evolución darwiniana. Entonces, desde una perspectiva de modelación, capturan uno de los procesos más importantes y misteriosos en la tierra - la evolución. Lo segundo es que este modelo de evolución darwiniana también puede ser visto como una estrategia de diseño. Es una estrategia de diseño que se ha usado mucho en la naturaleza pero que también se ha adaptado como algoritmo computacional para ayudar a diseñar sistemas de ingeniería. Así que los algoritmos genéticos son usados mucho en ingeniería también. (Melanie) Entonces, para seguirte, ¿Por qué dices que la evolución es misteriosa? Bueno, primero no la puedes ver, ese es el problema Entonces, es un proceso que regresando a Dawrin, se propuso como una explicación para entender cómo el mundo en el que vivimos llegó a ser Pero eso no es un proceso que podamos observar. Es muy difícil estudiarlo experimentalmente. Ya hay ahora algunos sistemas experimentales que se pueden estudiar en tubos de ensayo, como virus y bacterias que evolucionan, podemos estudiar esos experimentalmente. Pero creo que, cuando confrontamos el mundo a nuestro alrededor para mí, es un misterio cómo el mundo acabó siendo así, y aunque yo tiendo a creer que el mundo fue producido por la evolución no siempre es trivial entender cómo pudo haber pasado eso mecánicamente. (Melanie ) Cierto. Y supongo que otra cosa misteriosa sobre la evolución son las grandes transiciones en donde al sistema que está evolucionando le ocurre un gran cambio en su organización y la acción evolutiva sucede en un nivel de organización distinto. Y yo creo que aún hoy la mayoría de la gente que estudia evolución no diría que entienden como suceden esos cambios. (Melanie) Entonces, dijiste que esos algoritmos genéticos son un modelo para la evolución. ¿Crees que nos podrían ayudar a entender la evolución biológica? Sí. ¿Cómo? Te preguntarás. Bueno, han sido usados para modelar muchos tipos de procesos evolutivos que ocurren naturalmente - no sólo biológicos, por cierto. Pero en el ámbito de las ciencias sociales, puedes pensar en algoritmos genéticos que modelen como las innovaciones se propagan en una comunidad. Se han escrito libros sobre la difusión de las innovaciones y la idea es que las ideas y modas se propagan en las poblaciones en un proceso no distinto a la evolución darwiniana. (Melanie) ¿Así que peinas que la evolución darwiniana es una idea útil, no solo en biología, sino también en otros campos? Absolutamente. No diría que es la única idea. (Melanie) Por supuesto. Pero creo que es una idea importante, y ciertamente relevante en el estudio de la mayoría de los sistemas complejos. (Melanie) ¿En qué estás trabajando ahora? ¿Con qué estás emocionada? ¿Particularmente en el campo de algoritmos genéticos? Como hace 10 años me interesó mi propio campo... Bueno, siempre me ha interesado mi propio campo, pero particularmente me interesó el software. Y pensar en como las infraestructuras de software, esto es, grandes colecciones de software por ejemplo, todos los programas que están en los discos de las computadoras que están conectadas a internet - en cómo esas colecciones tan grandes cambian en el tiempo y si son sujetas o no, al proceso de evolución. Y a partir de eso me interesó particularmente si se podía o no evolucionar software. Por ejemplo, ¿podríamos diseñar un programa en lugar de contratar a un programador que lo escriba? ¿Podríamos usar el proceso evolutivo para producir programas? Y aunque no puedo decir que yo haya resuelto ese problema exactamente, esto me llevó a lo que es potencialmente un problema más fácil que es, usar la evolución para evolucionar reparaciones en defectos o errores del software. La idea es que me das un programa con errores, hago varias copias, típicamente 40 copias del programa, y cada una de las copias tiene mutaciones al azar, a diferencia de las mutaciones genéticas, y luego usamos un algoritmo genético para seleccionar miembros de la población que son más adecuados, es decir que pasan la prueba. En nuestro caso la adecuación se mide en términos de pruebas con regresiones Y después de unas cuantas generaciones la evolución produce misteriosamente un programa que en muchos casos repara los errores. (Melanie) Fántasitco. Eso es impresionante. ¿Dejarás sin trabajo a los programadores? Bueno... Podría ser. Digo, yo creo que el software es un gran cuello de botella y el mantenimiento del software también. Entonces, si ves la economía de la computación y en dónde se gasta el dinero, el 90% del costo del software se va a mantenimiento. El mantenimiento es principalmente depurar de errores, arreglar problemas que han sido identificados. Un estudio de hace algunos años estimó que el costo de los errores del software eran del 0.6% del P.I.B. del E.U.A., lo que tiene un impacto económico significativo. Entonces aunque no le quitemos el trabajo a todos los programadores, podemos acelerar su productividad, ya sea que nuestro programa proponga soluciones al error que luego puedan revisar y decidir si la aceptan, o que el programa sustituya la tarea de arreglar pequeños errores y le dejen al programador los errores más complejos e interesantes. Eso sería un resultado aceptable. (Melanie) Entonces, ¿a cuánto está esto de ser un producto comercial? (Steph) Bueno, aún está lejos de ser un producto comercial. Pensamos sobre su comercialización, pero hasta ahora sólo lo hemos dejado como código abierto, de dominio público, entonces todos nuestros programas están disponibles en nuestro sitio web. Debo mencionar que no estoy haciendo esto yo sola. Lo hago en colaboración con un profesor de la Universidad de Virginia, que sabe mucho más que yo sobre ingeniería de software y lenguajes de programación. Su nombre es Westley Weimer I ambos nos hemos sorprendido de como ha funcionado este proyecto. Recientemente completamos un estudio grande de más de 150 errores seleccionados al azar y arreglamos confiablemente más del 50% en el primer intento. (Melanie) Vaya, eso es impresionante. Es más de lo que la mayoría de la gente puede hacer. Mejor que lo que yo puedo hacer, que es vergonzoso admitir (Melanie) Bueno, ya no lo necesitas, ahora que tienes tu algoritmo genético que la haga por ti. Cierto, pero su uso y cómo podemos introducirlo a la computación popular aún es una pregunta abierta para nosotros. (Melanie) Mencionaste que esta idea de algoritmos genéticos creando programas, no sólo corrigiendo sus errores. Se que hay un campo amplo llamado Programación Genética, que ha intentado hacer esto. ¿Qué tan difícil crees que es este problema? Vimos un ejemplo en nuestra clase, creando un programa simple para mover a un robot en en una pantalla y que hicera ciertas cosas. Pero la pregunta es, ¿qué tan difícil es escalar esto a programas verdaderamente complejos? ¿Crees que esto podría suceder? No creo que vaya a suceder inmediatamente. En realidad, me gustaría señalar que el problema que aborda la programación genética es el problema de comenzar de ceros. Una de las razones por las cuales nosotros fuimos tan exitosos en la reparación de errores es porque iniciamos con un programa que está 99.999% bien Está bien en todo lo demás, pero tiene un error. Y nosotros sólo intentamos resolver ese error. En la programación genética se empieza en el otro lado y no sé que lado vaya a ser mejor eventualmente. Mi teoría es que tomemos lo que se ha hecho con programas funcionales o parcialmente funcionales y viendo hacia el futuro pensar en cómo se puede añadir funcionalidad a un programa que ya está funcionando. Probablemente esa es la diferencia entre la evolución y el origen de la vida, no sé. (Melanie) Bien, muchas gracias. Ha sido excelente hablar contigo. Por nada. Es divertido y los sistemas complejos son maravillosos. (Melanie) Bien. ¡Gracias!