Skip to content

Genome

Base genome class and behavior descriptors.

Genome

Bases: ABC, Generic[T]

Abstract base class for evolvable genomes.

Implementations must define: - random(): Create a random genome - mutate(): Create a mutated copy - crossover(): Combine with another genome - to_phenotype(): Convert to evaluatable form - behavior(): Extract behavior descriptor for QD

Source code in src/rotalabs_redqueen/core/genome.py
class Genome(ABC, Generic[T]):
    """Abstract base class for evolvable genomes.

    Implementations must define:
    - random(): Create a random genome
    - mutate(): Create a mutated copy
    - crossover(): Combine with another genome
    - to_phenotype(): Convert to evaluatable form
    - behavior(): Extract behavior descriptor for QD
    """

    @classmethod
    @abstractmethod
    def random(cls, rng: np.random.Generator | None = None) -> T:
        """Create a random genome instance.

        Args:
            rng: Random number generator for reproducibility

        Returns:
            New random genome
        """
        pass

    @abstractmethod
    def mutate(self, rng: np.random.Generator | None = None) -> T:
        """Create a mutated copy of this genome.

        Args:
            rng: Random number generator for reproducibility

        Returns:
            New mutated genome (original unchanged)
        """
        pass

    @abstractmethod
    def crossover(self, other: T, rng: np.random.Generator | None = None) -> T:
        """Create offspring by combining with another genome.

        Args:
            other: Another genome to combine with
            rng: Random number generator for reproducibility

        Returns:
            New offspring genome
        """
        pass

    @abstractmethod
    def to_phenotype(self) -> str:
        """Convert genome to evaluatable phenotype.

        For LLM attacks, this produces the actual prompt text.

        Returns:
            String representation for evaluation
        """
        pass

    @abstractmethod
    def behavior(self) -> BehaviorDescriptor:
        """Extract behavior descriptor for quality-diversity.

        Returns:
            Behavior descriptor characterizing this genome
        """
        pass

    def distance(self, other: T) -> float:
        """Genetic distance to another genome.

        Default implementation uses behavior distance. Override for
        custom distance metrics.

        Args:
            other: Another genome

        Returns:
            Distance value (higher = more different)
        """
        return self.behavior().distance(other.behavior())

random(rng: np.random.Generator | None = None) -> T abstractmethod classmethod

Create a random genome instance.

Parameters:

Name Type Description Default
rng Generator | None

Random number generator for reproducibility

None

Returns:

Type Description
T

New random genome

Source code in src/rotalabs_redqueen/core/genome.py
@classmethod
@abstractmethod
def random(cls, rng: np.random.Generator | None = None) -> T:
    """Create a random genome instance.

    Args:
        rng: Random number generator for reproducibility

    Returns:
        New random genome
    """
    pass

mutate(rng: np.random.Generator | None = None) -> T abstractmethod

Create a mutated copy of this genome.

Parameters:

Name Type Description Default
rng Generator | None

Random number generator for reproducibility

None

Returns:

Type Description
T

New mutated genome (original unchanged)

Source code in src/rotalabs_redqueen/core/genome.py
@abstractmethod
def mutate(self, rng: np.random.Generator | None = None) -> T:
    """Create a mutated copy of this genome.

    Args:
        rng: Random number generator for reproducibility

    Returns:
        New mutated genome (original unchanged)
    """
    pass

crossover(other: T, rng: np.random.Generator | None = None) -> T abstractmethod

Create offspring by combining with another genome.

Parameters:

Name Type Description Default
other T

Another genome to combine with

required
rng Generator | None

Random number generator for reproducibility

None

Returns:

Type Description
T

New offspring genome

Source code in src/rotalabs_redqueen/core/genome.py
@abstractmethod
def crossover(self, other: T, rng: np.random.Generator | None = None) -> T:
    """Create offspring by combining with another genome.

    Args:
        other: Another genome to combine with
        rng: Random number generator for reproducibility

    Returns:
        New offspring genome
    """
    pass

to_phenotype() -> str abstractmethod

Convert genome to evaluatable phenotype.

For LLM attacks, this produces the actual prompt text.

Returns:

Type Description
str

String representation for evaluation

Source code in src/rotalabs_redqueen/core/genome.py
@abstractmethod
def to_phenotype(self) -> str:
    """Convert genome to evaluatable phenotype.

    For LLM attacks, this produces the actual prompt text.

    Returns:
        String representation for evaluation
    """
    pass

behavior() -> BehaviorDescriptor abstractmethod

Extract behavior descriptor for quality-diversity.

Returns:

Type Description
BehaviorDescriptor

Behavior descriptor characterizing this genome

Source code in src/rotalabs_redqueen/core/genome.py
@abstractmethod
def behavior(self) -> BehaviorDescriptor:
    """Extract behavior descriptor for quality-diversity.

    Returns:
        Behavior descriptor characterizing this genome
    """
    pass

distance(other: T) -> float

Genetic distance to another genome.

Default implementation uses behavior distance. Override for custom distance metrics.

Parameters:

Name Type Description Default
other T

Another genome

required

Returns:

Type Description
float

Distance value (higher = more different)

Source code in src/rotalabs_redqueen/core/genome.py
def distance(self, other: T) -> float:
    """Genetic distance to another genome.

    Default implementation uses behavior distance. Override for
    custom distance metrics.

    Args:
        other: Another genome

    Returns:
        Distance value (higher = more different)
    """
    return self.behavior().distance(other.behavior())

BehaviorDescriptor

Characterizes behavior for quality-diversity algorithms.

The behavior descriptor places an individual in a multi-dimensional behavior space, enabling MAP-Elites and novelty search.

Source code in src/rotalabs_redqueen/core/genome.py
@dataclass(frozen=True)
class BehaviorDescriptor:
    """Characterizes behavior for quality-diversity algorithms.

    The behavior descriptor places an individual in a multi-dimensional
    behavior space, enabling MAP-Elites and novelty search.
    """

    values: tuple[float, ...]

    def distance(self, other: BehaviorDescriptor) -> float:
        """Euclidean distance between behavior descriptors."""
        if len(self.values) != len(other.values):
            raise ValueError("Behavior descriptors must have same dimensions")
        return float(np.sqrt(sum((a - b) ** 2 for a, b in zip(self.values, other.values))))

    def __len__(self) -> int:
        return len(self.values)

    def __getitem__(self, idx: int) -> float:
        return self.values[idx]

distance(other: BehaviorDescriptor) -> float

Euclidean distance between behavior descriptors.

Source code in src/rotalabs_redqueen/core/genome.py
def distance(self, other: BehaviorDescriptor) -> float:
    """Euclidean distance between behavior descriptors."""
    if len(self.values) != len(other.values):
        raise ValueError("Behavior descriptors must have same dimensions")
    return float(np.sqrt(sum((a - b) ** 2 for a, b in zip(self.values, other.values))))