ahmedfgad / GeneticAlgorithmPython

Source code of PyGAD, a Python 3 library for building the genetic algorithm and training machine learning algorithms (Keras & PyTorch).
https://pygad.readthedocs.io
BSD 3-Clause "New" or "Revised" License
1.89k stars 464 forks source link

`initial_population` not effectively used/retained for multiobjective problems? #279

Open kaurao opened 9 months ago

kaurao commented 9 months ago

Hi,

Thanks for PyGAD, it's a great resource. I am trying to use it for an multiobjective optimization task. I have a good idea for what good solutions could be so I am providing them via the initial_population argument. However, some of those solutions are bot being used, I think.

My set up is as follows.

ga_instance = pygad.GA(num_genes=68,
                       sol_per_pop=100,
                       initial_population=initial_population,
                       num_generations=100,
                       num_parents_mating=np.round(sol_per_pop/2).astype(int),
                       parent_selection_type=parent_selection_type,
                       gene_space={'low': 0, 'high': 1},
                       crossover_type="uniform",
                       mutation_type=None,
                       mutation_num_genes=[5, 1],
                       keep_elitism=10,
                       fitness_func=fitness_func,
                       on_generation=on_generation)

The image shows the final front 0 as blue dots and the red cross as one of the initial solutions that I provided whiuch apparently "disappeared".

image

I will appreciate any tips on how to set this up properly using PyGAD, thanks!

kaurao commented 9 months ago

My guess is the difference is coming from parent_selection_type="tournament_nsga2" (the details and the figure above) versus parent_selection_type="nsga2" which seems to work as expected (see the figure below).

image

ahmedfgad commented 9 months ago

tournament_nsga2 and nsga2 are different types of parent selectors for multi-objective optimization using NSGA-II.

tournament_nsga2 applies a tournament between the candidates and parents are selected randomly. This means the solution with the best fitness is not guaranteed to be selected. In contrast, nsga2 always select the best solutions as parents.

kaurao commented 9 months ago

Makes sense. Can you please provide referene(s) for tournament_nsga2 I have not come across it before. Thanks!

ahmedfgad commented 9 months ago

These are some resources that describes tournament selection for NSGA-II:

You can definitely have more resources.