STV: Multiple-Seat Ranked-Choice Voting

STV (single transferrable vote), refers to a class of methods for filling multiple seats in one election. STV is sometimes called choice voting, ranked-choice voting, or preference voting. Voters rank their preferences, as with IRV (or AV), a form of STV for single-seat elections.

The primary advantage STV is that it empowers voting minorities of sufficient size to achieve representation. The required size depends on the number of seats to be filled and the threshold chosen.

One disadvantage of STV is that, unlike IRV, it's relatively difficult (though possible, depending on the specific method chosen) to count by hand; hence this program.

STV: the Program

STV.pm is a relatively simple Perl module for counting votes in elections using one of several STV method. This counting program can be employed in a more complete voting system as well, where votes could be captured directly from a graphical interface rather than being entered by hand.

stv-counter.pl is a simple command-line interface to STV.pm.

stv.app is an AppleScript for Mac OS X. Drop a ballot file on stv.app to count it automatically and display the result in TextEdit; stv.app expects to be in the same folder as the two Perl files.

When used with a Droop threshold, STV.pm implements a British Columbia-style STV count, except that ties are always broken by lot, and a fractional threshold (quota) is used. A description of the counting method (but with an integer threshold) can be found here (FairVote), and in Electoral System Design: The New International IDEA Handbook, published by the International Institute for Democracy and Electoral Assistance (p71 in the 2005 edition, available as a free PDF).

STV.pm also supports the Meek and Warren methods of STV counting.

A description of STV.pm's input file format is avaiable here. See the comment header of STV.pm for a version history.

Download Description MD5 Checksum
STV.pm v2.15 main counting module 32a66b0ef0f2bbb2f084960bcc69d4d0
stv-counter.pl command-line interface f3348e241a674523e8652ffedc67de0a
stv.app drag & drop Mac interface dd680eb9c6789d57bce4dba6a40117b0

(The MD5 checksums can be used to verify that the files have not been tampered with.)

CAUTION: this software has been tested, but is still in development. Please use it with caution, and provide feedback as requested in its comments. Use of the program is subject to the license contained in the program file.

The program is written to be (relatively) easy to read, and is well-commented for the benefit of non-Perl-readers. Please send feedback about the quality and accuracy of the comments as well.

Those new to STV might be interested in reading the program as a precise algorithmic definition of the counting process. Familiarity with Perl is helpful, but the program should be readable by most programmers.

More Information on STV

For more information on STV and other election-related issues, Wikipedia is a good starting point. For more technical information, with a focus on STV, visit Voting matters.

Two of my own papers, Random tie-breaking in STV and Notes on the Droop quota (with David Hill) are online at Voting matters.

OpenSTV

Update (July 2006): I have joined the OpenSTV project (formerly pSTV) to assist in its development. OpenSTV is an open-source cross-platform program that can count many kinds of STV elections, as well as several others, including at least one Condorcet method. I'm still working on this counter, and welcome feedback.

Count an Election

To count an election, prepare a data file and upload it.

Specify a data file:
then

Feedback

Comments and other feedback to Jonathan Lundell: