AI-For-Beginners/translations/es/lessons/6-Other/21-GeneticAlgorithms
localizeflow[bot] 6588f07ae1 chore(i18n): sync translations with latest source changes (chunk 1/1, 382 changes) 2026-01-30 01:03:05 +00:00
..
Diophantine.ipynb 🌐 Update translations via Co-op Translator 2025-08-31 17:20:28 +00:00
Genetic.ipynb 🌐 Update translations via Co-op Translator 2025-08-31 17:20:28 +00:00
README.md chore(i18n): sync translations with latest source changes (chunk 1/1, 382 changes) 2026-01-30 01:03:05 +00:00

README.md

Algoritmos Genéticos

Cuestionario previo a la clase

Los Algoritmos Genéticos (AG) se basan en un enfoque evolutivo de la IA, en el que se utilizan métodos de evolución de una población para obtener una solución óptima a un problema dado. Fueron propuestos en 1975 por John Henry Holland.

Los Algoritmos Genéticos se fundamentan en las siguientes ideas:

  • Las soluciones válidas al problema pueden representarse como genes.
  • El cruce nos permite combinar dos soluciones para obtener una nueva solución válida.
  • La selección se utiliza para elegir las soluciones más óptimas mediante alguna función de aptitud.
  • Se introducen mutaciones para desestabilizar la optimización y salir de mínimos locales.

Si deseas implementar un Algoritmo Genético, necesitas lo siguiente:

  • Encontrar un método para codificar las soluciones del problema utilizando genes g∈Γ.
  • En el conjunto de genes Γ, definir una función de aptitud fit: Γ→R. Los valores más pequeños de la función corresponden a mejores soluciones.
  • Definir un mecanismo de cruce para combinar dos genes y obtener una nueva solución válida crossover: Γ2→Γ.
  • Definir un mecanismo de mutación mutate: Γ→Γ.

En muchos casos, los algoritmos de cruce y mutación son bastante simples y manipulan genes como secuencias numéricas o vectores de bits.

La implementación específica de un algoritmo genético puede variar según el caso, pero la estructura general es la siguiente:

  1. Seleccionar una población inicial G⊂Γ.
  2. Seleccionar aleatoriamente una de las operaciones que se realizarán en este paso: cruce o mutación.
  3. Cruce:
  • Seleccionar aleatoriamente dos genes g1, g2 ∈ G.
  • Calcular el cruce g=crossover(g1,g2).
  • Si fit(g)<fit(g1) o fit(g)<fit(g2), reemplazar el gen correspondiente en la población por g.
  1. Mutación: seleccionar un gen aleatorio g∈G y reemplazarlo por mutate(g).
  2. Repetir desde el paso 2 hasta obtener un valor suficientemente pequeño de fit, o hasta alcanzar el límite de pasos.

Tareas típicas

Las tareas que suelen resolverse con Algoritmos Genéticos incluyen:

  1. Optimización de horarios
  2. Empaquetado óptimo
  3. Corte óptimo
  4. Aceleración de búsquedas exhaustivas

✍️ Ejercicios: Algoritmos Genéticos

Continúa tu aprendizaje en los siguientes notebooks:

Accede a este notebook para ver dos ejemplos de uso de Algoritmos Genéticos:

  1. División justa de un tesoro
  2. Problema de las 8 reinas

Conclusión

Los Algoritmos Genéticos se utilizan para resolver muchos problemas, incluidos los de logística y búsqueda. Este campo está inspirado en investigaciones que combinan temas de Psicología y Ciencias de la Computación.

🚀 Desafío

"Los algoritmos genéticos son simples de implementar, pero su comportamiento es difícil de entender." fuente Investiga una implementación de un algoritmo genético, como resolver un rompecabezas de Sudoku, y explica cómo funciona mediante un esquema o diagrama de flujo.

Cuestionario posterior a la clase

Revisión y autoestudio

Mira este excelente video que explica cómo una computadora puede aprender a jugar Super Mario utilizando redes neuronales entrenadas con algoritmos genéticos. Aprenderemos más sobre cómo las computadoras aprenden a jugar juegos como este en la próxima sección.

Asignación: Ecuación Diofántica

Tu objetivo es resolver la llamada ecuación diofántica, una ecuación con raíces enteras. Por ejemplo, considera la ecuación a+2b+3c+4d=30. Necesitas encontrar las raíces enteras que satisfacen esta ecuación.

Esta asignación está inspirada en este artículo.

Pistas:

  1. Puedes considerar las raíces en el intervalo [0;30].
  2. Como gen, considera usar la lista de valores de las raíces.

Utiliza Diophantine.ipynb como punto de partida.