Skip to content

Initial value taken from outside gene_space #203

Closed
@yasirroni

Description

@yasirroni

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    invalidThis doesn't seem right

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions