Skip to content

0010-IO/gealts

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

gealts

Gealts is a very simple implementation of a genetic algorithm for solving math equality problems. Gealts is based on this work by Denny Hermawanto. I'm planning to extend it for more general application purposes.

install
defp deps do
  [{:gealts, "~> 0.0.1"}]
end
basic usage

Start gealts first. A configuration map must be provided (please see "h Gealts.start" for options.)
We'll try to solve a + b + c = 10 here.

iex(1)> Gealts.start(%{max_val: 10, 
                       genes: 3, 
                       chromes: 5, 
                       eval_fn: (fn [a, b, c] -> :erlang.abs((a + b + c) - 10) end)})
{:ok, #PID<0.87.0>}

View our initial population

iex(2)> Gealts.population
[%Gealts.Chromosome{evaluation: 0, fitness: 0, probability: 0,
  values: [8, 9, 3]},
 %Gealts.Chromosome{evaluation: 0, fitness: 0, probability: 0,
  values: [3, 6, 1]},
 %Gealts.Chromosome{evaluation: 0, fitness: 0, probability: 0,
  values: [4, 5, 6]},
 %Gealts.Chromosome{evaluation: 0, fitness: 0, probability: 0,
  values: [0, 0, 8]},
 %Gealts.Chromosome{evaluation: 0, fitness: 0, probability: 0,
  values: [5, 5, 1]}]

Perform 200 iterations, modifying the population in the process.

iex(3)> Gealts.iterate(200)
:ok

View population after 200 iterations.

iex(4)> Gealts.population
[%Gealts.Chromosome{evaluation: 0, fitness: 1.0,
  probability: 0.35593220338983056, values: [2, 5, 3]},
 %Gealts.Chromosome{evaluation: 0, fitness: 1.0,
  probability: 0.35593220338983056, values: [2, 5, 3]},
 %Gealts.Chromosome{evaluation: 2, fitness: 0.3333333333333333,
  probability: 0.11864406779661017, values: [0, 5, 3]},
 %Gealts.Chromosome{evaluation: 1, fitness: 0.5,
  probability: 0.35593220338983056, values: [1, 5, 3]},
 %Gealts.Chromosome{evaluation: 0, fitness: 1.0,
  probability: 0.35593220338983056, values: [2, 5, 3]}]

Best chromosome.

iex(5)> Gealts.best
%Gealts.Chromosome{evaluation: 0, fitness: 1.0,
 probability: 0.35593220338983056, values: [2, 5, 3]}

Possible solution to a + b + c = 10 is 2 + 5 + 3 = 10

See source as well as repl for documentation.

Releases

No releases published

Packages

No packages published

Languages