-
Notifications
You must be signed in to change notification settings - Fork 1
Plural Voting Model
This page introduces the plural voting model currently used by Lexicon's plural voting tool, which uses a mechanism known as connection-oriented cluster match (COCM)[1] which aims to prevent groups of voters with pre-existing relationships from colluding to manipulate a vote.
Linear voting mechanisms allocate votes directly in proportion to the number each participant holds which is often measured as the number of a specific token held in a wallet. Often this results in participants with disproportionally many tokens having an undesirable control over the voting outcome. A challenge that Quadratic Voting (QV) addresses by mitigating these imbalances, but as a trade-off indroduces varius sybil issues. For example, the incentive to split token balances between multiple accounts. COCM enhances voting mechanisms by leveraging information about pre-existing relationships among voters, such as professional affiliations. This approach favors voting outcomes where votes are cast by people from various backgrounds, ensuring diverse perspectives are represented and preventing dominance by a single participant or group.
Consider the following hypothetical vote distributions of 5
participants that vote on two distinct options (Option 1
and Option 2
):
Option 1 | Option 2 | |
---|---|---|
Voter 1 | 4 | 1 |
Voter 2 | 4 | 1 |
Voter 3 | 4 | 1 |
Voter 4 | 0 | 2 |
Voter 5 | 0 | 2 |
One can see that in terms of raw votes received Option 1 with 12
received votes clearly dominates Option 2 that received only 7
votes. Furthermore, Option 1 dominates Option 2 using the classic quadratic voting model. The quadratic score of Option 1 equals 6
(5.828
. Seems like a fair voting outcome. However, what if we told you that Voter 1
, Voter 2
, and Voter 3
know each other, for example, through their workplace and decided privately to allocate more votes to Option 1 then Option 2. Voter 4
and Voter 5
don not know each other. This results in the following group distribution:
-
Group 1:
Voter 1
,Voter 2
,Voter 3
-
Group 2:
Voter 4
-
Group 3:
Voter 5
The plural voting model takes these pre-existing user relationships into account in the calcualtion of the voting outcome. Before going into the details of the model mechanics, lets have a look at the result first. The plurality score of Option 1 is 3.464
while the plurality score of Option 2 is 4.56
. Therfore, the plurality score favours Option 2 even though it scores better on the traditional metrics. The plurality score punishes collusion by voters of Group 1
by discounting their influence on the vote outcomes. In other words, the plurality score favours votes spread accross distinct groups.
The model aims to take into account pre-existing relationships among voting agents. Imagine there are two groups, let's call them x
and y
. Instead of simply adding up the votes from each group, pre-existing relationships between agents in each group are taken into account to discount votes depending on the intensity of the relationships. For example, if an agent from group x
is connected to an agent in group y
in some way (e.g., they are work affiliates, or have shared financial interests), their vote is attenuated (discounted). This attenuation is calculated using the following function:
The entire formula of the plural voting model that uses connection-oriented cluster match can be denoted as follows:
The formula consists of two parts. The first part adds up the number of votes of each agent for project
Strictly one group per agent:
In the case when each agent can only be part of one group, for example because the implementer of the underlying vote enforces it, the model simplifies to the following:
Essentially, the
Although the concept is intuitive, the mechanics are perhaps not. The following simple example hopefully illustrates the mechanics of the model. There are three agents who all give 2 + 2 + 2 = 6
). Under naïve quadratic voting, the 12 votes from the three agents would be discounted to a total of 6.
Strictly one group per agent:
Under plural voting the relationships between agents are also taken into account. Let's assume the three agents are part of the following two groups:
- group_0: [agent_0, agent_1]
- group_1: [agent_2]
Given this information, the first term of the connection-oriented cluster match formula is calculated as follows. The first term denotes simply the sum of votes of each agent. As a result the first term equates to 12 (i.e. 4 + 4 + 4). For the second term, we need to sum over all pairs of groups that are not equal to each other.
First, we must sum over each group and for each group over all other groups. In this example this is straight forward as, for example, the only other group than group_0
is group_1
. So lets start with group_0
where the other group is group_1
. The only thing that needs to be done here is solving the sums correctly as vote annutations must not be considered as there exist no intra-group relationships between agents. Second, we must sum the votes for each interaction term, square roote them individualy, and then multiply them. The result is 5.656854249492381. Now we can go back to the beginning of the formula and do the calculation for group_1
(i.e. the second and last element of json strings
display each step of the calculation that can be taken as reference when recalculating the result:
First Sum:
{'group_0': {'group_1': {'interaction_term1': {'agent_0': {'vote_attenuation': 4}, 'agent_1': {'vote_attenuation': 4}, 'interaction_term2': {'agent_2': {'vote_attenuation': 4}, 'sum_attenuated_votes_term1': 8.0, 'sqrt_sum_attenuated_votes_term1': 2.8284271247461903, 'sum_attenuated_votes_term2': 4.0, 'sqrt_sum_attenuated_votes_term2': 2.0, 'multiplied_interaction': 5.656854249492381}}
Second Sum:
{'group_1': {'group_0': {'interaction_term1': {'agent_2': {'vote_attenuation': 4}, 'interaction_term2': {'agent_0': {'vote_attenuation': 4}, 'agent_1': {'vote_attenuation': 4}}, 'sum_attenuated_votes_term1': 4.0, 'sqrt_sum_attenuated_votes_term1': 2.0, 'sum_attenuated_votes_term2': 8.0, 'sqrt_sum_attenuated_votes_term2': 2.8284271247461903, 'multiplied_interaction': 5.656854249492381}}
Now we need to add the terms that we calculated. The first term of the formula 12 plus the second term 11.312 (5.656 + 5.656) which equates to 23.312. The last step is to take the square root of all terms to get the final plurality score of 4.828. Note that the plurality score is lower than the score under quadratic voting (i.e., 6) due to the fact that connection oriented cluster match discounts vote contributions given the intensity of relationships between agents.
Multiple groups per agent
Things become more complicated when agents can be in multiple groups.
- group_0: [agent_0, agent_1]
- group_1: [agent_1, agent_2]
As one can see agent_1
is now in group_0
and in group_1
. However, the first term follows the exact same calculation as shown above and therefore equates to 12. For the second term, we need again to sum over all pairs of groups that are not equal to each other.
First, we must sum over each group and for each group over all other groups. So lets start with group_0
where the other group is group_1
. For each agent within group_0
we must calculate group_0
the number of votes gets square rooted. For agent_0
the vote contribution gets square rooted becuase agent_0
has a releationship with agent_1
who is part of group_1
. For agent_1
the vote contribution gets attenuated because agent_1
is part of group_1
herself. The same calculation must be done for the second interaction term from the perspective of each agent in group_1
. The last step is to sum the attenuated votes for each interaction term, square roote them individualy, and then multiply them. The result is 2.9999999999999996. Now we can go back to the beginning of the formula and do the calculation for group_1
(i.e. the second and last element of json strings
display each step of the calculation that can be taken as reference when recalculating the result:
First Sum:
{'group_0': {'group_1': {'interaction_term1': {'agent_0': {'vote_attenuation': 2.0, 'num_groups': 1, 'vote_attenuation/num_groups': 2.0}, 'agent_1': {'vote_attenuation': 2.0, 'num_groups': 2, 'vote_attenuation/num_groups': 1.0}}, 'interaction_term2': {'agent_1': {'vote_attenuation': 2.0, 'num_groups': 2, 'vote_attenuation/num_groups': 1.0}, 'agent_2': {'vote_attenuation': 2.0, 'num_groups': 1, 'vote_attenuation/num_groups': 2.0}}, 'sum_attenuated_votes_term1': 3.0, 'sqrt_sum_attenuated_votes_term1': 1.7320508075688772, 'sum_attenuated_votes_term2': 3.0, 'sqrt_sum_attenuated_votes_term2': 1.7320508075688772, 'multiplied_interaction_terms': 2.9999999999999996}},
Second Sum:
'group_1': {'group_0': {'interaction_term1': {'agent_1': {'vote_attenuation': 2.0, 'num_groups': 2, 'vote_attenuation/num_groups': 1.0}, 'agent_2': {'vote_attenuation': 2.0, 'num_groups': 1, 'vote_attenuation/num_groups': 2.0}}, 'interaction_term2': {'agent_0': {'vote_attenuation': 2.0, 'num_groups': 1, 'vote_attenuation/num_groups': 2.0}, 'agent_1': {'vote_attenuation': 2.0, 'num_groups': 2, 'vote_attenuation/num_groups': 1.0}}, 'sum_attenuated_votes_term1': 3.0, 'sqrt_sum_attenuated_votes_term1': 1.7320508075688772, 'sum_attenuated_votes_term2': 3.0, 'sqrt_sum_attenuated_votes_term2': 1.7320508075688772, 'multiplied_interaction_terms': 2.9999999999999996}}}
Now we need to add the terms that we calculated. The first term of the formula 12 plus the second term 5.99 (2.999 + 2.999) which equates to 17.99. The last step is to take the square root of all terms to get the final plurality score of 4.24. Note that the plurality score is lower than the score under quadratic voting (i.e., 6) due to the fact that connection oriented cluster match discounts vote contributions given the intensity of relationships between agents.