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

Behaviour for selection strategies.

Selection determines which entities from the current population
should be chosen as parents for the next generation.

# `count`

```elixir
@type count() :: pos_integer()
```

# `entity`

```elixir
@type entity() :: term()
```

# `opts`

```elixir
@type opts() :: keyword()
```

# `population`

```elixir
@type population() :: [entity()]
```

# `scores`

```elixir
@type scores() :: %{required(entity()) =&gt; float()}
```

# `maintain_diversity`
*optional* 

```elixir
@callback maintain_diversity(population(), population(), opts()) :: population()
```

Maintain diversity in the selected population.

This optional callback can be implemented to ensure
the selected population maintains genetic diversity.

# `select`

```elixir
@callback select(population(), scores(), count(), opts()) :: population()
```

Select entities from the population for reproduction.

## Parameters

- `population` - The current population
- `scores` - Map of entity to fitness score
- `count` - Number of entities to select
- `opts` - Strategy-specific options

## Returns

A list of selected entities for reproduction.

## Examples

    def select(population, scores, count, opts) do
      # Tournament selection implementation
      Enum.take_random(population, count)
    end

---

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