-
Notifications
You must be signed in to change notification settings - Fork 2
Episode policy
Everything an episode is bounded and tuned by sits in one struct.
pub struct EpisodePolicy {
pub turn_budget: u32,
pub blind_round: bool,
pub dominance_cap: u32,
pub repetition_cap: u32,
pub quorum: QuorumPolicy,
pub weights: SalienceWeights,
}EpisodePolicy::DEFAULT = EpisodePolicy {
turn_budget: 12,
blind_round: true,
dominance_cap: 50,
repetition_cap: 3,
quorum: QuorumPolicy { threshold: 2, window: 30, require_grounded: true },
weights: SalienceWeights { recency: 5, importance: 30, relevance: 20, half_life: 20 },
};The budget is deliberately small. Conformity in a group of language models rises with interaction time, so a long episode buys correlated error rather than better judgement.
The salience weights follow a memory-stream retrieval score. Where that implementation's paper and its code disagree, these follow the code, and decay is applied by rank in sequence rather than by elapsed time, which is what that implementation did and what a transcript with no clock can support.
The quorum threshold is the single most consequential setting, and it has a bound on each side. Five members, 5000 rooms, everything else held constant:
| quorum | deadlocked | exhausted | decided % | correct % |
|---|---|---|---|---|
| 2 of 5, below a majority | 514 | 0 | 89.7 | 73.3 |
| 3 of 5, smallest majority | 0 | 29 | 99.4 | 82.1 |
| 5 of 5, unanimity | 0 | 2092 | 58.2 | 55.2 |
Below a majority, rooms deadlock. Five members can put two grounded supporters behind each of two options, and an episode where two options both carry is deadlocked by definition. No amount of further support resolves it, because both stay above the line. Requiring a majority makes that state unreachable and the deadlock rate falls to zero.
At unanimity, rooms cannot finish. Cross-inhibition removes a silenced advocate
from a topic's supporter set and does not put them back, so a single grounded
!object makes quorum unreachable for the rest of the episode. Two in five
episodes then spend the whole budget without deciding.
So: a majority of the desk, and never the whole of it.
let threshold = (agents / 2 + 1).min(agents - 1);A three-member desk is where this bites hardest, because a threshold of three there is unanimity. That case was found in a live room before it was measured.
A fixed budget makes a larger room look worse than a smaller one, and the effect is entirely an artifact of the cap. An eight-member room, 1500 rooms each:
| budget | decided % | correct % | turns actually spent |
|---|---|---|---|
| 12 | 65.3 | 63.1 | 10.36 |
| 16 | 89.6 | 82.9 | 10.96 |
| 20 | 94.5 | 86.3 | 11.24 |
| 24 | 96.4 | 87.7 | 11.42 |
A blind opening round costs one turn per member before anybody has seen anybody, a majority then has to assemble on one option, and the decision has to be recorded. Three turns per member covers that, and it is a cap rather than a cost: the eight-member room finishes in 11.4 of the 24 turns it is allowed. At five members, budgets of 15, 20 and 25 score 82.0, 82.1 and 82.1, so past the point where the room can finish, extra budget buys nothing.
Five members, 5000 rooms:
| opening round | decided % | correct % |
|---|---|---|
| blind | 99.4 | 82.1 |
| full visibility | 100.0 | 58.0 |
With full visibility from the first turn the room cascades onto whatever was
proposed first and lands level with a single agent. That is an information
cascade, and Visibility::Blind is what prevents it.
cargo run --release -p tinyhivemind-hive --example bench -- --sweepThe grid is swept relative to desk size rather than in absolute numbers, since both consequential settings scale with the room. Benchmarks has the rest.
tinyhivemind is GPL-3.0-only. Built by @senamakel.
Start here
The algebra
- Shared medium
- Desks and rosters
- Mentions
- Cross-desk referral
- Transcript projection
- Threads
- Recall
- Responder ladder
Hive mechanics
Working on it
Reference