---
artifact_kind: optimizer-card
artifact_name: nash-genetic
version: 1.0.0
owner: Nous · agreement-search team
last_reviewed: 2026-04-25
next_review: 2026-07-25
optimizer_kind: genetic
related_phase_179_tasks: [179.4.2.1]
---

# Optimizer Card — nash-genetic v1.0.0

## 1. Identity

- **Optimizer name:** nash-genetic
- **Algorithm family:** Nash-product genetic search.
- **Implementation source:** `libs/nous/agreement-search/src/nash-genetic.ts`
  with shared GA primitives in `libs/nous/agreement-search/src/ga-operators.ts`.
- **Intended use:** baseline single-survivor candidate selection where the
  parties have agreed Nash optimality is the decision rule. Reference baseline
  against Mediator.ai's public architecture; the kernel preserves that baseline
  and adds uncertainty-aware fitness and formal clause validation.

## 2. Scoring rule

- **Utility aggregation:** Nash product Π_i max(0, u_i − BATNA_i).
- **Fairness metrics reported:** Nash product as primary; Concordia's
  fairness-metric module (`@nous/preference-inference/fairness-metrics.ts`)
  attaches the rest to the run summary.
- **Handling of hard constraints:** §179.3.3.2 hard constraints are filtered by
  `filterCandidates` BEFORE scoring; only soft preferences enter the fitness
  function. A hard-constraint violation in any child kills that child
  immediately.
- **Handling of uncertainty:** four selection modes —
  `posterior_mean | lcb | ucb | thompson` — drawn from the preference-inference
  posterior. `lcb` (lower-confidence bound) is the default for legal/restorative
  use-case classes; `posterior_mean` is the Mediator.ai-baseline mode.

## 3. Inputs

- **Candidate space:** parameterized by the §179.4.1.3 sandboxed clause mutator
  DSL. Default enabled mutators are `DEFAULT_ENABLED_MUTATORS` (numeric
  perturbation, deadline shift, proportional split, installment schedule, equity
  vesting, royalty waterfall, scope narrowing, escalation ladder, audit right,
  reversible trial period).
- **Initial population / seeds:** drawn from §179.4.1.1 sources via
  `decomposeProposals` — party proposals, mediator templates, domain playbooks,
  precedent agreements, policy constraints, brainstormed bundles.
- **Time / iteration budget:** generation budget + optional wall-clock cap
  - convergence-patience early stop. All caller-supplied; no defaults hard-coded
    above the kernel.
- **Randomness:** seeded `mulberry32` PRNG. Deterministic given the seed.

## 4. Outputs

- **Accepted candidate contract:** `AgreementCandidate` (from
  `@concordia/contracts`). Survivor is the highest-Nash-product candidate under
  the configured selection mode.
- **Pareto-frontier diagnostics:** Nash GA does not maintain a frontier; for
  that, route to the NSGA-II or MAP-Elites cards.
- **Uncertainty propagation:** survivor record carries the per-party posterior
  mean / std-error / credible interval / comparison count that drove the
  fitness, plus the selection mode used.

## 5. Evaluation

| Metric                          | Value                                | Evaluator card                                                      | Date       |
| ------------------------------- | ------------------------------------ | ------------------------------------------------------------------- | ---------- |
| Pareto-front coverage           | n/a — single-survivor optimizer      | n/a                                                                 | 2026-04-25 |
| Diversity preservation          | not the goal here; route to NSGA-II  | n/a                                                                 | 2026-04-25 |
| Fairness — Nash product win     | ≥ 6 of 8 suites vs nash-genetic      | [baseline-benchmark-gate](../evaluators/baseline-benchmark-gate.md) | 2026-04-25 |
|                                 | baseline (release-gate floor)        |                                                                     |            |
| Regret vs oracle                | bounded by `lcb` mode under          | [baseline-benchmark-gate](../evaluators/baseline-benchmark-gate.md) | 2026-04-25 |
|                                 | preference uncertainty               |                                                                     |            |
| Specification-gaming resistance | `spec-gaming-audit.ts` audits every  | [fairness-suite](../evaluators/fairness-suite.md)                   | 2026-04-25 |
|                                 | survivor before it leaves the kernel |                                                                     |            |
| Runtime (typical)               | wall-clock budget caller-controlled; | n/a — deterministic synchronous kernel                              | 2026-04-25 |
|                                 | seconds for ~50-clause cases         |                                                                     |            |
| Cost per run                    | $0 (LLM-free) once preference fits   | n/a — orchestrator scoring-cost trace                               | 2026-04-25 |
|                                 | are cached                           |                                                                     |            |

## 6. Known limitations

- Single-survivor output collapses the choice architecture; mediators who want
  to show parties a frontier must route to NSGA-II or MAP-Elites.
- Mode collapse onto a local Nash optimum is possible if the population size is
  too small; convergence-patience early stop guards against wasted iterations
  rather than mode collapse.
- BATNA misspecification poisons the Nash product directly. The kernel inherits
  `batna-plausibility.ts` checks upstream and uses the BATNA posterior credible
  interval (not the point estimate) when the selection mode is `lcb`.

## 7. Guardrails

- **Candidate safety gate:** §179.4.1.5 `filterCandidates` runs on every child
  before scoring. Failures are recorded in `FilterDiagnostic` for audit.
- **Clause static validation:** §179.2.3.4 static validation is part of
  `filterCandidates`. Contradictory, unlawful, unenforceable, or unsafe clauses
  cannot enter the population.
- **Redline separation:** §179.3.3.2 hard constraints are filtered out; the
  optimizer never trades them off against soft preferences.
- **Coercive-choice audit:** before the survivor is presented, the candidate set
  passes through `coercive-choice-audit.ts`.

## 8. References

- `libs/nous/agreement-search/src/nash-genetic.ts`
- `libs/nous/agreement-search/src/ga-operators.ts`
- Mediator.ai, "Cooperative negotiation is a solvable problem" (the baseline
  this kernel reproduces and extends).
- `docs/research/bibliography.md` §nash-bargaining
