Ajuste de Parámetros y Convergencia
Ajuste de parámetros en algoritmos genéticos se refiere a la selección y modificación de valores clave como la tasa de mutación, la probabilidad de cruce y el tamaño de la población para controlar el comportamiento del algoritmo y mejorar la convergencia.
Ajuste de parámetros estático vs. dinámico
Existen dos enfoques principales para controlar los parámetros en algoritmos genéticos:
- Ajuste de parámetros estático: los parámetros como la tasa de mutación, la probabilidad de cruce y el tamaño de la población se fijan antes de iniciar el algoritmo y permanecen constantes durante la ejecución;
- Ajuste de parámetros dinámico (adaptativo): los parámetros se ajustan automáticamente en función de la retroalimentación de la población o el progreso del algoritmo. El ajuste adaptativo ayuda a mantener la diversidad y evitar la convergencia prematura.
El ajuste estático es sencillo pero puede ser subóptimo cuando la configuración óptima varía con el tiempo.
El ajuste dinámico proporciona flexibilidad, mejorando tanto la velocidad de convergencia como la robustez.
1234567891011121314151617181920212223242526272829import numpy as np def adaptive_mutation_rate(population, min_rate=0.01, max_rate=0.2): """ Adjusts mutation rate based on population diversity. Diversity is measured as the average Hamming distance between individuals. """ def hamming_distance(ind1, ind2): return sum(a != b for a, b in zip(ind1, ind2)) n = len(population) if n < 2: return min_rate # No diversity in a single-individual population # Compute average Hamming distance distances = [] for i in range(n): for j in range(i + 1, n): distances.append(hamming_distance(population[i], population[j])) avg_distance = np.mean(distances) max_distance = len(population[0]) # Normalize diversity diversity = avg_distance / max_distance if max_distance else 0 # Inverse relationship: lower diversity -> higher mutation mutation_rate = max_rate - (max_rate - min_rate) * diversity return np.clip(mutation_rate, min_rate, max_rate)
Cuando la diversidad de la población disminuye, los individuos se vuelven demasiado similares y el algoritmo corre el riesgo de estancarse. Aumentar la tasa de mutación en estos momentos introduce nuevo material genético, ayudando a escapar de óptimos locales. Cuando la diversidad es alta, reducir la mutación permite una explotación más enfocada de las buenas soluciones. Este control adaptativo equilibra la exploración y la explotación de manera dinámica, mejorando la estabilidad de la convergencia.
123456789101112131415161718192021222324import matplotlib.pyplot as plt # Simulate parameter and fitness changes for illustration generations = np.arange(1, 51) mutation_rates = np.linspace(0.2, 0.01, 50) + 0.02 * np.random.randn(50) avg_fitness = np.linspace(10, 90, 50) + 5 * np.random.randn(50) plt.figure(figsize=(10, 5)) plt.subplot(1, 2, 1) plt.plot(generations, mutation_rates, label="Mutation Rate") plt.xlabel("Generation") plt.ylabel("Mutation Rate") plt.title("Adaptive Mutation Rate Over Time") plt.legend() plt.subplot(1, 2, 2) plt.plot(generations, avg_fitness, color="green", label="Average Fitness") plt.xlabel("Generation") plt.ylabel("Average Fitness") plt.title("Population Fitness Over Time") plt.legend() plt.tight_layout() plt.show()
Monitoreo y Convergencia
Para lograr una convergencia y un rendimiento fiables en los algoritmos genéticos:
- Comenzar con rangos de parámetros provenientes de la literatura o experimentos previos;
- Utilizar parámetros estáticos para tareas simples, pero preferir la ajuste adaptativo para problemas complejos;
- Monitorear métricas como la diversidad poblacional, la mejor y la aptitud promedio;
- Ajustar los parámetros dinámicamente para mantener el equilibrio entre exploración y explotación.
¡Gracias por tus comentarios!
Pregunte a AI
Pregunte a AI
Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla
Awesome!
Completion rate improved to 6.25
Ajuste de Parámetros y Convergencia
Desliza para mostrar el menú
Ajuste de parámetros en algoritmos genéticos se refiere a la selección y modificación de valores clave como la tasa de mutación, la probabilidad de cruce y el tamaño de la población para controlar el comportamiento del algoritmo y mejorar la convergencia.
Ajuste de parámetros estático vs. dinámico
Existen dos enfoques principales para controlar los parámetros en algoritmos genéticos:
- Ajuste de parámetros estático: los parámetros como la tasa de mutación, la probabilidad de cruce y el tamaño de la población se fijan antes de iniciar el algoritmo y permanecen constantes durante la ejecución;
- Ajuste de parámetros dinámico (adaptativo): los parámetros se ajustan automáticamente en función de la retroalimentación de la población o el progreso del algoritmo. El ajuste adaptativo ayuda a mantener la diversidad y evitar la convergencia prematura.
El ajuste estático es sencillo pero puede ser subóptimo cuando la configuración óptima varía con el tiempo.
El ajuste dinámico proporciona flexibilidad, mejorando tanto la velocidad de convergencia como la robustez.
1234567891011121314151617181920212223242526272829import numpy as np def adaptive_mutation_rate(population, min_rate=0.01, max_rate=0.2): """ Adjusts mutation rate based on population diversity. Diversity is measured as the average Hamming distance between individuals. """ def hamming_distance(ind1, ind2): return sum(a != b for a, b in zip(ind1, ind2)) n = len(population) if n < 2: return min_rate # No diversity in a single-individual population # Compute average Hamming distance distances = [] for i in range(n): for j in range(i + 1, n): distances.append(hamming_distance(population[i], population[j])) avg_distance = np.mean(distances) max_distance = len(population[0]) # Normalize diversity diversity = avg_distance / max_distance if max_distance else 0 # Inverse relationship: lower diversity -> higher mutation mutation_rate = max_rate - (max_rate - min_rate) * diversity return np.clip(mutation_rate, min_rate, max_rate)
Cuando la diversidad de la población disminuye, los individuos se vuelven demasiado similares y el algoritmo corre el riesgo de estancarse. Aumentar la tasa de mutación en estos momentos introduce nuevo material genético, ayudando a escapar de óptimos locales. Cuando la diversidad es alta, reducir la mutación permite una explotación más enfocada de las buenas soluciones. Este control adaptativo equilibra la exploración y la explotación de manera dinámica, mejorando la estabilidad de la convergencia.
123456789101112131415161718192021222324import matplotlib.pyplot as plt # Simulate parameter and fitness changes for illustration generations = np.arange(1, 51) mutation_rates = np.linspace(0.2, 0.01, 50) + 0.02 * np.random.randn(50) avg_fitness = np.linspace(10, 90, 50) + 5 * np.random.randn(50) plt.figure(figsize=(10, 5)) plt.subplot(1, 2, 1) plt.plot(generations, mutation_rates, label="Mutation Rate") plt.xlabel("Generation") plt.ylabel("Mutation Rate") plt.title("Adaptive Mutation Rate Over Time") plt.legend() plt.subplot(1, 2, 2) plt.plot(generations, avg_fitness, color="green", label="Average Fitness") plt.xlabel("Generation") plt.ylabel("Average Fitness") plt.title("Population Fitness Over Time") plt.legend() plt.tight_layout() plt.show()
Monitoreo y Convergencia
Para lograr una convergencia y un rendimiento fiables en los algoritmos genéticos:
- Comenzar con rangos de parámetros provenientes de la literatura o experimentos previos;
- Utilizar parámetros estáticos para tareas simples, pero preferir la ajuste adaptativo para problemas complejos;
- Monitorear métricas como la diversidad poblacional, la mejor y la aptitud promedio;
- Ajustar los parámetros dinámicamente para mantener el equilibrio entre exploración y explotación.
¡Gracias por tus comentarios!