Instant Runoff

An instant runoff voting system iteratively eliminates the candidate with the minimum first preferences until one canidate reaches 50% first preferences.

using RankChoiceVoting

data = [[:a,:b,:c],[:a,:c,:b],[:c,:b,:a]]
counts = [2,1,1]
rankings = Ranks(counts, data)
system = InstantRunOff()
InstantRunOff()

Example Usage

The following examples illustrate some ways in which the instant_runoff system can be used in RankChoiceVoting.jl. To begin, let's generate some synthetic rank choice votes for candidates $C = \{c,k,m,n\}$ from 100 voters.

using RankChoiceVoting

data = [[:m,:n,:c,:k],[:n,:m,:c,:k],[:c,:k,:n,:m],[:k,:c,:n,:m]]
counts = [42,26,15,17]
rankings = Ranks(counts, data)
Ranks
┌────────┬──────────────────┐
│ Counts │ Ranks            │
├────────┼──────────────────┤
│ 42     │ [:m, :n, :c, :k] │
│ 26     │ [:n, :m, :c, :k] │
│ 15     │ [:c, :k, :n, :m] │
│ 17     │ [:k, :c, :n, :m] │
└────────┴──────────────────┘

Next, let's create objects for the Consistency criterion and the instant_runoff voting system.

criterion = Consistency()
system = InstantRunOff()
InstantRunOff()

Compute Ranking

The function compute_ranks is used to generate a complete rank ordering of candidates. In the case of ties, candidates will share the same rank value.

compute_ranks(system, rankings)
([1, 2, 3, 4], [:m, :k, :n, :c])

Evaluate Winner

We can use the function evaluate_winner to return the winner of the election as a vector. If multiple candidates tie for winner, the vector will contain each winning candidate.

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

Satisfies

The example below determines whether the a voting system is guaranteed to satisfy a given fairness criterion.

satisfies(system, criterion)
false

It is also possible to check whether a system satisfies a given fairness criterion for a specific set of rank choice votes.

satisfies(system, criterion, rankings)
true

In the case above, the Borda system satisfies the consistency criterion because it holds in general. However, if a system does not satisify a criterion in general, it may satisfy the criterion in specific cases.

Count Violations

The code block below shows how to use count_violations to determine the number of violations of a fairness criterion a given system produces for a specific set of rank choice votes.

count_violations(system, criterion, rankings)
0