• If you are citizen of an European Union member nation, you may not use this service unless you are at least 16 years old.

  • Stop wasting time looking for files and revisions. Connect your Gmail, DriveDropbox, and Slack accounts and in less than 2 minutes, Dokkio will automatically organize all your file attachments. Learn more and claim your free account.


Cardinal Voting

Page history last edited by PBworks 13 years, 10 months ago

Cardinal Voting





Cardinal voting is also known as Range voting. It is a better voting system than the one currently used in most of the world. It would result in fairer elections, better representing the opinion of the people.


More general information is available in the following web site: http://rangevoting.org/


See also: http://en.wikipedia.org/wiki/Range_voting


Ballot User interface


A drop-down selection box for each candidate, with 102 options: the numbers 0-99 for scoring purposes, an "X" for symbolizing a "non-vote" (does not affect the average for that candidate at all), and then a "Default" option (which should actually be the default). The voter will be allowed to specify (preferably right at the beginning) what that default value should be. The default option for that choice should probably be a "non-vote", giving the most meaningful election results from lazy voters, and still allowing them to choose the default to be a 0 or a 50, for example, should they want to.


Vote counting algorithm


You just collect a value from 0-99 (or a specification of a

"non-vote") from each user for each candidate. For every vote ballot,

you go through every scored candidate on it, and increment both the

total score by whatever that voter gave to the given candidate, as

well as incrementing the counter of the number of votes that candidate

has received. For an "X" (i.e. non-vote), you simply don't increment



Once every ballot has been processed, you determine which candidate

received the greatest number of actual votes (numbers 0-99, not

non-votes or "X"). You then eliminate any candidates who did not

receive at least 25% of that number of real votes, and elect the

winner as the one with the highest average score (total score over

number of real votes) from the set of remaining candidates.


Technical implementation.



The module could either make use of the project Electowidget or by using the Drupal voting API.


The Electowidget solution would require more work, because Electowidget itself is not fully ready, but Cardinal Voting implementation with Electowidget would be reuseable with all php-based CMS on the web.


Another idea is to take Andrew Myers's public domain CIVS system, which

is a system that allows people on the internet to set up and conduct elections using

two Condorcet voting methods, and modify CIVS so that other voting methods

such as range voting are now made available. You can use CIVS by browsing to its

front page http://www.cs.cornell.edu/andru/civs.html

and you can download CIVS source code from http://www.cs.cornell.edu/w8/~andru/civs/changelog.html


Myers tells me that it will be fine with him to modify the CIVS code

long as it acknowledges him and is used for nonprofit purposes.

He believes it would be way easier to start from CIVS than

to rebuild it from the ground up. He suggests the following

for those who want to modify it to also support range voting:


To add range voting, you'd want to modify the "results" script to add a

radio button, and you'd need to write a module similar to "rp.pm" or

"beatpath.pm" that implements the range voting tallying. The results

script would then invoke your "range.pm" at corresponding points.

Unfortunately "results" is quite messy.


More discussion


The http://rangevoting.org demos at




already implement range voting with a nice user interface (both nice

input, and nice output). You can copy the HTML of

the input and output (well, both would have to be produced by your codes)

to get something similarly nice.


But these demos are inadequate because they do not permit

users to create their OWN polls, and they do not prevent ballot box stuffing.

CIVS does those things using login IDs and all voters names are known for

each vote, but CIVS does not support range voting and really should be made

to support numerous voting systems.


Rangevoting.org does have a ballot-creator tool


but it is only for paper ballots and is not connected to the

range voting demo system.


An even nicer user interface in some ways is at zohopolls:


which also permits users to make own polls.


In this area, implementing the actual vote-tallying itself is

easy. The hard part to program is the human interface stuff and the

prevention of ballot box stuffing stuff.


More information


Contact Jan or Warren from http://rangevoting.org/ for more general information.


Contact Augustin for more technical information about Electowidget.

Comments (0)

You don't have permission to comment on this page.