We propose a generic interface for voters, that can support a wide range of counting methods, at the cost of not being very convenient to use. We explain here how you should proceed when preparing an election and how you should instruct your voters.
Preparation of the election
On the page "Edit Questions", you need to tick the box in the insert that starts with "Alternative voting methods (warning, still experimental)" to activate this alternative mode. Leave empty the field "Counting method specification" since you are not using one of the counting methods predefined on our server.
You need to explain, for example in the field "question", that voters need to provide each candidate with a number (1, 2, 3, ...) and explain what it means (for example, you may want that voters give 1 to their preferred candidate, 2 to the second, etc.).
Be careful, any number (between 0 and 255) will be accepted when submitting a vote. It is up to you or the electoral commission to explain when a vote is invalid or not.
Note: you may also use the voting interfaces developed for Majority Judgement or Condorcet-Schulze and then apply your iwn method on the raw ballots. In that case, prepare an election following the guidelines for Majority Judgment or Condorcet-Schulze and then follow "Applying your own counting method" instructions.
During the election, voters give a number to each candidate. Any number is accepted (between 0 and 255).
After the tally
Once the election is closed and the authorities have used their secret decryption key, the raw votes are published, in a random order so that it is impossible to link a vote to the original ballot, hence it is impossible to link a vote to the corresponding voter. Note that ballots are shuffled in a verifiable manner before decryption so that any external auditor can still check that the result corresponds to the content of the original ballot box.
Many counting methods exist to determine the winner(s) of an election once voters have given their preferences or their grade. Currently, our server supports three methods.
- Condorcet-Schulze. A Condorcet winner is a
candidate that is preferred over all the other candidates. Several
techniques exist to decide which candidate to elect when there is no
Condorcet winner. We use here the Schulze method and we refer voters
Wikipedia page for more information.
All ballots will be valid and the order of preference will be interpreted as the order of the numbers given to each candidate. For example, voting 1 for A, 2 for B is equivalent to voting 5 for A, 99 for B. In both cases, A is preferred over B. Equalities between candidates are supported too.
- Majority Judgment. In the context of Majority
Judgment, a vote gives a grade (Excellent, Very Good, etc.) to
each candidate. You will need to explain to voters the mapping
between numbers and grades. In any case, 1 is the highest grade, 2
is the second highest grade, etc. The winner is the candidate with the
highest median (or the 2nd highest median if there is a tie,
etc.). More information can be found here.
A ballot is invalid if a voter has entered a number that is greater than the number of grades or equal to 0. Equalities are supported.
- Single Transferable Vote (STV). In the context
of STV, voters rank candidates by order of preference (0 is
interpreted as not ranked). When a
candidate obtains enough votes to be elected, the votes are
transferred to the next candidate in the voter ballot, with a
coefficient proportional to the "surplus" of votes. More information
can be found here. Many variants of STV exist, we documented our
choices in our
code of STV.
A ballot is invalid if two candidates have been given the same preference order or if a rank is missing. For example, a voter cannot vote 1 for A, 2 for B, and 4 for C when there are three candidates A, B, C. She should instead vote 1 for A, 2 for B, and 3 for C. This is interpreted as A is preferred over B, who is preferred over C.
Applying your own counting method
After the tally, the raw ballots are available in a random order. So if you do not wish to use one of the available counting methods on our server, You can still apply any of your favorite algorithms to determine the winner(s) from the raw ballots. We explain here how the election result is formatted, on an example. As a result of the election, you will get something like this:
What does this mean?? This a list of list of votes, each vote being itself a list. Here, we have the result of an election with two questions and four voters:
- the first question has three candidates and received
the following list of votes:
- the second question has four candidates and received
the following list of votes:
- [2,3,1] means that one voter has expressed that she prefers the third candidate (giving him a "1"), then she prefers the first candidate (giving him a "2") and finally she likes the second candidate the less (giving him a "3").
- Similarly, [1,3,2] indicates that another voter prefers first the first candidate, then the third one, then the second one.
- What about [254,27,1]? You need to have rules for this. Maybe you will decide that this vote is just invalid. Maybe you will count it as "the voter prefers the last candidate, then the second, then the first one".
- What about [0,1,2]? Again, this is up to you to interpret the vote [0,1,2]. Since the default number associated to a candidate is "0", you may not want to consider this vote as invalid. Maybe this one should be interpreted as "the voter prefers the second candidate, then the third one and has no opinion on the first one".
You can see here that you need clear electoral rules, defined before the election, that assess which ballots are invalid and which are not.