reinsertion.ex (850B)
1 defmodule Toolbox.Reinsertion do 2 def pure(_parents, offsprings, _leftover, _opts \\ []), do: offsprings 3 4 def elitist(parents, offsprings, leftover, opts \\ []) do 5 selected = Enum.flat_map(parents, fn {p1, p2} -> [p1, p2] end) 6 old = selected ++ leftover 7 survival_rate = Keyword.get(opts, :survival_rate, 0.2) 8 n = floor(length(old) * survival_rate) 9 10 survivors = 11 old 12 |> Enum.sort_by(& &1.fitness, :desc) 13 |> Enum.take(n) 14 15 offsprings ++ survivors 16 end 17 18 def uniform(parents, offsprings, leftover, opts \\ []) do 19 selected = Enum.flat_map(parents, fn {p1, p2} -> [p1, p2] end) 20 old = selected ++ leftover 21 survival_rate = Keyword.get(opts, :survival_rate, 0.2) 22 n = floor(length(old) * survival_rate) 23 24 survivors = 25 old 26 |> Enum.take_random(n) 27 28 offsprings ++ survivors 29 end 30 end