es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo calcular la aptitud de la población usando PyGAD?

Me gustaría usar PyGAD para resolver el problema de asignación de trabajo y espero obtener como resultado no solo un cromosoma sino toda la población. Por ejemplo, [[1,1,0,0][0,0,1,1]] representa 4 slots, y 1 en el primer cromosoma significa que un tipo ha sido asignado a esos slots, y otros dos slots son asignados a otro tipo de acuerdo con el segundo cromosoma.

Siguiendo el tutorial en el sitio web de PyGAD (https://pygad.readthedocs.io), ¿estoy haciendo lo correcto al usar initial_population para generar la población? ¿Es correcto usar la función cal_pop_fitness()? Hice algunas pruebas y aun no tengo idea.

“`
import pygad
import numpy

sol_per_pop = 2
num_genes = 4
pop_size = (sol_per_pop,num_genes)

new_population = numpy.random.randint(low=0,high=2,size=pop_size)

num_generations = 100
num_parents_mating = 2

def fitness_func(solution,solution_idx):
fitness = ga_instance.cal_pop_fitness(new_population)
#hacer algo

ga_instance = pygad.GA(initial_population = new_population,
num_generations=num_generations,
num_parents_mating=num_parents_mating,
sol_per_pop=sol_per_pop,
num_genes=num_genes,
mutation_type=None,
fitness_func=fitness_func)

ga_instance.run()

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que estás en el camino correcto para utilizar PyGAD para resolver el problema de asignación de trabajos. initial_population se utiliza para generar la población inicial para el algoritmo genético, por lo que estás haciendo eso correctamente.

    Sin embargo, en tu fitness_func, debes utilizar la función cal_pop_fitness() para calcular la aptitud de cada solución en la población (es decir, para cada cromosoma), no solo para new_population. Puedes pasar el parámetro solutionpara calcular la aptitud de la solución actual en la población, así:

    def fitness_func(solution, solution_idx):
        fitness = pygad.tools.cal_pop_fitness(solution, ...)
        # hacer algo
    

    Además, necesitarás actualizar el cálculo de aptitud para tener en cuenta las asignaciones de trabajo codificadas en el cromosoma. Una vez que hayas calculado la aptitud para todas las soluciones en la población, puedes devolver el array de valores de aptitud.

    En general, tu código parece ser un buen comienzo, y solo necesitas hacer algunas modificaciones para utilizar correctamente PyGAD para resolver tu problema.

Comments are closed.