Disciplines · Compliance

Optimizer Card — nash-genetic v1.0.0

with shared GA primitives in libs/nous/agreement-search/src/ga-operators.ts.

9sections3 minread

On this page

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 2026-04-25
baseline (release-gate floor)
Regret vs oracle bounded by lcb mode under baseline-benchmark-gate 2026-04-25
preference uncertainty
Specification-gaming resistance spec-gaming-audit.ts audits every fairness-suite 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