Así como la inteligencia, y en particular el funcionamiento de las neuronas y el cerebro, han llevado a personas en ciencias de la computación a desarrollar lo que conocemos como inteligencia artificial, también el fenómeno de vida misma y la evolución orgánica han interesado a la gente de computación y de allí lo que se conoce como vida artificial.
La vida artificial se refiere a la creación de comportamientos o características de los sistemas vivos en la computadora. Tiene como objetivo, tanto la de crear organismos vivos en una computadora, como la de utilizar mecanismos de sistemas vivos para resolver cualquier problema. Acá les voy a hablar rápidamente de un ejemplo de uso, lo que se llama “algoritmos genéticos”
Resulta ser que los sistemas biológicos (los sistemas vivos), tienen un algoritmo realmente efectivo para crear toda la diversidad de especies que conocemos, lo llamamos evolución orgánica, y este algoritmo funciona tan bien, que lo podemos utilizar para solucionar problemas extremadamente complejos. Entendemos como evolución a la modificación de la descendencia de organismos, a través de presiones del medio, que hace que se fijen cambios, y estos cambios codificados en el ADN. De forma simplificada lo que ocurre es: 1. Hay mutaciones en el ADN, 2. Estas mutaciones generan cambios en el organismo, 3. Si estos cambios son beneficiosos, estos se propagan en la población. Lo interesante es que podemos usar esta idea para resolver problemas en una computadora
Empecemos con un ejemplo. Consideremos la siguiente situación:
Queremos que el triángulo verde navegue moviéndose adelante, izquierda y derecha llegue a el círculo amarillo. Los círculos negros, son obstáculos por los cuales el triángulo no puede pasar. Así a pura inspección ocular vemos que hay varias posibles rutas, pero lo que queremos hacer es que la computadora encuentre al menos una, ¿Cómo podemos hacer que la computadora encuentre una solución?, utilicemos evolución.
Lo primero es codificar los movimientos del triángulo como si fuera una tira de ADN:
En la figura se ve que en la tira cada movimiento izquierda (número negativo) y derecha (número positivo), corresponde a la secuencia de movimientos que el triángulo puede hacer. Esa tira o secuencia es lo que llamaremos nuestro ADN. Una solución exitosa es una secuencia de números (movimientos izquierda-derecha) que guíe el triángulo hacia la meta y mejore el “fitness” que es la distancia final a la meta lograda.
Acá viene lo importante, no comenzamos con un triángulo sino con un “población” de unos 20 triángulos, cada uno con un ADN que inicia con número aleatorios. A estos 20 los ponemos a correr (a tratar de llegar a la meta), y luego evaluamos cual llegó más cerca de la meta, escogemos a ese como el mejor, y hacemos lo siguiente:
Una vez que escogemos el mejor, lo copiamos 20 veces, y es acá donde la mutación entra en juego. Al azar, de las 20 copias del mejor, cambiamos los números de forma arbitraria (los cuadros rojos en la figura anterior), simplemente se les asigna un número aleatorio (en este caso de -4 a 4). A esta nueva población la ponemos a correr nuevamente, y luego nos quedamos con el mejor, y así continuamos hasta que al menos un triángulo llegue. Programé este código en JavaScript para que lo veamos funcionando:
Allí se puede observar cómo la población “prueba” posibles caminos, y solo la mejor (que es la ruta verde) se propaga a una nueva población (eso indica una generación). Así va trabajando sobre la mejor solución parcial, que son los caminos verdes. Si lo dejan correr un rato, verán que encuentra un camino hasta la meta, y esa es nuestra solución. Si aprietan el botón de “reset”, pueden iniciar un nuevo reto para el triángulo. En la simulación las rutas intentadas van dejando rastro en gris, y las verdes son donde encontró una buena alternativa. Por ejemplo:
En 35 generaciones, encuentra una solución viable (ruta verde más marcada). Las demás rutas verdes indican otras posibilidades que en algún momento eran las mejores, pero de a poco fue “evolucionando” a una solución mejor.
Esto que les presento es la esencia de un “algoritmo genérico”, acá por supuesto simplificado para efectos de claridad. Este tipo de algoritmos es lo que comúnmente personas en ciencias de datos tienen en su caja de herramientas para analizar datos y encontrar soluciones, y está dentro de los algoritmos que conocemos como “Machine Learning”.
Este procedimiento no solamente es una forma efectiva de encontrar una solución a problemas muy complejos, donde matemáticamente es extremadamente difícil trabajar, sino que pone de manifiesto cómo con un proceso de mutaciones aleatorias y presiones de selección, a través del tiempo se pueden generar nuevas alternativas viables, que es lo que conocemos como evolución orgánica que ha dado origen a todas las especies que conocemos. ¿Será posible entonces un ser vivo computacional?
Dr. Tomás de Camino Beck,
Director de la Escuela de Sistemas Inteligentes
Universidad Cenfotec