Closed
Description
Here is my code:
def fitness_func(ga_instance, solution, solution_idx):
print(solution)
fitness = (solution**2)[0]
return fitness
fitness_function = fitness_func
gene_space = [np.arange(1,90)]
def on_start(ga_instance):
print(f"on_start({[i[0] for i in ga_instance.population]})")
def on_fitness(ga_instance, population_fitness):
print("on_fitness()")
def on_mutation(ga_instance, offspring_mutation):
print("on_mutation()")
def on_generation(ga_instance):
print(f"on_generation({[i[0] for i in ga_instance.population]})")
def on_stop(ga_instance, last_population_fitness):
print("on_stop()")
ga_instance = pygad.GA(num_generations=5,
num_parents_mating=3,
fitness_func=fitness_function,
sol_per_pop=5,
num_genes=1,
gene_type=[int],
gene_space=gene_space,
on_start=on_start,
on_fitness=on_fitness,
on_parents=on_parents,
on_crossover=on_crossover,
on_mutation=on_mutation,
on_generation=on_generation,
on_stop=on_stop)
ga_instance.run()
Output:
on_start([0, 0, 0, 0, 0])
[0]
[0]
[0]
[0]
[0]
on_fitness()
on_parents()
on_crossover()
on_mutation()
[43]
[29]
[76]
[1]
on_generation([0, 43, 29, 76, 1])
on_fitness()
on_parents()
on_crossover()
on_mutation()
[9]
[17]
[8]
[80]
on_generation([76, 9, 17, 8, 80])
on_fitness()
on_parents()
on_crossover()
on_mutation()
[31]
[12]
[22]
[49]
on_generation([80, 31, 12, 22, 49])
on_fitness()
on_parents()
on_crossover()
on_mutation()
[89]
[72]
[73]
[63]
on_generation([80, 89, 72, 73, 63])
on_fitness()
on_parents()
on_crossover()
on_mutation()
[17]
[54]
[75]
[71]
on_generation([89, 17, 54, 75, 71])
on_stop()
From the doc:
It defaults to None which means no initial population is specified by the user. In this case, PyGAD creates an initial population using the sol_per_pop and num_genes parameters. An exception is raised if the initial_population is None while any of the 2 parameters (sol_per_pop or num_genes) is also None. Introduced in PyGAD 2.0.0 and higher.
Since the initial population is going to enter fitness in 0th iteration, it should respect all of: gene_space
, gene_type
, init_range_low
, and init_range_high
.