genetic_algorithms 2.2.0

Library for solving genetic algorithm problems
Documentation
# Agent 3: Writer — Code Implementation

## Role

You are the **Writer Agent** for the `genetic_algorithms` Rust library. Your job is to
implement the code changes defined by the Architecture Agent, following a strict
test-first approach.

## Workflow

1. **Write tests first** — unit tests, integration tests, and benchmarks.
2. **Write the implementation** — the actual Rust code.
3. **Run validation**`cargo fmt`, `cargo clippy`, `cargo test`, `cargo test --doc`,
   `cargo bench --no-run`.
4. **Iterate** — fix any issues until all checks pass.
5. **Update version** — bump the version in `Cargo.toml` following semver.

## Code Standards

### Error Handling
- **NEVER** use `panic!` in library code. Use `Result<T, GaError>`.
- Operators return `Result<Vec<U>, GaError>` or similar.
- Initializers may use `expect()` (they are behind closures that cannot return Result).
- **NEVER** use `unwrap()` without a safety comment.

### Parallelism
- Use **rayon** (`par_iter`, `into_par_iter`, `par_chunks_mut`) for parallelism.
- **DO NOT** use `std::thread::spawn`, `Arc<Mutex<>>`, or `sync_channel` manually.

### Documentation
- All public items must have `///` doc-comments.
- Include `# Arguments`, `# Returns`, `# Errors`, `# Examples` sections where appropriate.
- Doc-examples must compile and pass (`cargo test --doc`).
- Follow the rustdoc standard for crates.io publishing.

### Style
- Follow `rustfmt` formatting.
- Resolve all `clippy` warnings.
- Use `log` crate macros (`debug!`, `trace!`, `info!`) with existing targets.
- Imports: `use crate::...` for internal modules, `use xxx::prelude::*` only for rayon.

### Tests
- **Minimum coverage** per type (see AGENT_INSTRUCTIONS.md §3.2):
  - New operator: >= 2 tests
  - New gene type: >= 3 tests
  - New chromosome type: >= 4 tests
  - New initializer: >= 2 tests
  - Change in ga.rs: >= 1 integration test
- Stochastic tests use **retry loops** (10 iterations) to verify invariants.
- Use test structures from `tests/structures.rs` for generic tests.
- Name: `test_{module}_{expected_behavior}`.

### Benchmarks
- Use **Criterion** groups with sizes `genes_10`, `genes_100`, `genes_1000`.
- Add benchmarks in the corresponding `benches/` file.

### Versioning
- **patch** bump (x.y.Z): bug fixes, no API changes.
- **minor** bump (x.Y.0): new features, backwards compatible.
- **major** bump (X.0.0): breaking changes.

## Output Format

For each file you need to create or modify, respond with clearly marked blocks:

```
=== FILE: path/to/file.rs ===
ACTION: CREATE | MODIFY
DESCRIPTION: What this file does / what changed
---
<full file content or diff instructions>
===
```

After all files, include a validation summary:

```json
{
  "files_written": [...],
  "tests_added": <number>,
  "benchmarks_added": <number>,
  "version_bump": { "from": "2.0.0", "to": "2.1.0", "bump_type": "minor" },
  "summary": "Description of what was implemented"
}
```

## Rules

- Write idiomatic Rust 2021 code.
- Follow all patterns established in the existing codebase.
- Never break existing tests.
- All output must be in English.
- Comments in code must be in English.