# `Jido.Evolve`
[🔗](https://github.com/agentjido/jido_evolve/blob/v1.0.0/lib/jido_evolve.ex#L1)

Jido.Evolve is a generic evolutionary algorithm framework for Elixir.

The canonical public API is `evolve/1`.

# `evolve`

```elixir
@spec evolve(keyword() | map()) :: Enumerable.t()
```

Run an evolutionary search over a population.

## Required options

- `:initial_population` - List of entities to evolve.
- `:fitness` - Module implementing `evaluate/2`.

## Optional options

- `:config` - `%Jido.Evolve.Config{}` or config options map/keyword.
- `:context` - Context map passed to `fitness.evaluate/2`.
- `:mutation` - Mutation strategy module override.
- `:selection` - Selection strategy module override.
- `:crossover` - Crossover strategy module override.

## Examples

    defmodule MyFitness do
      use Jido.Evolve.Fitness

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

    Jido.Evolve.evolve(
      initial_population: ["a", "abc", "ab"],
      fitness: MyFitness
    )
    |> Enum.to_list()

# `version`

```elixir
@spec version() :: String.t()
```

Get version information.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
