La evolución como algoritmo

En el mundo actual siempre se busca hacer algo más rápido, de forma más eficiente y con el menor gasto posible. Eso tiene nombre: es un problema de optimización multiobjetivo.

Optimización porque quieres maximizar o minimizar algo —productividad, resultado, gasto, tiempo—. Multiobjetivo porque nunca es una sola cosa, son varias a la vez, y casi siempre se estorban entre ellas.

Este tema se me ocurrió escribiendo mi currículum. Al listar un proyecto de algoritmos evolutivos en el que participé hace un par de años —un proyecto grande, en el que yo hice una aportación pequeña— me di cuenta de que nunca había explicado por qué esa idea me parece tan buena.

Qué dijo Darwin, y qué no

Evolución, según el diccionario, es el cambio o transformación gradual de algo. Se usa mucho como sinónimo de cambio positivo, y no es eso: es adaptación, y es gradual.

La propuso Charles Darwin en El origen de las especies, en 1859. Y aquí está el error que casi todo el mundo comete, que vale la pena mirar despacio: la idea que la mayoría tenemos en la cabeza no es la de Darwin, es la contraria. Y esa inversión es exactamente lo que hace posible el algoritmo.

Del darwinismo al neodarwinismo

Hoy no hablamos sólo de darwinismo sino de neodarwinismo: esa idea más lo que sabemos de genética. Cómo se codifica en el ADN el color de los ojos, la altura, ciertas enfermedades, la longevidad.

De ahí sale un concepto más nuevo: la evolución dirigida. Poder decidir si queremos remover una característica —una enfermedad genética hereditaria que los padres tienen y que probablemente hereden los hijos—. Es posible, aunque cuando grabé esto el costo era altísimo. Y también permite combinar especies.

Es un tema polémico y creo que debe revisarse para no llegar a extremos. Puede dar soluciones muy valiosas en medicina, y si no se dirige bien puede traer muchos problemas.

El algoritmo genético, con un automóvil

Vamos al ejemplo concreto. Queremos diseñar un automóvil que maximice velocidad y minimice consumo de combustible. Dos objetivos que se pelean: un carro muy veloz suele gastar mucho, y uno muy económico suele ser lento.

Población inicial. Empezamos con un conjunto de diseños hechos a mano: tipo de llanta, tipo de carrocería, material, peso, motor. Cincuenta, digamos.

Simulación, no fabricación. No se construye ninguno. Se simulan, y de cada simulación se sacan los dos números que nos importan: velocidad máxima y gasto de combustible.

Selección. Con esos dos parámetros medimos todos los diseños y nos quedamos con los mejores, digamos la mitad.

Combinación. Cruzamos características entre los que sobrevivieron: intercambiamos llantas, intercambiamos carrocerías, intercambiamos motores. Salen cincuenta diseños nuevos.

Mutación. A los nuevos les hacemos cambios aleatorios, como si nos hubiéramos equivocado: una llanta un poco más grande, un poco más inflada, una curvatura más pronunciada en la carrocería, otro motor.

Segunda generación. Los mejores de antes más los hijos. Y se repite todo: simular, medir, seleccionar, combinar, mutar.

Convergencia. Se repite tantas veces como quieras, o como tu procesador aguante. El punto de parar se llama convergencia: cuando los diseños ya no mejoran, o la mejora es tan pequeña que no vale la pena seguir gastando simulación. Ahí el algoritmo terminó.

Si quieres ver cada paso con más detalle, está aquí.

Lo que devuelve no es una respuesta

Y aquí está lo que me parece lo más interesante de todo esto, y lo que casi nunca se cuenta.

Este tipo de algoritmos no dan una solución concreta. Dan una gama de posibilidades.

Terminas con el diseño más veloz —que consume muchísimo—, el más económico —que es lento—, y en medio una serie de diseños que son lo suficientemente veloces y lo suficientemente económicos al mismo tiempo. Ese conjunto se llama frente de Pareto, y merece su propio texto, porque cambia la pregunta que le estás haciendo a la computadora.

La ventaja práctica es enorme: puedes hacer tantas simulaciones como quieras sin gastar en fabricar un solo carro.

Yo usé esta idea para diseño de circuitos electrónicos. Y en las simulaciones de automóviles pasa algo que a mí me sigue pareciendo lo mejor del método: llegas a diseños muy distintos a los que una persona habría pensado. No mejores por magia, sino distintos, porque el algoritmo no tiene los prejuicios de forma que tenemos nosotros. Explora lugares del espacio de diseño donde a nadie se le habría ocurrido buscar.


Este texto sale del episodio 003 del Podcast Algoritmos.

No se pudo guardar tu suscripción. Por favor, inténtalo de nuevo.
Tu suscripción ha sido exitosa.

Boletín

Recibe nuevos artículos por correo.