(This used to be a longer post, but it got eaten by a goat at submission time, so second time I'll try making it shorter and faster.)
The idea is obviously inspired as an alternative to the now-dismissed limits based on SCP and CCPs, and it goes like this: every user has a web of trust, on which other users go up/down the chain based on the upvoats/downvoats they receive by said user. Trust manifests in the form of a higher weight given to contributions and up/downvoats from the users.
EXAMPLE: assume that the weight is given by the ratio between up/downvoats given to total up/downvoats given. User A has given 20 upvoats totally, 10 of which to contributions from user B. B weights +50% for A. User B has given 100 upvoats, 10 of which to user C. C weights +10% for B. By network effect, C weights +5% for A. User B writes a post that has 23 total raw score, including an upvoat from C. User A sees the post with 23.55 total score.
Benefits of this mechanism:
- it encourages contributions (only way to move up/down in the web of trust);
- it reduces the impact of vote-only sock puppet accounts;
- it reduces the impact of brigading over the longer term.
- most important, computational/storage cost; even though the web of trust is typically rather sparse, there's still the potential for 10^12 combinations needed to store it for 1M users;
- brigading effect still visible to newcomers/logged-out users; this might require a ‘global’ web of trust built from the individual users'.
- circlejerking shouldn't be more of an issue than it is now, and its effects will still be limited to the circlejerkers.
This is obviously just a quick draft, but I'm throwing it here because I'm sure Voat collectively can improve it faster than I can on my own.
EDIT #1: here's a mathematical formulation of the proposal, hoping it will make things clearer.
Call V the matrix where V(i,j) is the (normalized) number of ups/downs user i has given to user j (i is the row index, j is the column index). Call W the matrix where W(i, j) is the weight user i gives to contributions by user j.
V(i,j) is known, and has 0 on the diagonal. The diagonal elements of W(i,j) are 1, and the off-diagonal elements are the unknown weights we want to want to compute.
The weights should satisfy the relation that W(i,j) = sum W(i,k)*V(k,j) (i.e. the sum of the opinions of user j by all users k, corrected by the weight the opinion of user k has for user i). The right-hand side is just W.V, but keep in mind this only holds for the off-diagonal elements. The definition of W is thus the solution of the fixed-point equation
W = W.V + (I - diag(W.V))
I is the identity matrix of the correct rank and
diag() is a function that returns the matrix diagonal (in practice, what the expression in parenthesis is doing is to replace the diagonal of W.V with the diagonal of the identity matrix, to give 1). I'm currently looking for a simpler expression that wouldn't require sophisticated algebra packages to quickly find a solution.