|
|
||
|---|---|---|
| .. | ||
| Diophantine.ipynb | ||
| Genetic.ipynb | ||
| README.md | ||
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:
- Seleccionar una población inicial G⊂Γ.
- Seleccionar aleatoriamente una de las operaciones que se realizarán en este paso: cruce o mutación.
- 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.
- Mutación: seleccionar un gen aleatorio g∈G y reemplazarlo por mutate(g).
- 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:
- Optimización de horarios
- Empaquetado óptimo
- Corte óptimo
- 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:
- División justa de un tesoro
- 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:
- Puedes considerar las raíces en el intervalo [0;30].
- Como gen, considera usar la lista de valores de las raíces.
Utiliza Diophantine.ipynb como punto de partida.