...

/

Crossing Over More Than Two Parents

Crossing Over More Than Two Parents

Learn how to modify algorithms to select more than two parents for crossover.

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: p1
def single_point_crossover(parents) do
crossover_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.