Evolution lab Intermediate 2 minute read Updated 2026-06-28 UTC

Fitness and novelty selection loop

A practical model-breeding loop that keeps champions, specialists, and diverse challengers by combining fitness scores with novelty records.

Research statusDerived from controlled-evolution source directives and quality-diversity theory pages Publication statePublished Reviewed byMichael Kappel Source reports4

Why novelty matters

A pure leaderboard tends to erase useful specialists. Model breeding works better when the population keeps different kinds of usefulness: the current champion, niche experts, low-cost helpers, and surprising challengers that may become stepping stones later.

The positive goal is quality plus useful diversity. That means the ecology should preserve enough variation to keep learning while still preferring models that prove practical value.

Selection recipe

pseudocode
PROCEDURE select_next_population(population, candidates, niches, capacity)
    evaluated <- []

    FOR candidate IN candidates
        fitness <- RUN_EVALUATION_SUITE(candidate)
        novelty <- MEASURE_NOVELTY(candidate, population)
        record <- FitnessVector(candidate.id, fitness, novelty)
        evaluated.ADD(record)
    END FOR

    champions <- BEST_PER_NICHE(evaluated, niches)
    specialists <- HIGH_VALUE_LOW_COST(evaluated)
    challengers <- MOST_NOVEL_ABOVE_MINIMUM_FITNESS(evaluated)

    next_population <- UNION(champions, specialists, challengers)
    next_population <- TRIM_TO_CAPACITY(next_population, capacity)

    IF next_population DOES_NOT_IMPROVE_OR_DIVERSIFY(population)
        RETURN NO_OP_WITH_ARCHIVED_EVIDENCE(population, evaluated)
    END IF

    RETURN next_population
END PROCEDURE

Fitness terms

TermPositive meaning
Task utilityThe descendant does useful work.
Human capability gainPeople learn, decide, review, or create better with the ecology.
Local privacyMore work can happen on controlled hardware.
EfficiencyThe same outcome costs less latency, memory, energy, or maintenance.
DiversityThe population covers more useful niches.
ReuseThe artifact can become a parent, adapter, or teaching example.

Multi-parent merge pattern

pseudocode
FUNCTION multi_parent_adapter_merge(parents, weights, target_rank)
    REQUIRE SUM(weights) == 1
    REQUIRE COMPATIBLE_BASE_FAMILY(parents)

    merged_delta <- ZERO_DELTA()
    FOR parent, weight IN ZIP(parents, weights)
        merged_delta <- merged_delta + weight * parent.adapter_delta
    END FOR

    compressed <- PROJECT_TO_RANK(merged_delta, target_rank)
    child <- CREATE_DESCENDANT(base: parents[0].base_model, adapter: compressed)
    child.evidence <- EVALUATE(child)
    RETURN child
END FUNCTION

Population dashboard fields

A useful dashboard should show: genome id, niche, parentage, operator, utility, novelty score, resource profile, lifecycle state, release packet, and retained reason.

pseudocode
VIEW PopulationDashboard
    COLUMNS genome_id, niche, lifecycle_state, utility, novelty, latency_ms, memory_mb, retained_reason
    FILTERS champion, specialist, challenger, archived, no_op
    ACTIONS inspect_genome, inspect_fitness_vector, compare_with_parent, build_release_packet
END VIEW

Source reports used for this guide

These reports are preserved verbatim in the site archive. The guide above is an editorial synthesis and may narrow, qualify, or reorganize claims from the source material.