0% encontró este documento útil (0 votos)
48 vistas4 páginas

Algoritmo Genético para Evolucionar Palabras

Cargado por

diegob6.14.2003
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
48 vistas4 páginas

Algoritmo Genético para Evolucionar Palabras

Cargado por

diegob6.14.2003
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

Laboratorio 12

Algoritmos Genéticos Aplicados a IA: Evolucionar una palabra objetivo

Diseñar e implementar un algoritmo genético en Python para aproximar una palabra objetivo,
demostrando cómo los principios de selección, cruza y mutación pueden aplicarse a problemas
de optimización en inteligencia artificial. Debe escribir un programa que evolucione
aleatoriamente una población de cadenas de texto hasta que una de ellas coincida con una
palabra objetivo. El algoritmo usará:

 Población inicial: Una lista de cadenas aleatorias.

 Función de aptitud: El número de caracteres correctos (en la posición correcta)


comparados con la palabra objetivo.

 Selección: Método de ruleta basado en la aptitud.

 Cruza: Combinar dos cadenas para generar nuevas.

 Mutación: Cambiar caracteres aleatoriamente con una probabilidad baja.

Código Base

import random

# Parámetros del algoritmo

TARGET = "INTELIGENCIA" # Palabra objetivo

POPULATION_SIZE = 100 # Tamaño de la población

MUTATION_RATE = 0.1 # Probabilidad de mutación

GENERATIONS = 1000 # Número máximo de generaciones

# Generar una cadena aleatoria

def random_string(length):

return ''.join([Link]("ABCDEFGHIJKLMNOPQRSTUVWXYZ ") for _ in range(length))

# Función de aptitud: cuenta caracteres correctos en posición correcta

def fitness(individual):

return sum(1 for i, char in enumerate(individual) if char == TARGET[i])


# Selección por ruleta

def roulette_selection(population, fitnesses):

total_fitness = sum(fitnesses)

pick = [Link](0, total_fitness)

current = 0

for individual, fit in zip(population, fitnesses):

current += fit

if current > pick:

return individual

# Cruza entre dos padres

def crossover(parent1, parent2):

point = [Link](0, len(TARGET) - 1)

child1 = parent1[:point] + parent2[point:]

child2 = parent2[:point] + parent1[point:]

return child1, child2

# Mutación de un individuo

def mutate(individual):

if [Link]() < MUTATION_RATE:

idx = [Link](0, len(individual) - 1)

new_char = [Link]("ABCDEFGHIJKLMNOPQRSTUVWXYZ ")

individual = individual[:idx] + new_char + individual[idx+1:]

return individual

# Algoritmo genético

def genetic_algorithm():

population = [random_string(len(TARGET)) for _ in range(POPULATION_SIZE)]

for generation in range(GENERATIONS):

fitnesses = [fitness(ind) for ind in population]


# Verificar si se encontró la solución

if TARGET in population:

print(f"Solución encontrada en generación {generation}")

return population[[Link](TARGET)]

# Crear la nueva generación

new_population = []

while len(new_population) < POPULATION_SIZE:

parent1 = roulette_selection(population, fitnesses)

parent2 = roulette_selection(population, fitnesses)

child1, child2 = crossover(parent1, parent2)

new_population.append(mutate(child1))

if len(new_population) < POPULATION_SIZE:

new_population.append(mutate(child2))

population = new_population

print("No se encontró solución dentro del límite de generaciones.")

return None

# Ejecutar el algoritmo

best_solution = genetic_algorithm()

if best_solution:

print("Mejor solución:", best_solution)

else:

print("No se encontró una solución.")


Mejora Visualización:

 Mostrar gráficamente cómo mejora la aptitud promedio o máxima en cada generación.

También podría gustarte