La programación genética es una técnica de inteligencia artificial en la cual se hacen uso de algoritmos evolutivos para generar de manera automática programas informáticos, basándose en los principios de selección natural y genética; donde una población de programas se someten a una serie de operaciones como cruce, mutación y selección con el fin mejorar e ir evolucionando con el tiempo. Dicha técnica forma parte de la denominada “computación evolutiva”, que es una rama de la inteligencia artificial donde se hace uso de algoritmos basados en la evolución natural para resolver toda clase de problemas.
El objetivo final de la programación genética es generar automáticamente programas que puedan resolver un problema en concreto, esto se consigue mediante la evaluación de un conjunto de programas generados con anterioridad, con el fin de averiguar cual es el -o son los- programa(s) más adecuado(s) para la resolución del problema. Dicha selección se usará para crear la próxima generación de programas, que posteriormente -y en caso de que sea pertinente- también se evaluarán y elegirán. Repitiendo el proceso cuantas veces sea necesario. La programación genética puede usarse para generar programas basados en lenguajes Java o Python, y la complejidad de estos dependen de la complejidad del problema y las restricciones presentes en el espacio de producción.
Respecto a sus aplicaciones, podemos destacar las siguientes:
- Aprendizaje automatico y el reconocimiento de patrones
- Finanzas, cadenas de montaje, optimización de estrategias comerciales.
- Biología y el descubrimiento de nuevos medicamentos.
- Diseños de motores aeronaúticos.
¿Cómo funciona la programación genética?
La programación genética implica el uso de un conjunto de operaciones genéticas para hacer evolucionar una población de programas a lo largo del tiempo. Los principales pasos en el proceso son:
1. Inicialización
Se genera e inicializa -de manera aleatoria- un conjunto (o población) de programas denominados “cromosomas”, y se representan de diversas formas como estructuras de árbol, cadenas carbonadas o redes.
2. Evaluación
Cada programa que compone la población se evalúa, con el fin de determinar si es idóneo para la resolución de la tarea o problema planteado. Esta evaluación se puede realizar de múltiples formas; si por ejemplo el objetivo es optimizar el rendimiento de un algoritmo de aprendizaje automático, se evaluará en base a la precisión de las predicciones expuestas por dicho algoritmo.
3. Selección
Los programas mas válidos para la función requerida se seleccionan según el puntuaje obtenido en la fase de evaluación. Hay una variedad de formas de optimizar este proceso:
- Seleccionando aleatoriamente los programas y eligiendo el más apto.
- Estableciendo la probabilidad de que sea seleccionado mediante la puntuación obtenida en la evaluación.
4. Gestión & manipulación
Los programas seleccionados se someten a procesos de cruce, mutación y reproducción para crear una nueva generación de programas. Los procesos consisten en lo siguiente:
- En el cruce cogen dos programas y los combinan para crear uno nuevo.
- En la mutación se realizan cambios en el código del programa, generalmente mediante la alteración de valores.
- Por último, en la reproducción se hace uso de los programas más aptos para generar los programas de nueva generación.
El uso de estas operaciones genéticas permite la introducción de nuevas ideas y soluciones en la población, además de mantener cierto grado de diversidad dentro de ella.
Además, para que la población no se vuelva excesivamente homogénea -y sea diversa- se puede hacer uso de las siguientes técnicas:
- Elitismo: donde solamente se preservan los programas más aptos de la población.
- Preservación de nichos: donde se mantiene -de manera forzada y no siempre conveniente- la diversidad entre el conjunto de programas.
5. Repetición
El proceso se repite constantemente hasta encontrar ua solución satisfactoria o el número de iteraciones deseado. Mediante la repetición, la población evolucionará y mejorará de manera progresiva.
Ventajas y desventajas de la programación genética
La programación genética tiene numerosas ventajas, que incluyen:
- Posibilidad de dar soluciones a problemas complicados -o incluso imposibles- de resolver por humanos, gracias a la exploración de un amplio número de posibles soluciones las cuales un individuo cualquiera podría no haber considerado.
- Flexibilidad y posibilidad de aplicación en un amplio número de problemáticas, además de permitir la combinación con el aprendizaje automático y los algoritmos de optimización para ua mayor precisión en los resultados.
- Automatizado y casi nunca requiere de intervención manual.
Respecto a las desventajas, debemos tener en cuenta las siguientes dos:
- El proceso puede requerir de mucho tiempo, además de consumir recursos computacionales significativos.
- Posible dificultad de comprensión e interpretación de las soluciones propuestas por la programación genética.
Conclusión
La programación genética es una excelente técnica en machine learning que utiliza algoritmos evolutivos para generar programas automáticamente. Siendo útil para la resolución de problemas y también descubrir nuevas soluciones y conocimientos en una gran variedad de campos. Aún así, es importante asegurarse de que la programación genética sea útil para la problemática que deseemos resolver, ya que puede haber métodos más apropiados para ello. Actualmente se continúa desarrollando y refinando las técnicas y enfoques utilizados en la programación genética, resultado un campo muy prometedor de cara al futuro.