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

NOTE: This program is no longer under development. If you're looking for open-source STV counting software, consider using droop or OpenSTV.

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 not formally verified. Please consider using one of the counters listed above instead. 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.

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 (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.

droop

Update (2010): I'm developing a new STV counter called droop. droop is designed to make it easy to completely express and verify an STV counting rule.

Count an Election

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

Specify an election file:
then

Feedback

Comments and other feedback to Jonathan Lundell: