Bucklin Transferable Vote (BTV)

PRELIMINARY.

The Bucklin Transferable Vote is a multiwinner voting system invented by Jameson Quinn and Louis G. "Ted" Stern in 2011. This page is WDS trying to explain what they did while also adding corrections & extensions.

Input parameters:

Ballots: Voters grade each candidate F-A (0-4). But actually, to be maximally general, we shall permit any integer score x with 0≤x≤M. Greater integer scores indicate better candidates (in that voter's view). In the algorithm below, BallotScore[v][c] will be the score provided (on her ballot) by voter v to candidate c.

Output: The set Winners[1..W].

Storage arrays used inside the computation:
BallotWeight[1..V] and CandVote[1..C]. Both are arrays of nonnegative rational numbers.

21-line Algorithm:

threshold ← M;
for(j=1 to V){ BallotWeight[j]←1; }
for(j=1 to C){ CandVote[j]←0; }
Quota ← V/(W+1);
Winners ← ∅;
while( cardinality(Winners) < W ){
    for(c=1 to C){
        CandVote[c] ← 0;
        if(c ∉ Winners){
            for(v=1 to V){
                if( BallotScore[v][c] ≥ threshold ){ CandVote[c] += BallotWeight[v]; } 
    }   }   }
    w ← the c with 1≤c≤C maximizing CandVote[c] (break ties randomly);
    if( CandVote[w] < Quota ){
        if(threshold > 0){  threshold -= 1;  }
    }else{  
        append w to Winners; 
        reweighter = max(0, (CandVote[w] - Quota) / CandVote[w]);
        for(v=1 to V){
            if( BallotScore[v][w] ≥ threshold){ BallotWeight[v] ×= reweighter; }
}   }   }

Observations/Remarks: In the single-winner case W=1, this voting system is the same as "Bucklin voting" which also is almost equivalent to "the candidate whose median score is greatest, wins" ("almost" in the sense that a certain tie-breaking scheme really is also included like in Balinski/Laraki "majority judgment"). If a voter refuses to score some candidate I presume that is handled by regarding it the same as that voter giving him the minimum possible score (zero)?

Alternative weighting method: The red lines in the algorithm could be replaced by

        X ← cardinality(Winners);
        for(v=1 to V){
            if( BallotScore[v][w] ≥ threshold){
                 Wcount[v] += 1;  BallotWeight[v] ← K/(K+Wcount[v]/X);
}   }   }   }

with an additional Wcount[1..V] array of nonnegative integers now introduced (with all entries 0 at algorithm start). Here ½≤K≤1 is a constant. This yields an inequivalent voting method, which might be better or worse depending on the election and the value of K.


Return to main page