Skip to content

Zero Sum league: team_count 16 seats every entrant alone, so submitted policies are teammates and 12 of 16 seats are filler #44

Description

@arisklar6

League: league_6764202e-2ac1-4c98-a77e-cabc75582939 (Zero Sum)
Division: div_e6d3697f-8a5f-4cb4-87a8-1e0497132f84 (Competition)
Coworld: zero-sum:0.1.17 / cow_380d383e-952e-4f1d-8c99-2056841e587b

Ask

Please set, on the league above:

scheduler.team_count:           16 -> 8
scheduler.team_layout:          (unset) -> "blocks"
scheduler.insufficient_players: "filler_policy" -> "multiple_seats"

I'm the confirmed owner (viewer_is_owner: true on /v2/leagues/{id}/owners) but can't apply this myself: OPTIONS /v2/leagues/{id} and /v2/leagues/{id}/settings both return 405, allow: GET, and /divisions is the only writable sub-resource. That's the staff round-trip #34 is about.

Why

Zero Sum is 16 agents as 8 teams of 2, teams defined contiguously (team = slot div 2). The league runs team_n with team_count: 16, which gives each entrant exactly one seat. With 4 entrants that means 4 submitted seats and 12 filler — and because seats 0–3 are teams A and B, the submitted policies are seated as each other's teammates rather than as opponents. They share private team chat and can't fight.

Current round, seat by seat:

slot team policy filler
0 A relh-zero-sum:v6 no
1 A sivanlevy-zs-courier:v3 no
2 B ryanschiller-zero-sum-player-v1:v2 no
3 B zs-patient:v3 no
4–15 C–H zero-sum-arisklar:v1 ×12 yes

Measured over all 1,841 episode-requests in the division: a non-filler holds position 0 in 1,841/1,841, no non-filler has ever held more than one seat, and positions 4–15 are filler in every episode. For the league's first ~1,400 rounds there were only two entrants, at slots 0 and 1 — i.e. a single team — so the two real policies were partners against 14 filler bots, and that is what the ladder history was built on.

team_count: 16 also makes the intended end state unreachable: at 8 entrants it would still be 8 real seats and 8 filler.

Why these three values

Seats-per-entrant appears to be slots / team_count, and team_layout selects strided vs contiguous. Measured across the team_n leagues:

league team_count team_layout slots observed seating
Paintbot 4 (unset) 16 4 seats/entrant, strided: 0,4,8,12
Tribal Village 3 blocks 18 6 seats/entrant, contiguous: 0–5, 6–11, 12–17
Zero Sum 16 (unset) 16 1 seat/entrant

So team_count: 8 over 16 seats gives 2 seats per entrant, and team_layout: "blocks" makes them contiguous — {2k, 2k+1}, which is exactly one in-game team. Without blocks the default strided layout would hand an entrant slots k and k+8, landing in two different teams; with friendly fire always on and a finale that turns the last team against itself, that's the mis-seating from #33.

insufficient_players: "multiple_seats" is what makes filler recede as entrants arrive, reaching zero at 8. It's already the majority setting (25 of 50 leagues); Zero Sum is one of 6 still on filler_policy.

Worth noting blocks is suggested-fix #3 from #33 and appears to have shipped since — when I filed that issue it didn't exist, which is why we built the game-side adapter described in that thread. For this league, blocks looks like the cleaner route than running the adapter build.

One question I can't answer from outside

With multiple_seats and fewer than 8 entrants, an entrant will hold more than one team. effective_ladder_config exposes clone_score_aggregation (currently null) — what should it be so a policy holding multiple teams scores sensibly rather than double-counting?

Related: in the duos design discussed on #33, the platform averaging a policy's seat rewards meant we wrote the team total to both seats so mean(total, total) = total. The solo profile writes each seat its own score, so an entrant holding both seats of a team would score the mean of the pair rather than the team total. If that's the wrong shape for blocks seating, I'd rather know before the change than after.

Separately: num_episodes looks inert

scheduler.num_episodes is 32, but every one of the league's 1,841+ rounds has produced exactly one episode — 144/day at round_interval_minutes: 10. Confirmed by counting episode-requests across the division (1,841 requests / 1,841 rounds) and by per-round episode listings.

GET /v2/leagues/{id}/settings shows the effective scheduler carrying a separate episodes_per_round field at null, and defaults.episodes_per_round is also null. Does team_n read episodes_per_round rather than num_episodes? If so, could you set episodes_per_round to something in the 8–16 range? Per-episode score sd in this game is ~7.5, so one episode per round makes the ladder very noisy.

Refs: #33 (team_n seat geometry), #34 (owners can't change league settings).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions