Say I have 4 players:
Player 1 wins 50% of his games
Player 2 wins 20% of his games
Player 3 wins 90% of his games
Player 4 wins 20% of his games
I need a way to model different players playing together and randomly selecting a winner, but such that the winner makes sense.
My first idea was to do this:
If my random number falls between 1 and 50, player 1 wins, if my random number falls between 51 and 101, player 2 wins, if it falls between 102 and 192, player 3 wins, and if it falls between 193 and 203, player 4 wins.
I pick a number between 1 and 203 to determine the winner. Assuming my random number is uniformly distributed, I should expect to get what I want.
I'm wondering if there is a more mathematical way to do this or if this is the only way? (leveraging the language c++)
I will change this comment into an answer since I have more:
I like ELO ratings. Harkness wrote a book many years ago describing how the US Chess Federation implemented its rating with an extension of a basic ELO system. As an aside when a new player would be establish his rating the first 25 games were based on a strictly ELO system. (Wish I could give a reference, but my work computer won't let me navigate to any site that concerns games).
Getting into the numbers and algorithms it was 'easy' to generate a Rating based on win percentage. Once you have ratings you can then calculate head to head probability of winning based on difference of ratings.
Once you have head to probabilities then add up each players probabilities of winning against his three opponents and declare the highest total the winner. If you want specific probabilities of a person winning the Round Robin, you can use elementary statistical analysis to calculate the variance of winning percentage over all from the sum of the individual game variances.