genetic

genetic algorithm framework
git clone [email protected]:dracuxan/genetic.git
Log | Files | Refs | README

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