Crossing Over More Than Two Parents
Learn how to modify algorithms to select more than two parents for crossover.
We'll cover the following...
More than two parents crossover implementation
Some algorithms require us to select more than two parents for crossover. All of the algorithms presented in the previous lessons can be implemented on multiple parents.
Here’s an example of single-point crossover on multiple parents:
Press + to interact
def single_point_crossover([]), do:raise "You must have at least one parent!"def single_point_crossover([p1 | []]), do: p1def single_point_crossover(parents) docrossover_point = :rand.uniform(hd(parents).size)parents|> Enum.chunk_every(2, 1, [hd(parents)])|> Enum.map(&(List.to_tuple(&1)))|> Enum.reduce([],fn {p1, p2}, chd ->{front, _} = Enum.split(p1.genes, crossover_point){_, back} = Enum.split(p2.genes, crossover_point)c = %Chromosome{genes: front ++ back, size: length(p1)}[c | chd]end)end
Let us start by examining ...
Access this course and 1400+ top-rated courses and projects.