Reciprocal Score Voting: Difference between revisions

From electowiki
Content added Content deleted
No edit summary
Line 2: Line 2:


The idea is to tie how much support a faction's candidate receives from other factions by how much that candidate's faction has supported those other factions.
The idea is to tie how much support a faction's candidate receives from other factions by how much that candidate's faction has supported those other factions.

[[File:Reciprocal Score Voting Yee diagrams.png|thumb|400px|right|[[Yee diagram|Yee diagrams]] for Reciprocal Score Voting, showing non-monotonicity and small amounts of [[center squeeze]].]]


Each ballot is assigned to one or more factions, based on the top rated candidates in that ballot. Then the ballots of each faction are used to run mini score voting elections, the results of which represent how well each faction rates every other faction.
Each ballot is assigned to one or more factions, based on the top rated candidates in that ballot. Then the ballots of each faction are used to run mini score voting elections, the results of which represent how well each faction rates every other faction.

Revision as of 12:33, 13 March 2020

Score voting and other cardinal systems are susceptible to the chicken dilemma and other situation which occurs when similar groups penalize one another by not cooperating. Reciprocal Score Voting is an unusual attempt to address this lack of cooperation by explicitly and safely rewarding it.

The idea is to tie how much support a faction's candidate receives from other factions by how much that candidate's faction has supported those other factions.

Yee diagrams for Reciprocal Score Voting, showing non-monotonicity and small amounts of center squeeze.

Each ballot is assigned to one or more factions, based on the top rated candidates in that ballot. Then the ballots of each faction are used to run mini score voting elections, the results of which represent how well each faction rates every other faction.

Let Failed to parse (SVG (MathML can be enabled via browser plugin): Invalid response ("Math extension cannot connect to Restbase.") from server "https://wikimedia.org/api/rest_v1/":): {\displaystyle B^{v|\phi}_j} be the ballot rating of the Failed to parse (SVG (MathML can be enabled via browser plugin): Invalid response ("Math extension cannot connect to Restbase.") from server "https://wikimedia.org/api/rest_v1/":): {\displaystyle v} -th voter towards candidate Failed to parse (SVG (MathML can be enabled via browser plugin): Invalid response ("Math extension cannot connect to Restbase.") from server "https://wikimedia.org/api/rest_v1/":): {\displaystyle j} , where Failed to parse (SVG (MathML can be enabled via browser plugin): Invalid response ("Math extension cannot connect to Restbase.") from server "https://wikimedia.org/api/rest_v1/":): {\displaystyle \phi} is the set of factions assigned to that voter. This means Failed to parse (SVG (MathML can be enabled via browser plugin): Invalid response ("Math extension cannot connect to Restbase.") from server "https://wikimedia.org/api/rest_v1/":): {\displaystyle B^{v|\phi}_j > B^{v|\phi}_k} for all Failed to parse (SVG (MathML can be enabled via browser plugin): Invalid response ("Math extension cannot connect to Restbase.") from server "https://wikimedia.org/api/rest_v1/":): {\displaystyle j \in \phi, k \notin \phi} . Define Failed to parse (SVG (MathML can be enabled via browser plugin): Invalid response ("Math extension cannot connect to Restbase.") from server "https://wikimedia.org/api/rest_v1/":): {\displaystyle F_{i \to j}} be the mean rating given by faction Failed to parse (SVG (MathML can be enabled via browser plugin): Invalid response ("Math extension cannot connect to Restbase.") from server "https://wikimedia.org/api/rest_v1/":): {\displaystyle i} to faction Failed to parse (SVG (MathML can be enabled via browser plugin): Invalid response ("Math extension cannot connect to Restbase.") from server "https://wikimedia.org/api/rest_v1/":): {\displaystyle j} , and also that Failed to parse (SVG (MathML can be enabled via browser plugin): Invalid response ("Math extension cannot connect to Restbase.") from server "https://wikimedia.org/api/rest_v1/":): {\displaystyle F_{i \to \phi} = \frac{1}{|\phi|} \sum_{j \in \phi} F_{i \to j}} , that is, the mean of the rating given to all members of that set of factions, and similarly for Failed to parse (SVG (MathML can be enabled via browser plugin): Invalid response ("Math extension cannot connect to Restbase.") from server "https://wikimedia.org/api/rest_v1/":): {\displaystyle F_{\phi \to j}} .

