Los científicos informáticos llevan mucho tiempo tomando ideas de la naturaleza, como la evolución. En lo que respecta a la optimización de programas informáticos, en los últimos cinco o seis años ha surgido un enfoque evolutivo muy interesante que podría reportar beneficios incalculables a la industria y, con el tiempo, a los consumidores. Lo llamamos mejora genética.
La mejora genética consiste en crear un «programador» automatizado que manipula el código fuente de un programa mediante ensayo y error para que funcione de manera más eficiente. Esto puede incluir cambiar de lugar líneas de código, borrar algunas e insertar otras nuevas, de forma muy similar a como lo haría un programador humano. Luego, cada manipulación se evalúa según algún criterio de calidad para determinar si la nueva versión del código mejora la anterior. Se trata de tomar grandes sistemas de software y modificarlos ligeramente para obtener mejores resultados.
Los beneficios
Estas intervenciones pueden aportar diversos beneficios en el ámbito de lo que los programadores describen como las propiedades funcionales de un programa. Por ejemplo, pueden mejorar la velocidad de ejecución o eliminar errores. También pueden ayudar a adaptar software antiguo a hardware nuevo.
El potencial no acaba ahí. Como la mejora genética opera sobre el código fuente, también puede mejorar las llamadas propiedades no funcionales. Estas abarcan todas las características que no se refieren exclusivamente al comportamiento de entrada y salida de los programas, como la cantidad de ancho de banda o de energía que consume el software. A menudo, a un programador humano le resulta especialmente difícil ocuparse de ellas, dado que ya es un reto construir software que funcione correctamente desde el principio.
En los últimos años hemos visto que algunos ejemplos de mejora genética empiezan a recibir reconocimiento, aunque por ahora siguen circunscritos al ámbito universitario. Un buen ejemplo temprano data de 2009, cuando un «programador» automatizado creado por la Universidad de Nuevo México y la Universidad de Virginia corrigió 55 de 105 errores en distintos tipos de software, desde un reproductor multimedia hasta un juego de Tetris. Por ello recibió 5.000 dólares (3.173 libras esterlinas) y un Gold Humie Award, que se concede por logros obtenidos mediante computación genética y evolutiva.
En el último año, UCL, en Londres, ha supervisado dos proyectos de investigación que han demostrado el potencial del campo (divulgación completa: ambos contaron con la participación del coautor William Langdon). El primero consistió en un programa de mejora genética capaz de tomar un programa complejo y de gran tamaño, con más de 50.000 líneas de código, y acelerar su funcionamiento 70 veces.
El segundo llevó a cabo el primer trasplante automatizado a gran escala de un programa a otro de mayor tamaño: tomó un traductor lingüístico llamado Babel y lo insertó en un sistema de mensajería instantánea llamado Pidgin.
La naturaleza y las computadoras
Para comprender la magnitud de la oportunidad, hay que tener presente que el software es un material de ingeniería único. En otros ámbitos de la ingeniería, como la eléctrica y la mecánica, se puede construir un modelo computacional antes de fabricar el producto final, pues esto permite profundizar en la comprensión y probar un diseño concreto. En cambio, el software es su propio modelo. Un modelo computacional de software sigue siendo un programa informático. Es una representación fiel del producto final, lo que maximiza la capacidad de optimizarlo mediante un programador automatizado.
Como mencionamos al principio, existe una larga tradición de científicos informáticos que toman ideas de la naturaleza. Por ejemplo, la naturaleza inspiró los algoritmos genéticos, que procesan millones de respuestas posibles a un problema del mundo real con muchas variables para encontrar la mejor. Entre los ejemplos hay de todo: desde diseñar una red integral de distribución vial hasta ajustar con precisión el diseño de un motor.
Aunque la metáfora de la evolución se ha convertido en cierto lastre en este contexto, como se explica aquí, los algoritmos genéticos han cosechado varios éxitos y han producido resultados comparables a los de programas creados por personas, e incluso mejores.
La evolución también inspiró la programación genética, que intenta crear programas desde cero a partir de pequeños conjuntos de instrucciones. Sin embargo, tiene limitaciones. Una de sus numerosas críticas es que ni siquiera puede evolucionar el tipo de programa que cabría esperar de un estudiante universitario de primer año y, por tanto, no puede escalar hasta los enormes sistemas de software que constituyen la columna vertebral de las grandes multinacionales.
Esto convierte a la mejora genética en una desviación especialmente interesante dentro de esta disciplina. En vez de intentar reescribir todo el programa desde cero, logra resultados mediante un número reducido de pequeños cambios. Ni siquiera tiene que limitarse a la mejora genética propiamente dicha. El ejemplo de Babel/Pidgin mostró que también puede abarcar el trasplante de un programa a otro, de forma similar a como los cirujanos trasplantan órganos de donantes a receptores. Esto nos recuerda que el objetivo general es la ingeniería de software automatizada. Sea cual sea la enseñanza que podamos extraer de la naturaleza para desarrollar este fascinante campo nuevo, debemos aprovecharla plenamente.
Este artículo se publica en colaboración con The Conversation. La publicación no implica que el Foro Económico Mundial respalde estas opiniones.
Para mantenerse al día con la Agenda, suscríbase a nuestro boletín semanal.
Autor: John R. Woodward es profesor titular de Ciencias de la Computación en la Universidad de Stirling. Justyna Petke es investigadora asociada en el Centre for Research on Evolution, Search and Testing de UCL. William Langdon es investigador asociado principal en UCL.
Imagen: Un hombre escribe en el teclado de una computadora en Varsovia en esta imagen del 28 de febrero de 2013. REUTERS/Kacper Pempel

