election_title: "Equal ranks — five voters, and the two generalizations of IRV disagree"
scenario_description: |-
  Figure 3 of Théo Delemazure & Dominik Peters, "Generalizing Instant Runoff Voting to Allow Indifferences" (EC'24, arXiv:2404.11407) — the paper's opening worked example, and the smallest election in this repo on which the two ways of extending instant runoff to equal ranks pick different winners.
  Five voters, four candidates, individual ballots. Read as a weak order the profile is: Aida=Bram > Chloe > Dante; Aida=Bram=Dante > Chloe; Bram > Aida=Chloe > Dante; Chloe > Aida > Bram=Dante; Dante > Aida > Chloe > Bram.
  Approval-IRV gives one full point to EACH candidate in a ballot's top surviving class: Chloe is top on one ballot only, so she goes first; then Dante; then Aida beats Bram head-to-head. Aida wins. Split-IRV splits one point among a ballot's top choices instead, which costs Aida the two ballots she shares — she scores 1/2 + 1/3 and is eliminated FIRST — and Bram wins. Same five ballots, opposite answers, and the only difference is what a tie is worth.
  STAR elects Aida, agreeing with Approval-IRV and with the pairwise count (Aida is the Condorcet winner). That agreement is not an accident of the scores chosen: across 20,000 random strictly-decreasing 0-5 encodings of this weak order, STAR elects Aida in 92.9% and never elects Bram outright.
  The scores below are one reading of the paper's ordinal profile; the induced weak order is exactly the paper's Figure 3. For the Approval-IRV and Split-IRV counts run tools_adam/pref_voting_tabulation_engine/approval_irv_report.py.
paradoxes: [condorcet-winner]
voting_method: STAR
num_winners: 1
ballots: |-
  Aida,Bram,Chloe,Dante
  5,5,4,0    # Aida and Bram equal-first
  5,5,2,5    # a three-way equal-first, Chloe alone below
  3,5,3,0    # Bram alone on top, Aida and Chloe equal
  3,0,5,0    # Chloe alone on top, Bram and Dante equal-last
  4,0,2,5    # the one fully strict ballot
expected_winners: [Aida]

# file: equal_rank_five_voters.yaml
