> ## Documentation Index
> Fetch the complete documentation index at: https://proto.evodesign.org/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Genetic Algorithm Optimizer

> Maintains a population of discrete sequences, generates offspring by crossover and mutation, scores them with constraints, and keeps the lowest-energy candidates.

<div class="page-hero">
  <img class="page-hero-banner" src="https://proto-bio.github.io/proto-assets/images/optimizer/genetic-algorithm/hero.png" alt="Genetic Algorithm Optimizer" />
</div>

<p class="entity-disclaimer">This optimizer is open source. Any third-party models, product names, or trademarks referenced are the property of their respective owners, and Proto is not affiliated with them.</p>

<hr class="entity-rule" />

<div class="tool-tab-bar entity-source-bar"><span class="tool-tab-wrap"><span class="tool-tab badge-source entity-source-tab"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="16 18 22 12 16 6" /><polyline points="8 6 2 12 8 18" /></svg> Source</span></span></div>

<a href="https://github.com/evo-design/proto-language/blob/d3b7822f74ea64747cc751a3b2ab1aa6b799ac47/proto_language/optimizer/genetic_algorithm_optimizer.py#L190" target="_blank" class="tab-panel source-panel entity-source-panel">
  <div class="source-info">
    <img noZoom src="https://github.com/evo-design.png?size=40" class="source-avatar" width="36" height="36" />

    <span class="source-path">evo-design/proto-language<span class="source-subpath">/proto\_language/optimizer/genetic\_algorithm\_optimizer.py</span></span>
  </div>

  <span class="panel-goto-btn source-goto-btn"><span><svg width="14" height="14" viewBox="0 0 24 24" fill="currentColor"><path d="M12 0C5.37 0 0 5.37 0 12c0 5.31 3.435 9.795 8.205 11.385.6.105.825-.255.825-.57 0-.285-.015-1.23-.015-2.235-3.015.555-3.795-.735-4.035-1.41-.135-.345-.72-1.41-1.23-1.695-.42-.225-1.02-.78-.015-.795.945-.015 1.62.87 1.845 1.23 1.08 1.815 2.805 1.305 3.495.99.105-.78.42-1.305.765-1.605-2.67-.3-5.46-1.335-5.46-5.925 0-1.305.465-2.385 1.23-3.225-.12-.3-.54-1.53.12-3.18 0 0 1.005-.315 3.3 1.23.96-.27 1.98-.405 3-.405s2.04.135 3 .405c2.295-1.56 3.3-1.23 3.3-1.23.66 1.65.24 2.88.12 3.18.765.84 1.23 1.905 1.23 3.225 0 4.605-2.805 5.625-5.475 5.925.435.375.81 1.095.81 2.22 0 1.605-.015 2.895-.015 3.3 0 .315.225.69.825.57A12.02 12.02 0 0024 12c0-6.63-5.37-12-12-12z" /></svg> View source</span></span>
</a>

<div class="entity-contributors"><span class="entity-contributors-label">Optimizer contributors</span><span class="entity-contributors-people"><a class="entity-contributor" href="https://github.com/brianhie" target="_blank" rel="noopener" title="brianhie: 8 commits"><img noZoom class="entity-contributor-avatar" src="https://avatars.githubusercontent.com/u/6365340?v=4&s=64" alt="" loading="lazy" /><span class="entity-contributor-login">brianhie</span></a></span></div>
Population-based genetic algorithm optimizer.

## API Reference

<div class="api-model-section api-model-static api-config-section">
  <div class="api-model-header"><span class="api-model-badge api-config-badge">Config</span><span class="api-model-name">GeneticAlgorithmOptimizerConfig</span><a href="https://github.com/evo-design/proto-language/blob/d3b7822f74ea64747cc751a3b2ab1aa6b799ac47/proto_language/optimizer/genetic_algorithm_optimizer.py#L32" target="_blank" class="func-table-btn func-source-btn api-model-source"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="16 18 22 12 16 6" /><polyline points="8 6 2 12 8 18" /></svg> Source</a></div>

  Configuration for a general genetic algorithm optimizer.

  <ParamField path="num_generations" type="integer" required>
    Number of genetic algorithm generations.
  </ParamField>

  <ParamField path="num_results" type="integer">
    Number of top-scoring candidates to retain as final results. Overrides program count.
  </ParamField>

  <ParamField path="population_size" type="integer" default="32">
    Number of candidates maintained in the population.
  </ParamField>

  <ParamField path="offspring_per_generation" type="integer">
    Number of children scored per generation. Defaults to population\_size.
  </ParamField>

  <ParamField path="elite_fraction" type="number" default="0.1">
    Fraction of the best parents copied into the next generation before selecting children.
  </ParamField>

  <ParamField path="crossover_rate" type="number" default="0.8">
    Probability that an offspring recombines two parents instead of copying one parent.
  </ParamField>

  <ParamField path="crossover_strategy" type="enum" default="single_point">
    Crossover operator used for equal-length parent sequences.

    Options: `single_point`, `two_point`, `uniform`
  </ParamField>

  <ParamField path="parent_selection" type="enum" default="tournament">
    Parent selection strategy.

    Options: `tournament`, `rank`, `roulette`
  </ParamField>

  <ParamField path="parent_pair_selection" type="enum" default="independent">
    Use independent parent draws or one shared tournament that returns the winner and runner-up.

    Options: `independent`, `shared_tournament`
  </ParamField>

  <ParamField path="tournament_size" type="integer" default="3">
    Number of candidates sampled for tournament parent selection.
  </ParamField>

  <ParamField path="tournament_win_probability" type="number" default="1.0">
    Probability of accepting the current best tournament candidate before considering the next.
  </ParamField>

  <ParamField path="require_distinct_parents" type="boolean" default="False">
    If true, resample parent pairs until they use different population indices.
  </ParamField>

  <ParamField path="offspring_pairing" type="enum" default="single">
    Single creates one child per parent pair; reciprocal creates two children with swapped parents.

    Options: `single`, `reciprocal`
  </ParamField>

  <ParamField path="replacement" type="enum" default="elitist">
    Elitist keeps the best parents and children; generational keeps elites plus top children.

    Options: `elitist`, `generational`
  </ParamField>

  <ParamField path="survivor_selection" type="enum" default="energy">
    Select survivors by scalar energy or NSGA-II Pareto rank over scoring constraints.

    Options: `energy`, `nsga2`
  </ParamField>

  <ParamField path="crossover_positions" type="object">
    Zero-based per-segment sequence positions eligible for crossover.
  </ParamField>

  <ParamField path="crossover_excluded_positions" type="object">
    Zero-based per-segment sequence positions ineligible for crossover.
  </ParamField>

  <ParamField path="crossover_allow_empty_region" type="boolean" default="False">
    If true, two-point crossover may select identical cut points and swap no residues.
  </ParamField>

  <ParamField path="preserve_parent_structure_after_crossover" type="boolean" default="False">
    Keep parent structures on crossed-over children so downstream generators can use them.
  </ParamField>

  <ParamField path="seed" type="integer">
    Random seed for reproducible optimization, generator, and constraint tool streams.
  </ParamField>

  <ParamField path="tracking_interval" type="integer" default="1">
    Save history and log progress every N steps. Step 0 and final step always saved.
  </ParamField>

  <ParamField path="track_proposals" type="boolean" default="False">
    Save granular per-proposal results (accept/reject) in history snapshots.
  </ParamField>

  <ParamField path="verbose" type="boolean" default="False">
    Emit per-step debug information about proposals, scores, and acceptance through the logger.
  </ParamField>
</div>

## Usage

```python python icon="python" theme={null}
>>> config = GeneticAlgorithmOptimizerConfig(num_generations=5, population_size=16)
>>> optimizer_config_key = config.parent_selection
>>> optimizer_config_key
'tournament'
```

## Metadata

| Property                 | Value                       |
| ------------------------ | --------------------------- |
| Key                      | `genetic-algorithm`         |
| Class                    | `GeneticAlgorithmOptimizer` |
| Targets Single Segment   | `False`                     |
| Uses GPU                 | `False`                     |
| Required Constraint Mode | `discrete`                  |
