feat(genome): uniform crossover for hypothesis genomes

Aggiunge `uniform_crossover` che eredita ogni campo da p1 o p2
con probabilita' 0.5, popola `parent_ids=[p1.id, p2.id]` e incrementa
la generazione. Deterministico dato lo stesso `random.Random` seed.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-09 19:51:44 +02:00
parent 80f4477f72
commit 93d0a9e848
2 changed files with 77 additions and 0 deletions
+33
View File
@@ -0,0 +1,33 @@
from __future__ import annotations
import random
from typing import Any
from .hypothesis import HypothesisAgentGenome, ModelTier
def uniform_crossover(
p1: HypothesisAgentGenome,
p2: HypothesisAgentGenome,
rng: random.Random,
) -> HypothesisAgentGenome:
"""Per ogni campo, eredita da p1 (prob 0.5) o p2."""
def pick(field: str) -> Any:
return getattr(p1 if rng.random() < 0.5 else p2, field)
tier_pick: ModelTier = pick("model_tier")
feature_pick: list[str] = pick("feature_access")
payload: dict[str, Any] = {
"system_prompt": pick("system_prompt"),
"feature_access": list(feature_pick),
"temperature": pick("temperature"),
"top_p": pick("top_p"),
"model_tier": tier_pick.value,
"lookback_window": pick("lookback_window"),
"cognitive_style": pick("cognitive_style"),
"parent_ids": [p1.id, p2.id],
"generation": max(p1.generation, p2.generation) + 1,
}
return HypothesisAgentGenome.from_dict(payload)