Majority Criterion

The majority criterion requires a rank choice voting system to select a candidate who recieves more than 50% of first place ranks.

Usage

The code block below illustrates how to create a Majority criterion object.

using RankChoiceVoting
criterion = Majority()
Majority()

Satisfies

We can see which systems are guaranteed to satisfy the majority criterion by calling satisfies with the majority criterion object.

satisfies(criterion)
4-element Vector{VotingSystem}:
 Bucklin()
 InstantRunOff()
 Minimax()
 Plurality()

Example

In this example, we will demonstrate that the Borda count system can violate the majority criterion in some cases. The Borda count system simply scores a candidate as the inverse rank and selects the candidate with the highest score. Suppose 100 voters rank order four canidates denoted $C = \{o,p,s,t\}$ as follows:

ranks = [[:s,:t,:o,:p],[:t,:p,:o,:s],[:p,:t,:o,:s],[:o,:t,:p,:s]]
counts = [51,25,10,14]
rankings = Ranks(counts, ranks)
Ranks
┌────────┬──────────────────┐
│ Counts │ Ranks            │
├────────┼──────────────────┤
│ 51     │ [:s, :t, :o, :p] │
│ 25     │ [:t, :p, :o, :s] │
│ 10     │ [:p, :t, :o, :s] │
│ 14     │ [:o, :t, :p, :s] │
└────────┴──────────────────┘

The output above shows that canidate s recieved 51%. According to the majority criterion, a rank choice voting system should select candidate s. However, we can see that the Borda count violates the majority criterion in this case.

system = Borda()
criterion = Majority()
satisfies(system, criterion, rankings)
false

Rather than selecting candidate s, the code block below shows that candidate t is selected instead.

evaluate_winner(system, rankings)
1-element Vector{Symbol}:
 :t

Note that the Borda count system can satisfy the majority criterion in some cases. For example, if t and s are switched in the second unique ranking above, the Borda count system will select the majority winner:

ranks = [[:s,:t,:o,:p],[:s,:p,:o,:t],[:p,:t,:o,:s],[:o,:t,:p,:s]]
counts = [51,25,10,14]
rankings = Ranks(counts, ranks)
satisfies(system, criterion, rankings)
true