Crédito:Shutterstock
¿Y si las computadoras pudieran programarse por sí mismas? En lugar del laborioso trabajo de averiguar cómo una computadora podría resolver un problema y luego escribir instrucciones codificadas precisas, todo lo que tendría que hacer es decirle lo que quiere y la computadora generará un algoritmo que resuelva su problema.
Ingrese a la computación evolutiva, que puede verse como un tipo de inteligencia artificial y una rama del aprendizaje automático. Sugerido por primera vez en la década de 1950, La computación evolutiva es la idea de que una computadora puede desarrollar sus propias soluciones a problemas, en lugar de que los humanos tengan que pasar por una serie de pasos posiblemente complejos para escribir el programa de computadora nosotros mismos. En teoria, esto significaría que los programas de computadora que podrían tardar semanas en programarse manualmente podrían estar listos en cuestión de minutos.
Esta idea permitió a las computadoras resolver problemas complejos que pueden no entenderse bien y son difíciles de abordar para los humanos. Los informáticos han utilizado la computación evolutiva en muchos problemas, incluida la formulación de la mejor combinación de ingredientes para la alimentación de camarones, optimización de cartera, telecomunicaciones jugando juegos y empaque automatizado.
Y los investigadores que han estado estudiando la computación evolutiva durante más de 60 años han logrado enormes avances. Incluso es tema de varias revistas científicas. Todavía, como señalé en un artículo reciente, la idea todavía no se utiliza mucho fuera de la comunidad de investigadores. Entonces, ¿por qué la computación evolutiva no está evolucionando más rápido?
¿Cómo funciona la computación evolutiva?
La computación evolutiva se basa en los principios de evolución natural de Charles Darwin, comúnmente conocido como supervivencia del más apto. Es decir, los miembros más débiles (menos adaptados) de una especie mueren y los más fuertes sobreviven. Durante muchas generaciones, la especie evolucionará para adaptarse mejor a su entorno.
Árbol de programación genética. Crédito:Wikimedia
En computación evolutiva, la computadora crea una población de posibles soluciones a un problema. Suelen ser soluciones aleatorias, por lo que es poco probable que resuelvan el problema que se está abordando o incluso que se acerquen. Pero algunos serán un poco mejores que otros. La computadora puede descartar las peores soluciones, retener las mejores y utilizarlas para "generar" más soluciones potenciales. Se combinarán partes de diferentes soluciones (esto a menudo se denomina "cruce") para crear una nueva generación de soluciones que luego se pueden probar y el proceso comienza de nuevo.
Otro elemento importante de la computación evolutiva, como con la selección natural, es mutación. De vez en cuando un pequeño se realiza un cambio aleatorio en una de las soluciones que se están probando. Esto significa que se pueden crear nuevas soluciones potenciales que no serían posibles con solo usar crossover.
Es de esperar que una combinación de cruce y mutación produzca nuevas soluciones potenciales que sean mejores que sus "padres". Puede que esto no suceda siempre pero a medida que se producen más generaciones, es más probable que surjan mejores soluciones. No es inusual que la computación evolutiva involucre a muchos millones de generaciones, al igual que la selección natural puede tardar muchos millones de años en alterar notablemente una especie viviente.
Uno de los tipos más populares de computación evolutiva es la programación genética. Esto implica que un programa de computadora desarrolle otro programa de trabajo para abordar un problema específico. El usuario proporciona alguna medida de lo que comprende un buen programa y luego el proceso evolutivo se hace cargo, ojalá regrese un programa que resuelva el problema.
Podemos rastrear la programación genética hasta finales de la década de 1980, siendo uno de los principales proponentes John Koza. Pero a pesar de que desde entonces ha logrado importantes avances en la investigación, Las organizaciones comerciales o los usuarios domésticos de computadoras no utilizan la programación genética a diario. Dado lo complicado que puede ser desarrollar sistemas de software que funcionen de manera eficaz y eficiente, Parece sensato conseguir que las computadoras ayuden de la misma manera que están cambiando muchas otras industrias.
¿Por qué no se ha adoptado la computación evolutiva?
El sector comercial no ha adoptado la computación evolutiva como lo ha hecho con otras tecnologías desarrolladas por investigadores. Por ejemplo, La impresión 3-D se inventó en la década de 1980 y, después de un largo período de desarrollo, ahora se está utilizando en la fabricación industrial e incluso por las personas en sus hogares. Similar, realidad aumentada, La realidad virtual y la inteligencia artificial han surgido de la comunidad de investigación y se han convertido en productos importantes para las grandes empresas tecnológicas.
Uno de los problemas clave que frena la computación evolutiva es la incapacidad de los investigadores para centrarse en los problemas que reconocería el sector comercial. Por ejemplo, Los científicos informáticos han estudiado intensamente cómo se podría utilizar la computación evolutiva para programar horarios de exámenes o elaborar rutas para vehículos.
Pero los investigadores a menudo solo estudian versiones simplificadas de problemas que son de poca utilidad en el mundo real. Por ejemplo, muchas simulaciones de rutas de vehículos implican calcular la distancia entre dos puntos usando una línea recta. Las rutas de vehículos en el mundo real rara vez siguen líneas rectas, y tener que lidiar con sistemas unidireccionales, averías, cuestiones legales (como cuánto tiempo antes de que un conductor deba descansar), limitaciones de tiempo y mucho más. Sin embargo, this complexity is actually where evolutionary computation could help. If you can adequately define the problem as it occurs in the real world, then the evolutionary algorithm should be able to deal with its complexity.
Another problem is that the solutions evolutionary computation generates are often hard to explain. Por ejemplo, even though a genetic programming system might create a solution with a perfect outcome, how it actually works might be a mystery to a human programmer as the system may have produced complex code that is difficult to interpret and understand.
An evolutionary computation system is also complex to implement and support and this may put off some commercial organisations. It would help if there was an easy-to-use framework that hid much of the underlying complexity. While these frameworks exist in the scientific community, they are not easily accessible by the commercial sector, never mind home users.
IBM's famous computer architect Frederick Brooks said that you cannot tackle increasingly large software development projects simply by throwing more people at them. It would be an immense help to the software development industry if, instead of having to manually develop every piece of a system, developers could specify the requirements of its key parts and let an evolutionary process deliver the solutions.
Este artículo se publicó originalmente en The Conversation. Lea el artículo original.