Skip to content

timlabs/voting_systems

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 

Repository files navigation

voting_systems

Ruby gem implementing various voting systems.

Each voting system (e.g. borda) takes a set of preferences as input. Each preference is a ranking of alternatives. The output is the winning alternative(s).

Ties and omissions are allowed in the preferences. Omitted alternatives are considered least preferred.

All of the systems are deterministic. There is no random tie-breaking. If the result is a tie, all of the tied alternatives will be returned.

Systems

method name description
baldwin Baldwin method
borda Borda count
bucklin Bucklin voting
coombs Coombs' method
copeland Copeland's method
instant_runoff Instant-runoff voting
ranked_pairs Ranked pairs

Installation

gem install voting_systems

Usage

require 'voting_systems'

There are two input formats. The first looks like:

votes = '4:A>B>C
         5:B>C>A
         2:C=A>B'

This means 4 voters have the preference A>B>C, 5 voters have B>C>A, and 2 voters have C=A>B (meaning that C and A are equally preferred, and both are preferred to B).

The second looks like:

votes = [
  [4, ['A','B','C']],
  [5, ['B','C','A']],
  [2, [['C','A'],'B']],
]

Here, the alternatives need not be strings, but can be any object.

To find the winner(s) for a given system (e.g. borda):

winners = borda votes
=> ["B"]

Author

Tim Smith (timlabs.org)

About

Ruby gem implementing various voting systems.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages