selection changes

This commit is contained in:
Daniel Wilczak
2020-10-01 18:09:38 -04:00
parent 895c531676
commit 3c09b090b1
3 changed files with 56 additions and 7 deletions

View File

@ -23,7 +23,7 @@ class GA:
# Termination varibles
self.current_generation = 0
self.current_fitness = 0
self.generation_goal = 3
self.generation_goal = 1
self.fitness_goal = 3
# Mutation variables
self.mutation_rate = 0.03
@ -84,7 +84,7 @@ class GA:
# First get the fitness of the population
self.get_population_fitness(self.population.chromosomes)
# Selection - Triggers flags in the chromosome if its been selected
# self.selection_impl(self)
self.selection_impl(self)
# Crossover - Takes the flagged chromosomes and crosses there genetic
# makup to make new offsprings.
# self.crossover_impl(self)

View File

@ -53,4 +53,5 @@ class population:
print("Current population:")
for index in range(len(self.chromosomes)):
print(f'Chromosome - {index} {self.chromosomes[index]}', end = "")
print(f' / Fitness = {self.chromosomes[index].fitness}')
print(f' / Fitness = {self.chromosomes[index].fitness}', end = "")
print(f' / Selected = {self.chromosomes[index].selected}')

View File

@ -1,11 +1,59 @@
class selection_examples:
"""Selection defintion here"""
def tournament_selection():
""" """
"""Tournament selection involves running several "tournaments" among a
few individuals (or "chromosomes")chosen at random from the population.
The winner of each tournament (the one with the best fitness) is selected
for crossover.
Ex
Chromsome 1----1 wins ------
Chromsome 2---- - --1 wins----
- -
Chromsome 3----3 wins ------ -- 5 Wins --->Chromosome 5 becomes Parent
Chromsome 4---- -
-
Chromsome 5----5 wins ---------5 wins----
Chromsome 6----
^--Matchs--^
"""
def match_based_tournament(ga, matchs):
# User selects how many matchs they want to start with to create one parent.
# Select two random parents
selected_1_index = random.randint(0, len(ga.population.chromosomes) - 1)]
selected_2_index = random.randint(0, len(ga.population.chromosomes) - 1)]
if selected_1_index <= selected_2_index:
return parent1
else:
return parent2
def small_tournament(ga):
""" Small tournament is only one round of tournament. Beat the other
randomly selected chromosome and your are selected as a parent.
Chromosome 1----
- 1 wins -> Becomes selected for crossover.
Chromosome 2---- -
"""
# Select two random parents
selected_1_index = random.randint(0, len(ga.population.chromosomes) - 1)]
selected_2_index = random.randint(0, len(ga.population.chromosomes) - 1)]
if selected_1 <= fitness2:
return parent1
else:
return parent2
def population_based_tournament(ga):
"""The size of the population dictates how many matchs there will be. The
greater the size of the population the more matchs there is."""
pass
def roulette_selection():
def roulette(ga):
"""Roulette selection works based off of how strong the fitness is of the
chromosomes in the population. The stronger the fitness the higher the probability
that it will be selected. Using the example of a casino roulette wheel.