There are many different voting procedures. For instance, we may allow each voter to cast one vote and declare the candidate receiving the most such votes the winner (plurality rule), or we may ask each voter to report a complete ranking of all candidates and give each candidate as many points as they beat other candidates in such a ranking (Borda rule). Voting theory studies the properties of these and other voting procedures. The aim of this project is to develop a software tool that would allow the user to specify a profile of ballots reported by the voters and then to compute and compare the outcomes for different voting procedures. Organising data input and presentation of results will be challenging from a HCI point of view. Implementing the actual voting procedures will be relatively easy in some cases and very challenging in others (for some voting rules the winner determination problem is NP-hard). The system should also allow the user to check whether a given election instance satisfies certain properties, such as the winner beating each competitor in a pairwise run-off (this property, known as the Condorcet principle, is not satisfied by many standard voting rules). In the later parts of the project we want to investigate to what extent it is possible to use search algorithms to find election instances that illustrate a paradox or other interesting property in voting theory. For instance, we might want to ask the system to search for the smallest possible election instance where the Borda rule violates the Condorcet principle. Besides algorithm design and programming, the project will involve reading research papers in voting and social choice theory.
Voting rules to implement (to start out with):
The main parts of a voting system:
Any of the parts above can be manipulated to produce a different winner.
Planning:
Further research: Impartial cultural ranking and single peaked preferences
A uniform distribution of numbers to create a ranking with does not necessarily correspond to a uniform distribution in the ranking. Check to what extent these distributions may map to each other- any numerical distribution must be mappable to an ordinal list, even if some of the picked numbers may be equal.
The cutoff number should not default to zero, but can be specified per voter within a range from which also the numerical uniform distribution is selected.
The votes then generated should output a ballot format which can be saved and reread in, possibly also collapsed into a more compact version.
def: Homogenity of distributions over different voters types will hold on multiples for plurality, approval and some other voting rules, but others probably not- check this out!
Some possible heuristics: using the Borda score or the Copeland score, or comparing to the amount of flips it will take to flip the candidate in the closest of half of the votes all the way to the top.
Hypothesis: it only necessary to flip the candidate up, and never to flip other candidates down.
The ballot language which can be saved externally should correspond to a comma separated value file with strings as candidate names, with the ordering per line corresponding to the preferences of each voter, with the left most candidate as the most popular. If the line is preceded by a number, then this vote can be consider that amount of times. Example:
'a','b','c'
'b','a','c'
2'c','b','a'
for candidates which are considered equal, we will use square brackets: [] to enclose multiple candidates. If after a certain point candidates are to receive 0 points each (or to be ranked as null) then they will be placed after a % sign.
['a','b'],%,'c'
indicates the approval of only 'a' and 'b'.
'a', %, 'b','c'
indicates the approval of only 'a'.
