Jido.Evolve

Hex.pmHex DocsCILicenseWebsiteEcosystemDiscord

Evolutionary algorithms for Elixir.

Jido.Evolve.evolve/1 is the canonical public API for running stream-based evolutionary search with pluggable fitness, mutation, selection, and crossover strategies.

Install

def deps do
  [
    {:jido_evolve, "~> 0.2.0"}
  ]
end

Installation via Igniter

mix igniter.install jido_evolve

Quick Start

defmodule MyFitness do
  use Jido.Evolve.Fitness

  def evaluate(entity, _ctx), do: {:ok, String.length(entity)}
end

stream =
  Jido.Evolve.evolve(
    initial_population: ["random", "strings", "here"],
    fitness: MyFitness
  )

final_state = Enum.reduce(stream, fn state, _acc -> state end)
IO.puts("Best: #{final_state.best_entity} (#{final_state.best_score})")

API

Jido.Evolve.evolve/1

Required options:

Optional options:

Returns a lazy Stream of Jido.Evolve.State values (one per generation).

Configure

config =
  Jido.Evolve.Config.new!(
    population_size: 100,
    generations: 500,
    mutation_rate: 0.1,
    crossover_rate: 0.7,
    elitism_rate: 0.05,
    selection_strategy: Jido.Evolve.Selection.Tournament,
    mutation_strategy: Jido.Evolve.Mutation.Text,
    crossover_strategy: Jido.Evolve.Crossover.String,
    random_seed: 1234,
    max_concurrency: System.schedulers_online()
  )

Pass config into evolve/1:

Jido.Evolve.evolve(
  initial_population: ["a", "bb", "ccc"],
  fitness: MyFitness,
  config: config
)

Extension Points

Quality

mix quality
mix test
mix docs

v0.2.0 Migration Notes (Breaking)

Docs and Guides