Programación Genética con pygad en Python
La programación genética es un algoritmo de optimización inspirado en la evolución biológica. Este algoritmo funciona mediante la creación de una población de individuos, cada uno de los cuales representa una posible solución al problema que se desea resolver. Los individuos se van seleccionando de acuerdo a su fitness, que es una medida de su calidad. Los individuos con mayor fitness tienen más probabilidades de ser seleccionados para reproducirse y generar nuevos individuos.
PyGAD es una biblioteca de Python para la programación genética. Esta biblioteca proporciona una interfaz sencilla para implementar algoritmos genéticos.
Instalación
Para instalar pygad, podemos usar el gestor de paquetes pip:
pip install pygad
Ejemplos básicos
Para empezar, vamos a ver un ejemplo básico de un algoritmo genético con pygad. Este ejemplo busca encontrar el mínimo de la función f(x) = x^2.
import pygad
# Definimos la función a optimizar
def f(x):
return x**2
# Definimos los parámetros del algoritmo genético
ga = pygad.GA(
pop_size=100,
mutation_rate=0.1,
crossover_rate=0.9,
selection_type="roulette",
max_iter=100,
)
# Ejecutamos el algoritmo genético
ga.run(f)
# Imprimimos el resultado
print(ga.best_solution)
Este código genera una población inicial de 100 individuos. Luego, el algoritmo genético itera durante 100 iteraciones. En cada iteración, el algoritmo selecciona individuos de la población para reproducirse. Los individuos que se reproducen generan nuevos individuos mediante mutación y cruce. Los nuevos individuos se agregan a la población.
Al final de las 100 iteraciones, el algoritmo genético ha encontrado una solución al problema. La solución se almacena en la variable ga.best_solution
.
Problemas más complejos
PyGAD también puede ser usado para resolver problemas más complejos. Por ejemplo, podemos usar pygad para entrenar redes neuronales.
El siguiente ejemplo muestra cómo usar pygad para entrenar una red neuronal para clasificar imágenes de perros y gatos.
import numpy as np
import matplotlib.pyplot as plt
import pygad
# Cargamos los datos
(x_train, y_train), (x_test, y_test) = \
tf.keras.datasets.mnist.load_data()
# Definimos la red neuronal
model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(input_shape=(28, 28)),
tf.keras.layers.Dense(128, activation="relu"),
tf.keras.layers.Dense(10, activation="softmax")
])
# Compilamos la red neuronal
model.compile(optimizer="adam", loss="sparse_categorical_crossentropy", metrics=["accuracy"])
# Definimos los parámetros del algoritmo genético
ga = pygad.GA(
pop_size=100,
mutation_rate=0.1,
crossover_rate=0.9,
selection_type="roulette",
max_iter=100,
)
# Definimos la función de fitness
def fitness(solution):
# Construimos la red neuronal con los pesos de la solución
model.set_weights(solution)
# Entrenamos la red neuronal
model.fit(x_train, y_train, epochs=10)
# Evaluamos la red neuronal en el conjunto de datos de prueba
score = model.evaluate(x_test, y_test, verbose=0)
return score[1]
# Ejecutamos el algoritmo genético
ga.run(fitness)
# Imprimimos el resultado
print(ga.best_solution)
Este código genera una población inicial de 100 individuos. Cada individuo representa un conjunto de pesos para la red neuronal. La función de fitness evalúa la red neuronal con los pesos de cada individuo.
Al final de las 100 iteraciones, el algoritmo genético ha encontrado un conjunto de pesos que maximiza la precisión de la red neuronal en el conjunto de datos de prueba.
Conclusión
PyGAD es una biblioteca de Python potente y versátil para la programación genética. Esta biblioteca puede ser usada para resolver