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

Core evolutionary algorithm engine.

Provides a stream-based interface for running evolutionary algorithms
with pluggable strategies for fitness, mutation, selection, and crossover.

# `evolution_step`

```elixir
@spec evolution_step(
  Jido.Evolve.State.t(),
  module(),
  module(),
  module(),
  module(),
  map()
) ::
  Jido.Evolve.State.t()
```

Perform a single evolution step.

# `evolve`

```elixir
@spec evolve([any()], Jido.Evolve.Config.t(), module()) :: Enumerable.t()
```

Run an evolutionary algorithm with the given configuration.

Returns a stream of `Jido.Evolve.State` structs representing each generation.
The stream is lazy, so generations are only computed when consumed.

## Options

- `:mutation` - Module implementing `Jido.Evolve.Mutation` (default from config)
- `:selection` - Module implementing `Jido.Evolve.Selection` (default from config)
- `:crossover` - Module implementing `Jido.Evolve.Crossover` (default from config)
- `:context` - Context map passed to fitness evaluation

---

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