Selection
The Elo ranking that sorts the population, run as two parallel ladders whose blend decides which organisms breed and which die.
Selection is the ranking that sorts the population: every verdict a judge casts is scored as an Elo game, and an organism’s rating is its standing. Two ladders run in parallel over the same population, one written by the owner’s arena and one by the public surface, and both breeding and culling rank by a weighted blend of the two.
The Elo update
A verdict is a game between two organisms of one track. The expected score for A against B is
1 / (1 + 10 ^ ((Rb - Ra) / 400)), A’s rating moves by K * (score - expected), and B’s moves by
the mirror of it. The score is 1 for a win and 0 for a loss. The formula admits a 0.5 draw and
nothing passes one: no verdict the lab records is a draw.
A “not this one” verdict is scored asymmetrically. The rejected organism takes a loss against the other side’s rating, and the other side’s rating, games and wins are all left untouched.
A game is also charged to the prompt gene behind each organism, on the gene’s own ladder and at a smaller K, with the same asymmetry: a “not this one” moves only the rejected organism’s gene. A game between two organisms sharing one gene, or with a gene missing on either side, is skipped for the gene ladder and still counts on the organism ladder. Genes carry the same six rating columns organisms do.
| Ladder | Subject | K |
|---|---|---|
| Arena | Organism | elo.k, currently 32 |
| Arena | Prompt gene | Half of elo.k |
| Public | Organism | By games played, below |
| Public | Prompt gene | 12 |
Both starting ratings are elo.start, currently 1200, which is also the column default. elo.k and
elo.start are configuration, held in lab.config.json.
K by games played
The public organism ladder uses a provisional K that falls as an organism accumulates public games.
| Public games played | K |
|---|---|
| Under 5 | 48 |
| 5 to 14 | 32 |
| 15 and over | 20 |
Each side of a public game is updated with its own K, computed from its own game count, in two
separate applications of the formula. The pair’s rating changes therefore do not sum to zero, and a
veteran is not moved by the size of a newcomer’s provisional swing. The arena’s K does not vary: it
is flat at elo.k for every organism at every game count.
The two ladders
The same rows carry both ladders in separate columns, and no verdict writes across.
| Arena ladder | Public ladder | |
|---|---|---|
| Columns | rating, games, wins | pub_rating, pub_games, pub_wins |
| Written by | The owner’s judging surface | The public vote surface |
Duel row judge | owner | public |
| Candidates | Every alive organism with no recorded error | Alive, no error, and proven to render |
An organism with no public games has never had pub_rating written, so the public side reads an
effective public rating instead: pub_rating once pub_games is above zero, and the arena
rating before that. The effective rating is the prior in every public Elo update and the sort key
in public pairing, so the public ladder starts from the owner’s ordering and diverges from there
rather than starting flat.
The seed reaches an organism that has never been judged on either ladder, because a newborn inherits
the mean of its parents’ arena ratings at birth rather than the starting rating. Only an organism
bred fresh, with no parents, begins at elo.start.
The blended rating
The blended rating, which the lab’s own code names fitness, is the single number it ranks by. It
is a weighted mean of the two ladders, each weighted by the games it actually played, with the public side discounted by
selection.publicVoteWeight, currently 0.6.
| Condition | Blended rating |
|---|---|
| No public games | The arena rating |
| No arena games | The public rating |
| Both | (rating * games + pub_rating * pub_games * w) / (games + pub_games * w) |
At the current weight a public game counts 0.6 of an arena game toward the mean. A separate count sums games from every judge, arena plus public, and that sum is what decides whether an organism has been judged at all: it gates culling and the birth backlog.
Four things read the blended rating:
- the parent tournament in breeding, which draws three candidates at random and keeps the highest
- the crowding order in death, combined with genome redundancy
- the track median that senescence measures against
- the default order of the gallery
Pair selection
Both surfaces build a pair the same way: draw one organism, then draw its opponent from the organisms nearest it on the relevant ladder.
| Arena | Public | |
|---|---|---|
| Candidates ordered by | games, then id | pub_games, then id |
| First organism | Drawn from the least-judged third, at least two rows | Coverage or resolution, below |
| Opponent pool | Sorted by absolute rating difference from the first | Sorted by absolute effective-rating difference |
| Near-clones | Dropped when anything distinct remains | Dropped when anything distinct remains |
| Opponent | Drawn from the nearest six | Drawn from the nearest six |
| Presentation | The two are ordered at random | The two are ordered at random |
The public draw splits between two intents, coverage and resolution. Provisional standing is six public games, and an organism below it is unread; coverage sends the first slot to one of the unread with probability 0.6, whenever any exists. Resolution otherwise takes a contender from the top quarter of the ladder, at least two rows. The unread set empties as votes accumulate, so the mix slides toward the top of the ladder as the pool settles. A public request may instead be dealt a canary, an unproven organism riding along to be rendered, in place of the coverage draw.
A public pair can be confined to one pool, in which case the candidate rows are filtered to a single phylum before either draw. Pools are a reading of ancestry, described under taxonomy.
Both rules follow from the shape of the update. The movement K * (score - expected) is largest
when the expected score sits near 0.5, which is where two ratings are close; against a distant
opponent the likely result moves both ratings by almost nothing, so the game spends a judgement and
buys no ordering. Drawing the least-judged organism first sends the game to the rating with the least
evidence behind it. The near-clone filter removes the remaining degenerate case: two organisms
within the clone distance carry nearly the same code, so the verdict separates nothing while still
moving both ratings. That threshold is the same one
diversity uses elsewhere.
Bound to
The source this page's claims were read against, named by symbol and pinned by the digest of the file it lives in.
| Symbol | Digest |
|---|---|
| applyVote | 2ee5143085a9 |
| cull | b72f4e12e72f |
| fitness | 193eb96a460a |
| lab.config.json | a095dd3b3dab |
| publicVote | f14fffef049d |
What links here
- Breeding sends readers here
- Crossing sends readers here
- Death sends readers here
- Diversity sends readers here
- Freezing and reseeding sends readers here
- Judging sends readers here
- Organisms sends readers here
- Prompt genes sends readers here
- The gallery sends readers here
- The Rorschach Lab sends readers here
Near this subject
These are the subjects this one is joined to in the field. Step out of this card and they are the wells around the one you are standing in.
- Crossing that page sends you here
- Breeding each sends you to the other
- Judging each sends you to the other
- Diversity each sends you to the other
- Death each sends you to the other
- Organisms each sends you to the other
- Prompt genes each sends you to the other
- Freezing and reseeding that page sends you here
- The gallery each sends you to the other
- The Rorschach Lab that page sends you here