With these established, Reciprocal Score Voting proceeds by re-weighting and aggregating the ballot ratings according to the rule:

Failed to parse (SVG (MathML can be enabled via browser plugin): Invalid response ("Math extension cannot connect to Restbase.") from server "https://wikimedia.org/api/rest_v1/":): {\displaystyle B^{v|\phi}_j \mapsto B^{v|\phi}_j \min\left( \frac{ F_{j \to \phi} }{ F_{\phi \to j} } , 1 \right)} ,

that is, factions only give support to factions they received support from, and in proportion to that support up to a maximum. Note the case of Failed to parse (SVG (MathML can be enabled via browser plugin): Invalid response ("Math extension cannot connect to Restbase.") from server "https://wikimedia.org/api/rest_v1/":): {\displaystyle F_{\phi \to j} = 0} only occurs when all Failed to parse (SVG (MathML can be enabled via browser plugin): Invalid response ("Math extension cannot connect to Restbase.") from server "https://wikimedia.org/api/rest_v1/":): {\displaystyle B^{v|\phi}_j = 0} , in which case no reweighing is necessary.

Only when factions agree on their mutual ratings and perfectly reciprocate is that their reciprocity ratio Failed to parse (SVG (MathML can be enabled via browser plugin): Invalid response ("Math extension cannot connect to Restbase.") from server "https://wikimedia.org/api/rest_v1/":): {\displaystyle F_{j \to \phi} / F_{\phi \to j} = 1} , in which case votes are left unchanged.

In the case of any asymmetry in support, the reciprocity ratio is Failed to parse (SVG (MathML can be enabled via browser plugin): Invalid response ("Math extension cannot connect to Restbase.") from server "https://wikimedia.org/api/rest_v1/":): {\displaystyle F_{j \to \phi} / F_{\phi \to j} < 0} for the faction which did not cooperate, and Failed to parse (SVG (MathML can be enabled via browser plugin): Invalid response ("Math extension cannot connect to Restbase.") from server "https://wikimedia.org/api/rest_v1/":): {\displaystyle F_{j \to \phi} / F_{\phi \to j} = 1} for the faction that did cooperate.

Therefore, not cooperating penalizes the side which did not cooperate more. In this way, factions are encouraged to cooperate as much as possible to maximize mutual support, forcing them to strike a balance between supporting their favorite as well as supporting alternatives as much as they can.

This system is non-monotonic and suffers from a very unusual "reverse spoiler effect", in which a larger faction may lose an election by not supporting smaller supportive factions. Therefore, larger factions are encouraged to promote smaller factions as much as possible in order to win.

The Failed to parse (SVG (MathML can be enabled via browser plugin): Invalid response ("Math extension cannot connect to Restbase.") from server "https://wikimedia.org/api/rest_v1/":): {\displaystyle \min(\cdot, 1)} condition above is required so that support is never amplified by asymmetry. This is also necessary so that a smaller faction cannot parasite on the support of a larger faction, which will never rate the smaller faction above its own. A smaller faction artificially rating a larger faction too highly will only receive exactly as much support as the larger faction is willing to give it.

Implementation

The following Mathematica code takes a list of score ballots and returns the Reciprocal Score Vote mean score.

RSV[ballots_] := Module[{i, factionmask, factionratings, nc, nv, fr},
   {nv, nc} = Dimensions[ballots];
   factionmask = KroneckerDelta /@ (# - Max[#]) & /@ ballots;
   factionratings = Mean /@ Table[
      fr = 
       Select[ballots, (KroneckerDelta /@ (# - Max[#]))[[i]] == 1 &];
      If[Length[fr] == 0, {ConstantArray[0, nc]}, fr],
      {i, 1, nc}
      ];
   Mean@Table[
     fif = 
      Mean@(Transpose@factionratings)[[Flatten@
          Position[factionmask[[i]], 1]]];(* i\[Rule]\[Phi] *)
     ffi = 
      Mean@factionratings[[Flatten@
          Position[factionmask[[i]], 1]]];(* \[Phi]\[Rule]i *)
     ballots[[i]] (Min[1, #[[1]]/If[#[[2]] == 0, 1, #[[2]]]] & /@ 
        Thread[{fif, ffi}]),
     {i, 1, nv}
     ]
   ];