Last active
October 20, 2019 12:57
-
-
Save LeFreq/6515367 to your computer and use it in GitHub Desktop.
Probabilistic Chooser Algorithm
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Probabilistic Chooser: idea for giving fair output for all contributing participants based on a weighted vote. Should be used for all websites (for example) which use crowdsourced voting to prevent positive feedback loops. | |
(R) Registered Mark Janssen, under Creative Commons: BY, NC. Patents pending (hence NC) and these ideas are used in the GA-SOLVE program as well. | |
In the common Internet context of listing dynamic content that users are voting for, one encounters users gaming the ranking system by seeing who gets first, or unrecognized but good content content hiding below the popular content. | |
The solution is to give a weighted listing where each item is chosen proportional to its vote. This technique will prevent positive feedback loops that raise popular items forever above the rest (due to limitations of people's attention span to scan all contributions or positions). The idea is for every contribution, tally a count of all votes, then each contribution gets weighted from this total and an intelligent throw is made to pick a given item, as follows. | |
If given these item:vote pairs, for example: | |
* "No! I am the best HackORZZ! Javascript 4ever!": 13 votes | |
* "I am a better hacker. I do Perl": 8 votes | |
* "I am good hacker. I program Python": 3 votes | |
* "I could be the best, but no-one recognizes me": 1 vote | |
That is a sum total of 25 votes. | |
The problem is solved by calculating a probability of being shown first. Respectively: | |
* 13/25 = 0.52 | |
* 8/25 = 0.32 | |
* 3/25 = 0.12 | |
* 1/25 = 0.04 | |
Totaling, as expected: 1.0 (or 25/25) | |
Next, take those numbers and accumulate them thusly: | |
* 0.52 | |
* 0.84 | |
* 0.96 | |
* 1.00 | |
Now, throw a random number [0.0,1.0) and pick the element that is between those results. | |
Bingo! Problem solved! Over time, under-valued contributors will get moved upward -- no positive reinforcement loops! (Algorithm licensed: CC-BY-NC, CreativeCommons) | |
(You can optimize this algorithm by not using floats and multiplying your random number generator by your total votes.) | |
Note: This algorithm is based on evolutionary theory and has been used in a software project for Genetic Algorithm (GA-Solve), selecting from a pool of ranked genes between generations. It rocks! |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Algorithm should probably be called "evolutionary chooser", "genetic splice algorithm".