SWISS CHESS TOURNAMENT WINNER PREDICTION SIMULATOR (SCTWPS)http://swisschesswinpredict.codeplex.com/project/feeds/rss*SWISS CHESS TOURNAMENT WINNER PREDICTION SIMULATOR (SCTWPS)* Program estimates the probability of a given chess player winning a Swiss-style chess tournament.Source code checked in, #31391http://swisschesswinpredict.codeplex.com/SourceControl/changeset/31391JayRodrequezThu, 12 Dec 2013 02:10:12 GMTSource code checked in, #31391 20131212021012ANew Post: Next version of SCTWPShttp://swisschesswinpredict.codeplex.com/discussions/438497<div style="line-height: normal;">I started on a new version of this program, that, within the next few months if not sooner, as time permits, make the following changes:
<br />
<br />
(1) allow a user to have a text file that lists the Elo of particular players, rather than having the program generate a random Gaussian distribution,
<br />
<br />
(2) allow Round Robin simulations from this designated set of players,
<br />
<br />
(3) incorporate draws (which should not I believe affect the probabilities much, however, it could arguably give a few more upsets, for example, if a weak player manages a draw rather than a loss to a strong player in one round and otherwise wins the remaining rounds, the weak player could win a clear outright first place rather than possibly lose on tiebreak as with the present program)
<br />
<br />
I will probably not account for White vs Black winning chances, since over time, with lots of simulations, as with draws and even more so, the selection of colors should be a wash, and not affect winning probabilities much if at all for most players, though it might make a slightly more upsets possible if a weak player has the white pieces against a strong player. Incorporating draws however are a bigger factor than color for possible upsets.
<br />
<br />
Today I installed TortoiseSVN for version control.<br />
</div>JayRodrequezWed, 25 Sep 2013 22:51:00 GMTNew Post: Next version of SCTWPS 20130925105100PSource code checked in, #29771http://swisschesswinpredict.codeplex.com/SourceControl/changeset/29771JayRodrequezWed, 25 Sep 2013 22:34:15 GMTSource code checked in, #29771 20130925103415PNew Post: Next version of SCTWPShttp://swisschesswinpredict.codeplex.com/discussions/438497<div style="line-height: normal;">When I have time in the next few months I hope to update this program to do the following:
<br />
<br />
(1) allow draws to be counted (I submit it should not matter for winning chances)
<br />
<br />
(2) allow a specific Elo distribution to be simulated. Right now, you have to rely on the computer to randomly simulate a Gaussian distribution. In the next version, you can input, as a text file, the actual players. For "big upsets" this does make a difference, since I have found, using this program, that even seemingly tiny changes in the Elo of top players makes a big difference on whether a much lower rated player will win. Simple analogy: if the world's #1 rated player is playing in a Swiss, as opposed to the world's #100th highest rated, the chances that a lower rated player will win goes from very slim to almost none.
<br />
<br />
(3) possibly incorporate a table that accounts for White vs Black winning chances a little better than the traditional Elo table does, see <a href="http://en.chessbase.com/Home/TabId/211/PostId/4007114/the-elo-rating-system-correcting-the-expectancy-tables.aspx" rel="nofollow">http://en.chessbase.com/Home/TabId/211/PostId/4007114/the-elo-rating-system-correcting-the-expectancy-tables.aspx</a>
<br />
</div>JayRodrequezSat, 30 Mar 2013 06:52:26 GMTNew Post: Next version of SCTWPS 20130330065226ANew Post: What is the probability Ivanov Borislav won fairly at the Zadar Open? Slim but not impossiblehttp://swisschesswinpredict.codeplex.com/discussions/428937<div style="line-height: normal;">
<p>We can also compute the probability that Ivanov is really 2227 Elo and not 2350 Elo. From the previous post, the analysis is the same, but the probabilities are more stacked against Ivanov winning, so you get this table:</p>
<p> </p>
<table border="0" cellspacing="0" cellpadding="0" width="498">
<colgroup><col width="117"><col width="97"><col width="73"><col width="83"><col span="2" width="64"></colgroup>
<tbody>
<tr height="20">
<td width="117" height="20"><br>
</td>
<td width="97">ELO opponent</td>
<td width="73">Elo Ivanov</td>
<td width="83">Difference</td>
<td width="64">Prob. Ivanov Wins</td>
<td width="64">Prob</td>
</tr>
<tr height="20">
<td height="20"><br>
</td>
<td><br>
</td>
<td><br>
</td>
<td><br>
</td>
<td><br>
</td>
<td><br>
</td>
</tr>
<tr height="20">
<td height="20">Schachinger Mario</td>
<td align="right">2426</td>
<td align="right">2227</td>
<td align="right">199</td>
<td align="right">0.25</td>
<td align="right">0.25</td>
</tr>
<tr height="20">
<td height="20">Jovanic Ognjen</td>
<td align="right">2538</td>
<td align="right">2227</td>
<td align="right">311</td>
<td align="right">0</td>
<td align="right">0</td>
</tr>
<tr height="20">
<td height="20">Kurajica Bojan</td>
<td align="right">2565</td>
<td align="right">2227</td>
<td align="right">338</td>
<td align="right">0.125</td>
<td align="right">0.125</td>
</tr>
<tr height="20">
<td height="20">Kuljaševic Davorin</td>
<td align="right">2561</td>
<td align="right">2227</td>
<td align="right">334</td>
<td align="right">0.125</td>
<td align="right">0.25</td>
</tr>
<tr height="20">
<td height="20">Zelcic Robert</td>
<td align="right">2560</td>
<td align="right">2227</td>
<td align="right">333</td>
<td align="right">0.125</td>
<td align="right">0.125</td>
</tr>
<tr height="20">
<td height="20">Kožul Zdenko</td>
<td align="right">2638</td>
<td align="right">2227</td>
<td align="right">411</td>
<td align="right">0.08</td>
<td align="right">0.08</td>
</tr>
<tr height="20">
<td height="20">Sumets Andrey</td>
<td align="right">2638</td>
<td align="right">2227</td>
<td align="right">411</td>
<td align="right">0.08</td>
<td align="right">0.16</td>
</tr>
<tr height="20">
<td height="20">Predojevic Borki</td>
<td align="right">2600</td>
<td align="right">2227</td>
<td align="right">373</td>
<td align="right">0</td>
<td align="right">0</td>
</tr>
<tr height="20">
<td height="20">Šaric Ivan</td>
<td align="right">2626</td>
<td align="right">2227</td>
<td align="right">399</td>
<td align="right">0.085</td>
<td align="right">0.085</td>
</tr>
</tbody>
</table>
<p>Note, again, that the draws against Davorin and Andrey count as twice the probability of winning.</p>
<p>Taking the sum of all nonzero rows at the last column gives the probability of Ivanov winning 6 out of 9 points against such opponents, or:</p>
<table border="0" cellspacing="0" cellpadding="0" width="64">
<colgroup><col width="64"></colgroup>
<tbody>
<tr height="20">
<td width="64" height="20" align="right" style="height:15pt; width:48pt">1.06E-06</td>
</tr>
</tbody>
</table>
<p> or, taking the inverse of this gives:</p>
<p>1 in 941176.4706, or 1 in 941000.</p>
<p>That is, about 1 in a million. (Technically you have to add to this amount the very small chances of getting 7, 8 and 9 points out of 9, which will increase the odds slightly, since the relevant statistics are the odds of 'at least' getting 6 out of
9 points, but, given the odds are so small, I don't think the probability will change very much at all).</p>
<p>Possible that Ivanov did this by himself, but not all that likely. The only way to prove it of course is to play more games so we can see his truth strength.</p>
</div>jayrodrequezWed, 09 Jan 2013 03:07:12 GMTNew Post: What is the probability Ivanov Borislav won fairly at the Zadar Open? Slim but not impossible 20130109030712ANew Post: What is the probability Ivanov Borislav won fairly at the Zadar Open? Slim but not impossiblehttp://swisschesswinpredict.codeplex.com/discussions/428937<div style="line-height: normal;">
<p>Another way of viewing this problem is to try and calculate the probability of Bulgarian Borislav Ivanov scored 6.0/9 points.</p>
<p>I could be wrong on this calculation, especially the part about draws, but a table can be constructed, assuming Ivanov is really rated at 2350 Elo, not 2227 Elo (giving Ivanov the benefit of the doubt that he really is stronger than his Fide rating says),
of Ivanov's wins over his opponents.</p>
<p>The table would look like this:</p>
<p><span style="text-decoration:underline"><strong>Opponent Opponent Elo Elo Difference
Probability of Ivanov winning points from this opponent</strong></span></p>
<table border="0" cellspacing="0" cellpadding="0" width="442">
<colgroup><col width="129"><col width="106"><col width="72"><col width="135"></colgroup>
<tbody>
<tr height="20">
<td width="129" height="20">Schachinger Mario</td>
<td width="106" align="right">2426</td>
<td width="72" align="right">76</td>
<td width="135" align="right">0.4</td>
</tr>
<tr height="20">
<td height="20">Jovanic Ognjen</td>
<td align="right">2538</td>
<td align="right">188</td>
<td align="right">0.26 (zero)<br>
</td>
</tr>
<tr height="20">
<td height="20">Kurajica Bojan</td>
<td align="right">2565</td>
<td align="right">215</td>
<td align="right">0.23</td>
</tr>
<tr height="20">
<td height="20">Kuljaševic Davorin</td>
<td align="right">2561</td>
<td align="right">211</td>
<td align="right">0.235 (draw)<br>
</td>
</tr>
<tr height="20">
<td height="20">Zelcic Robert</td>
<td align="right">2560</td>
<td align="right">210</td>
<td align="right">0.235</td>
</tr>
<tr height="20">
<td height="20">Kožul Zdenko</td>
<td align="right">2638</td>
<td align="right">288</td>
<td align="right">0.16</td>
</tr>
<tr height="20">
<td height="20">Sumets Andrey</td>
<td align="right">2638</td>
<td align="right">288</td>
<td align="right">0.16 (draw)<br>
</td>
</tr>
<tr height="20">
<td height="20">Predojevic Borki</td>
<td align="right">2600</td>
<td align="right">250</td>
<td align="right">0.195</td>
</tr>
<tr height="20">
<td height="20">Šaric Ivan</td>
<td align="right">2626</td>
<td align="right">276</td>
<td align="right">0.17 (zero)<br>
</td>
</tr>
</tbody>
</table>
<p> </p>
<p>Since Ivanov lost to Ognjen and Ivan, he got zero points and zero probability points, while Ivanov drew Davorin and Andrey, so he gets double probability points for that (I'm not 100% sure on this however, but pretty sure; these probabilities are underlined
below). Hence Ivanov probability of winning, since these events are not dependent, is the sum of the non-zero probabilities below.</p>
<table border="0" cellspacing="0" cellpadding="0" width="263" height="187">
<colgroup><col width="64" style="width:48pt"></colgroup>
<tbody>
<tr height="20" style="height:15pt">
<td width="64" height="20" align="right" style="height:15pt; width:48pt"><strong>0.4</strong></td>
</tr>
<tr height="20" style="height:15pt">
<td height="20" align="right" style="height:15pt">0</td>
</tr>
<tr height="20" style="height:15pt">
<td height="20" align="right" style="height:15pt"><strong>0.23</strong></td>
</tr>
<tr height="20" style="height:15pt">
<td height="20" align="right" style="height:15pt"><span style="text-decoration:underline"><strong>0.47</strong></span></td>
</tr>
<tr height="20" style="height:15pt">
<td height="20" align="right" style="height:15pt"><strong>0.235</strong></td>
</tr>
<tr height="20" style="height:15pt">
<td height="20" align="right" style="height:15pt"><strong>0.16</strong></td>
</tr>
<tr height="20" style="height:15pt">
<td height="20" align="right" style="height:15pt"><span style="text-decoration:underline"><strong>0.32</strong></span></td>
</tr>
<tr height="20" style="height:15pt">
<td height="20" align="right" style="height:15pt">0</td>
</tr>
<tr height="20" style="height:15pt">
<td height="20" align="right" style="height:15pt">
<p><strong>0.17</strong></p>
<p> </p>
</td>
</tr>
</tbody>
</table>
<p>Thus, taking the sum gives:</p>
<table border="0" cellspacing="0" cellpadding="0" width="77">
<tbody>
<tr height="20">
<td width="77" height="20" align="right" style="height:15pt; width:58pt">8.8445E-05</td>
</tr>
</tbody>
</table>
<p>Or, taking the inverse gives: 11306.48394</p>
<p>Or, Ivanov's chances of winning 6 out of 9 points is about 1 in 11306.</p>
<p>This is a more direct and if I've not made any mistakes more accurate estimate of Ivanov's chances of winning fourth place in the Zadar Open.</p>
</div>jayrodrequezWed, 09 Jan 2013 02:42:59 GMTNew Post: What is the probability Ivanov Borislav won fairly at the Zadar Open? Slim but not impossible 20130109024259ANew Post: What is the probability Ivanov Borislav won fairly at the Zadar Open? Slim but not impossiblehttp://swisschesswinpredict.codeplex.com/discussions/428937<div style="line-height: normal;">
<p>For background, please refer to this article at Chessbase: http://www.chessbase.com/newsdetail.asp?newsid=8751</p>
<p><strong>For the conclusion, skip to the bottom.</strong></p>
<p>Ivanov Borislav, unrated, scored 6.0/9 points against average opposition of 2500 Elo. Is this impossible? No, but it is unlikely.</p>
<p>While the present program only calculates the percentage of times an underdog can win a tournament, it can be used to suggest how likely an underdog might be a fourth place finisher that nearly won. To do so, we must make some adjustments.</p>
<p>First, we note that Ivanov Borislav could have won outright with one extra win. To account for this, let us assume that he is in fact not 2227 Elo, but much stronger, like 2300 Elo. Intuitively, these extra 73 points should give him a decent
chance of winning an extra game, which would have put him in first place (intuitively, I am guessing here, but that sounds reasonable). This should allow the program to work properly since, as I stated, the program only counts the percent outright wins
of a tournament, not runner up.</p>
<p>So, using a spreadsheet or statistic calculator, from the crosstable of players in the above link, you can calculate for all players, assuming Borislav is 2300 Elo (not 2227), the following:</p>
<p>X (avg) rating for all players = 2526 Elo</p>
<p>Sigma (Std. Dev) for all players = 98 Elo</p>
<p>Number of Players = 16 (input 15 into program at prompt since it adds one to total)</p>
<p>Number of game played in tournament: 9 games</p>
<p>Number of Iterations: input 1M = 1000000</p>
<p>On a fast PC, about 2.25 minutes later, you get the below answers (I ran the program three times):</p>
<p>1) Subject Player of Elo 2300 won 401 times out of 1000000 iterations, a total of 0.0% percent [works out to 1 in 2494 odds, or 1:2494]<br>
<br>
2) Subject Player of Elo 2300 won 204 times out of 1000000 iterations, a total of 0.0% percent [works out to 1 in 4902 odds, or 1:4902]<br>
<br>
3) Subject Player of Elo 2300 won 277 times out of 1000000 iterations, a total of 0.0% percent [works out to 1 in 3610 odds, or 1:3610]</p>
<p>The program gives different outputs each time, since, for ease in programming, the players are simulated as a Gaussian distribution, rather than each player Elo being input, see the other comments in this discussion and the user manual. In fact, when
running these simulations it pays to watch how high the highest simulated player is--if this player is much higher than the actual highest rated player (in this case two players rated
<strong>2638</strong>), the simulation may not be accurate (I will explain this in another post and below).</p>
<p>So it's possible, not likely, given these assumptions, that Ivanov Borislav did indeed win as much as he did, without cheating.</p>
<p>Being even more generous (i.e., giving Borislav even more benefit of the doubt), we can say that in fact his Elo is closer to 2350 rather than 2227. With this assumption, the average rating X (avg) = 2529 Elo, Sigma (Std. Dev) = 90 Elo and now running
the program as above gives:</p>
<p><br>
1) Subject Player of Elo 2350 won 147 times out of 1000000 iterations, a total of 0.0% percent [works out to 1 in 6802 odds, or 1:6802]{highest rated player = 2762 Elo}<br>
<br>
2) Subject Player of Elo 2350 won 1462 times out of 1000000 iterations, a total of 0.1% percent [works out to 1 in 684 odds, or 1:684]{<span style="text-decoration:underline">highest rated player =
<strong>2614</strong> Elo</span>}<br>
<br>
3) Subject Player of Elo 2350 won 2013 times out of 1000000 iterations, a total of 0.2% percent [works out to 1 in 497 odds, or 1:497]{<span style="text-decoration:underline">highest rated player =
<strong>2613</strong> Elo</span>}</p>
<p>I underlined outputs #2 and #3 since the highest rated player in the simulation was smaller than the actual
<strong>2638</strong> Elo players in the Zadar Open. What this means is that we can be more sure that the simulation is accurate, since I have found in practice if there is one highly ranked player, statistically that player will 'skew' the final wins
by 'winning most all the tournaments' in the simulation. Hence, for cases #2 and #3, we can be sure this is not the case, since in fact these simulations had highest rated players that were weaker (i.e. 2613 and 2614 Elo) than the actual 2638 Elo players
in the Zadar Open.</p>
<p>Thus, even more favorably for Ivanov Borislav, one can say that he would have about 1:497 or 1:684 odds of winning, if his true Elo really rated 2350 Elo rather than 2227 Elo. Or roughly, taking the average,<strong> 1:590 odds of winning the Zadar
Open</strong>.</p>
<p><br>
Hence, if his Elo is in fact 2227, not 2350 Elo, the odds of coming in fourth place, rather than winning (which is what we calculated above), is probably not that much different from the above (my intuition).</p>
<p><strong>In conclusion, Ivanov Borislav might have approximately a 1 in 600 chance of doing as well as he did in the Zadar Open, which was fourth place, which does not defy the laws of chance, albeit it is not likely and his style of playing does seem like
that of a computer, as pointed out in the YouTube video </strong>http://www.youtube.com/watch?feature=player_embedded&v=Jr0J8SPENjM<strong> by Valeri Lilov.</strong></p>
<p> </p>
<p> </p>
</div>JayRodrequezWed, 09 Jan 2013 00:45:46 GMTNew Post: What is the probability Ivanov Borislav won fairly at the Zadar Open? Slim but not impossible 20130109124546ANew Post: Calculating how many iterations are needed to find a big upset? (Formative Studies)https://swisschesswinpredict.codeplex.com/discussions/412654<div style="line-height: normal;">
<p>How many iterations do you need before you find a big upset winner?<br>
<br>
The question of how many iterations you need before you can spot a big upset winner of a Swiss tournament is answered by statistics called formative studies. Formative studies answer the question: how big should your sample size be before you find
a single instance of the event under consideration? </p>
<p><br>
The formula where you want to be XYZ% sure you find the correct sample size (or iterations in our case) for finding at least one event (or big upset winner in our case) is given by:<br>
P (x >= 1) = 1 – (1-p)^N<br>
<br>
where p is the probability of an event (e.g., the probability of tossing a coin and getting heads) n is the number of opportunities for the event to occur (e.g., the number of coin tosses), and P(x ≥1) is the probability of the event occurring at least once
in N tries (or iterations), and ^N is a quantity raised to the Nth power<br>
<br>
Solving for “N” gives<br>
N = ln (1 - P (x >= 1)) / ln (1-p) <br>
where ln = natural logarithm. </p>
<p>Conventionally, we choose P(x ≥1) to be 80% (we want to be 80% sure of seeing at least one event), so the formulae for N, the number of tries (or iterations) necessary to give 80% chance of seeing an event, say a big upset winner is:</p>
<p><br>
N = ln (0.2) / ln (1-p) = -1.61 / ln(1-p) {“EQUATION ‘L’”}<br>
<br>
We can use this formula in actual examples to illustrate.<br>
<br>
<strong>Example 1</strong>: Suppose you have a fair coin that flips heads or tails. How many times should you flip the coin before you are 80% sure that you’ll get at least three heads out of four tries?
<br>
<br>
Answer: since coin flips are independent events, we can use a formula for summing the probability of getting at least three heads out of four flips as the probability of getting three heads out of four tries plus the probability of getting four
heads out of four tries, with the probability of getting heads or tails as 50% = 0.50, so: where P=probability: P(>= 3 H | 4 tries) = P(3 heads (H) out of 4 tries) + P(4 H out of 4 tries) = where p=Prob of heads = 0.50 = 1-p=Prob of tails; n=number
of tries, ^=’raised to the power’ hence 2^3 =8, so probability of getting at least three heads out of four tries:</p>
<p><br>
The probability of obtaining k heads out of n flips is given by the binomial formula<br>
P(X = k) = n!/[k!(n-k)!] p^k (1 - p)^(n-k) {“EQUATION ‘M’”}</p>
<p><br>
= (4)*[(0.5)^3*(0.5)] + (1)*(0.5)^4 = 0.25 + 0.0625 = 0.3125 = 31.25%</p>
<p><br>
So using “EQUATION ‘L’” we get: <br>
N = -1.61/ln(1-0.3125) = 4.295 = 5 times (rounding to the next integer). So we must do five iterations of flipping the coin four times in a row before we see (with 80% probability) at least one occurrence of a coin toss having at least three heads out
of four flips.<br>
<br>
<strong>Example 2</strong>: same as example 1 but for at least 9 heads out of 10 coin flips.<br>
<br>
Answer: from the previous example, using “EQUATION M”:<br>
(10)*[(0.5)^9*(0.5)] + (0.5)^10<br>
= 0.0107421875 = 1.07%, so using “EQUATION ‘L’” we get:<br>
N = -1.61/ln(1-0.01074) = 149.0178709 = 150 times (rounding to the next integer). So we must do 150 iterations of flipping the coin ten times in a row before we see (with 80% probability) at least one occurrence of a coin toss having at least
nine heads out of ten flips.<br>
<br>
<strong>Example 3</strong>: How many iterations should you run Swiss Chess Tournament Winner Prediction Simulator (SCTWPS) in order to get at least one big upset winner having an Elo that is 200 Elo points lower than the average, which has a standard
deviation of 100 Elo points, when 10 games are played in the tournament, and a large number of players (30 to 100) are involved?
<br>
<br>
Answer: first you run the SCTWPS simulation with the following parameters to get a feel for the statistics: The population mean is: 2000.0, and std Dev: 100.00, The Player Elo is: 1800, The number games played: 10, The number iterations: 10000.
Run it with a good number of players, say 30 to 100, to get a nice distribution. Observe in the SCTWPS.txt output file for the winning players that the average opposition is between 2000 and 2100 Elo for the winners, and to win the tournament you need
a total score of between 8 and 10 points, or at least 8 wins or more should win the tournament.
<br>
Observing the output in SCTWPS.txt for the average opposition shows about 2050 Elo is the opposition, while you can deduce that to beat the opposition, if you are rated 1800, will require an Elo somewhere greater than this (the Performance Elo stats are not
reliable for figuring what the Elo that should be used however). Pick an Elo of say 350 points greater, so 1800 Elo + 350 = 2150 Elo. From the Table 1 below, which is from the source code for SCTWPS (class3.cs), an 350 Elo gives about 11% to 12%
chance of success for the weaker player (from the table (351 Elo = 11% to 12% chance of winning), here the target 1800 Elo player.
<br>
If you choose 12% and use “Equation M”, with the following values: over 10 games, you must win 8, 9 or 10 games, with p= 0.12 (12%)<br>
k=8, n=10 gives 1.4984E-06 for P(X = 8)<br>
k=9, n=10 gives 4.54061E-08 for P(X=9)<br>
k=10, n=10 gives 6.19174E-10 for P(X=10)<br>
Summing up these events, as is proper since they don’t depend on each other, gives the total odds of such a weak player, rated 1800, of winning with an Elo of 350 points higher, or 2150 Elo, as: 1.54443E-06<br>
Substituting this number into “Equation L” gives: 1,042,095 iterations are needed before we have 80% probability of seeing at least one win by the 1800 Elo target player. So for these parameters, to see any big upsets you should run the SCTWPS program
for 1M iterations, which is the maximum iterations allowed.<br>
<br>
When you are doing formative studies and looking for big upsets the Equations L and M are very sensitive to inputs. This can only be found out from trial and error. For example, picking 11% as the input for Equation M gives a total probability for
K=8,9 and 10 of: 7.85317E-07 and in Equation L: 2,049,412 iterations needed to get at least one ‘hit’ with 80% probability.<br>
Hence, this gives the user a clue that to find ‘big upsets’ involving a target player having Elo of 1800 that is 200 Elo points lower than the mean of 2000 Elo, having a standard deviation of 100 Elo points, and with 10 games in the Swiss tournament, where
to win you need from between 8 to 10 points, you need to run the iterations at least 1M times, which is the limit of the SCTWPS program. Hence, instead of choosing 10000 iterations, choose 1M iterations, and, about 16 minutes later on an Intel Core 2
Duo chip, the output indeed should show, a good portion of the time, that the target 1800 Elo player does win. And indeed, one such listing where 100 players played is shown here:<br>
<br>
Subject Player of Elo 1800 won 4 times out of 1000000 iterations, a total of 0.0% percent<br>
Winning Players within 50 Elo of Subject player (1750 to 1850) won 41 times out of 1000000 iterations, a total of 0.0%
<br>
<br>
From the above example it should be clear that a severe underdog, having an Elo of say three sigma below the mean, would almost never be shown to win any Swiss tournament having a sizable number of games (say 10 games, as in the above example) given that the
iterations of the SCTWPS program stops at 1 million. You would need many more iterations to find such a big upset. For example using an Excel spreadsheet the following iterations are needed for the same sample as above but with an Elo of 1700 rather
than 1800, so 400 Elo = 8.5% is the difference: total probability (Eq. M): 1.048E-07 and, iterations from Eq.L: 15,357,213 (15 M). Hence you would have to run the program 15 times at the maximum number of iterations allowed, 1M, just to have an
80% chance of seeing at least one such big upset. In fact, the program does not allow Elos to be entered that are less than 3 sigma below the mean for this reason. </p>
<p><br>
However, if the tournament was short (few games played, say four games), and the standard deviation is big enough, you can simulate the chances of an upset, which increase since the number of games that need to be won is much smaller, and thus a weak player
can have a run of ‘good luck’ and string together enough upset wins to win the entire tournament. Thus, for n=6 games in the tournament, an average Elo of 2000, a standard deviation of 100 points, a target player Elo of 1700, 30 players, and 1M iterations
we get running the program this output: <br>
<br>
Subject Player of Elo 1700 won 52 times out of 1000000 iterations, a total of 0.0% percent<br>
Winning Players within 50 Elo of Subject player (1650 to 1750) won 52 times out of 1000000 iterations, a total of 0.0%<br>
Winning Players having an Elo below: 1800, below 2 sigmas of mean, won 758 out of 1000000 iterations, a total of: 0.1%<br>
<br>
Conclusion: to find big upsets, pick a tournament with a small number of games.<br>
<br>
Jay<br>
<br>
TABLE 1:<br>
if (pW < 0.01) { rd = 5555; return rd; }<br>
if (pW >= 0.01 && pW < 0.02) { rd = 677; return rd; }<br>
if (pW >= 0.02 && pW < 0.03) { rd = 589; return rd; }<br>
if (pW >= 0.03 && pW < 0.04) { rd = 538; return rd; }<br>
if (pW >= 0.04 && pW < 0.05) { rd = 501; return rd; }<br>
if (pW >= 0.05 && pW < 0.06) { rd = 470; return rd; }<br>
if (pW >= 0.06 && pW < 0.07) { rd = 444; return rd; }<br>
if (pW >= 0.07 && pW < 0.08) { rd = 422; return rd; }<br>
if (pW >= 0.08 && pW < 0.09) { rd = 401; return rd; }<br>
if (pW >= 0.09 && pW < 0.10) { rd = 383; return rd; }<br>
if (pW >= 0.10 && pW < 0.11) { rd = 366; return rd; }<br>
if (pW >= 0.11 && pW < 0.12) { rd = 351; return rd; }<br>
if (pW >= 0.12 && pW < 0.13) { rd = 336; return rd; }<br>
if (pW >= 0.13 && pW < 0.14) { rd = 322; return rd; }<br>
if (pW >= 0.14 && pW < 0.15) { rd = 309; return rd; }<br>
if (pW >= 0.15 && pW < 0.16) { rd = 296; return rd; }<br>
if (pW >= 0.16 && pW < 0.17) { rd = 284; return rd; }<br>
if (pW >= 0.17 && pW < 0.18) { rd = 273; return rd; }<br>
if (pW >= 0.18 && pW < 0.19) { rd = 262; return rd; }<br>
if (pW >= 0.19 && pW < 0.20) { rd = 251; return rd; }<br>
if (pW >= 0.20 && pW < 0.21) { rd = 240; return rd; }<br>
if (pW >= 0.21 && pW < 0.22) { rd = 230; return rd; }<br>
if (pW >= 0.22 && pW < 0.23) { rd = 220; return rd; }<br>
if (pW >= 0.23 && pW < 0.24) { rd = 211; return rd; }<br>
if (pW >= 0.24 && pW < 0.25) { rd = 202; return rd; }<br>
if (pW >= 0.25 && pW < 0.26) { rd = 193; return rd; }<br>
if (pW >= 0.26 && pW < 0.27) { rd = 184; return rd; }<br>
if (pW >= 0.27 && pW < 0.28) { rd = 175; return rd; }<br>
if (pW >= 0.28 && pW < 0.29) { rd = 166; return rd; }<br>
if (pW >= 0.29 && pW < 0.30) { rd = 158; return rd; }<br>
if (pW >= 0.30 && pW < 0.31) { rd = 149; return rd; }<br>
if (pW >= 0.31 && pW < 0.32) { rd = 141; return rd; }<br>
if (pW >= 0.32 && pW < 0.33) { rd = 133; return rd; }<br>
if (pW >= 0.33 && pW < 0.34) { rd = 125; return rd; }<br>
if (pW >= 0.34 && pW < 0.35) { rd = 117; return rd; }<br>
if (pW >= 0.35 && pW < 0.36) { rd = 110; return rd; }<br>
if (pW >= 0.36 && pW < 0.37) { rd = 102; return rd; }<br>
if (pW >= 0.37 && pW < 0.38) { rd = 95; return rd; }<br>
if (pW >= 0.38 && pW < 0.39) { rd = 87; return rd; }<br>
if (pW >= 0.39 && pW < 0.40) { rd = 80; return rd; }<br>
if (pW >= 0.40 && pW < 0.41) { rd = 72; return rd; }<br>
if (pW >= 0.41 && pW < 0.42) { rd = 65; return rd; }<br>
if (pW >= 0.42 && pW < 0.43) { rd = 57; return rd; }<br>
if (pW >= 0.43 && pW < 0.44) { rd = 50; return rd; }<br>
if (pW >= 0.44 && pW < 0.45) { rd = 43; return rd; }<br>
if (pW >= 0.45 && pW < 0.46) { rd = 36; return rd; }<br>
if (pW >= 0.46 && pW < 0.47) { rd = 29; return rd; }<br>
if (pW >= 0.47 && pW < 0.48) { rd = 21; return rd; }<br>
if (pW >= 0.48 && pW < 0.49) { rd = 14; return rd; }<br>
if (pW >= 0.49 && pW <= 0.50) { rd = 5; return rd; }</p>
</div>JayRodrequezFri, 21 Dec 2012 01:30:36 GMTNew Post: Calculating how many iterations are needed to find a big upset? (Formative Studies) 20121221013036ANew Post: Monte Carlo Error and how to decrease ithttp://swisschesswinpredict.codeplex.com/discussions/406020<div style="line-height: normal;">
<p>From probability theory, the error in a Monte Carlo simulation is given by the formula: calculation error = SQRT((D/N)), where D= a constant and N = the number of trials</p>
<p>So, if you want to decrease the error by a factor of ten, to get another significant figure of accuracy (say from 17% to 17.3%), then you must increase the number of trials, or iterations, by 100. So to go from 17% with 1000 iterations to 17.X% in
accuracy, you must increase the iterations by a factor of 100, to 100000 iterations.</p>
</div>JayRodrequezFri, 07 Dec 2012 22:06:27 GMTNew Post: Monte Carlo Error and how to decrease it 20121207100627PCreated Issue: Future ideas for improvement [1498]http://swisschesswinpredict.codeplex.com/workitem/1498In no particular order, possible future ideas for improvement of the program include:<br /><br />- increase the maximum Elo input allowed. The maximum Elo permitted for input is 3000 Elo, since the program is designed for simulating human play. However, machine play has pools where the Elo is over 3000. So a simple one line change in the program will allow input of Elos over 3000. A workaround is to simply subtract 1000 from the Elo of the chess machines under consideration so they are well under 3000.<br /><br />- allow for color pairings. The white pieces have superior chances of winning. Right now color is immaterial, as in the long run it should not matter to the probability of success of a player on average.<br /><br />- allow for draws. Right now draws are immaterial, as in the long run it should not matter to the probability of success of a player on average.<br /><br />- modify the win/loss lookup table to account for research that shows the Arpad Elo Gaussian system is not entirely accurate over observed play. See http://www.chessbase.com/newsdetail.asp?newsid=562 (Sonas) In this respect it will take into consideration color changes. Note the Arpad Elo and Sonas systems are nearly the same when white is rated higher than black, but, when black is rated higher than white, white does better in practice than predicted by the Arpad Elo system. But, on average, I would argue this does not matter when, as in this program, color is irrelevant. However, you will get more &quot;big upsets&quot;, with are 'path dependent', if you account for color pairings and modify the Arpad Elo system to account for this improvement seen by the higher rated white pieces.<br /><br />-- allow for various tiebreaks and see if it changes the result much (it should not). See http://en.wikipedia.org/wiki/Tie-breaking_in_Swiss-system_tournaments <br /><br />-- allow a user to input a series of Elos and have the mean and sigma computed by the program<br /><br />-- modify the program to run either on a server or to run in WPF so color graphics can easily be shown of the output<br />JayRodrequezThu, 22 Nov 2012 18:22:04 GMTCreated Issue: Future ideas for improvement [1498] 20121122062204PUpdated Wiki: Documentationhttp://swisschesswinpredict.codeplex.com/documentation?version=9<div class="wikidoc"><b>User Manual for SWISS CHESS TOURNAMENT WINNER PREDICTION SIMULATOR (SCTWPS)</b><br /><br />This program estimates the probability of a given chess player winning a Swiss-style chess tournament.<br />The user should be familiar with statistics such as the mean and standard deviation.<br /><br />The program requires from the user the following inputs:<br />--The mean Elo and the standard deviation of all the chess players in the tournament.<br />--The Player Elo = the Elo of the chosen chess player under consideration to win the tournament.<br />--The total number of chess players in the tournament<br />--The number of games to be played by each player<br />--The number of iterations that the chess simulator will run.<br /><br />The program takes from a few seconds to several hours to run, depending on the parameters chosen (bigger nos. = longer time). The user can abort the program anytime, by closing the window. A progress bar shows percent completion.<br /><br />The program outputs its main results to the screen, and optionally more data to a small text file (limited to typically ~130 kb). The results tell how often the chosen chess player wins first place, and how the other players fare.<br /><br />The program makes no changes to a user's machine, nevertheless, the user should take care to download this program from a reputable source, such as CodePlex.com (here), and run it through a virus checker and/or in a sandbox environment.<br /><br />SCTWPS PROGRAM DETAILS<br /><br />The program uses mean and sigma to form a Gaussian distribution (bell-shaped curve) of players. The players are ranked so the strongest player plays the weakest player in round 1, the second strongest plays the second weakest player, and so on. However, after the first round, players nearest in strength play each other. There is no provision against playing the same opponent twice in a row, nor any provision is made for colors or for draws (both ignored, and in the long run this should not matter).<br /><br />Tie break is used to sort players from strongest to weakest according to the following tie breaks: first, winning points; second, winning points won by a player's opponent (Solkoff tiebreak); and third, initial Elo rating. This system should give an accurate picture over many iterations. <br /><br />Program output is on the console screen and optionally the user may elect more information be placed in a small text file. The text file is limited to about 130 to 300 kb in size. <br /><br />Output is given as the % wins by: (1) the chosen player (CP), (2) all players within 50 pts of the CP, (3) all players having an Elo two sigma or greater from the mean, (4) 1-2 sigma above the mean (5) +/- 1 sigma from the mean, (6) 1-2 sigma below the mean, and, (7) 2 sigma or greater below the mean.<br /><br />Finally, the text file logs the first 10 upset wins (2+ sigma below the mean) and the first 1000 tournament wins of all winners.<br /><br />During setup, prior to the program being run, default values are given for population mean, standard deviation, number of players, number of games per player and program iterations. These default values may be chosen by hitting the Enter key. The larger the number of iterations, the more accurate is the prediction by the program.<br /><br />The user should be familiar with terms such as the mean and the standard deviation, which are found in any book on statistics. Arpad E. Elo, the inventor of the Elo system, states in the book “The Rating of Chessplayers Past & Present” (2nd. Ed., 1978) that the distribution of ratings on the 1983 USCF Rating List is, for all players, a mean of 1505 and a standard deviation (sigma) of 335, while for “established players” the mean is 1649 and the sigma is 288. Picking a large mean will make it harder for a weak player to win the tournament. Picking a large number of games to play in the tournament (up to 30 games are allowed) will also make it nearly impossible for a severe underdog to win the tournament. The best chances for an upset in a Swiss tournament is to have a small number of games and a narrow range of player strengths (sigma). <br /><br />The program should typically take a few seconds to run on a modern multi-core personal computer, but if the user inputs a large number of players (up to 500 players are allowed) and a large number of games per tournament (up to 30 games are allowed) and a large number of program iterations (up to 1 million are allowed), the program could take several hours. On an Intel Core 2 Duo the maximum number of parameters allowed took the program six hours to complete the simulation. Incidentally, due to the fact that only 1M iterations are allowed, the chances of finding an upset winner given a standard deviation of say 200 Elo points and 30 games per tournament is very small. In order to find such a winner reliably, many more iterations than 1M must be performed. In the event any large upsets occur (greater than 2 sigma), for ten or more players, the program logs the output in the text file. <br /><br />The data input by the user is checked to see if it is within legal boundaries, and if the data input would result in an unusually long time to process, the user is warned. The user may abort the program by simply closing the window of the program. A progress bar shows percent completion of the program in deciles.<br /><br />Sample output from the default values is shown below (abbreviated) for ten players with a chosen player having an Elo of 1800 and 8 games per tournament, with 1000 iterations of the tournament run. <br /><br />START SAMPLE OUTPUT<br /><br />Log, file created at time:11/14/2012 23:50:46<br />---<br /><br />The population mean is: 2000.0, and std Dev: 100.00<br />The Player Elo is: 1800<br />The number games played: 8<br />The number iterations: 1000<br />Player ID: 0, has rating: 1800.0<br />Player ID: 1, has rating: 1934.0<br />Player ID: 2, has rating: 1937.0<br />Player ID: 3, has rating: 1942.0<br />Player ID: 4, has rating: 2021.0<br />Player ID: 5, has rating: 2037.0<br />Player ID: 6, has rating: 2060.0<br />Player ID: 7, has rating: 2077.0<br />Player ID: 8, has rating: 2106.0<br />Player ID: 9, has rating: 2163.0<br /><br />Subject Player of Elo 1800 won 1 times out of 1000 iterations, a total of 0.1% percent<br />Winning Players within 50 Elo of Subject player (1750 to 1850) won 1 times out of 1000 iterations, a total of 0.1%<br />Winning Players having an Elo:2200 or greater, two sigma or greater from the mean, won 0 times out of 1000 iterations, a total of 0.0%<br />Winning Players having an Elo between:2100 and 2200, 1-2 sigma above mean, won 563 times out of 1000 iterations, a total of 56.3%<br />Winning Players having an Elo of 1900 to 2100, within 1 sigma of the mean:2000.0, won 436 out of 1000 iterations, a total of: 43.6%<br />Winning Players having an Elo of 1800 to 1900, between 1 to 2 sigmas below mean (2000), won 1 out of 1000 iterations, a total of: 0.1%<br />Winning Players having an Elo below: 1800, below 2 sigmas of mean, won 0 out of 1000 iterations, a total of: 0.0%<br />.................................<br />after 8 rounds per iteration, and 1000 iterations<br /> <br />First 1000 winners displayed (max.)<br />Winning Player Stats (ID:9, Rating:2163, Round:0, Total Score:7, Avg. Elo Opponent:1950.0,Performance Elo:2286.0)<br />Winning Player Stats (ID:9, Rating:2163, Round:1, Total Score:6, Avg. Elo Opponent:2028.5,Performance Elo:2221.5)<br /><br />… {deletions}...<br /><br />Winning Player Stats (ID:8, Rating:2106, Round:385, Total Score:6, Avg. Elo Opponent:2048.6,Performance Elo:2241.6)<br />Winning Player Stats (ID:0, Rating:1800, Round:386, Total Score:6, Avg. Elo Opponent:2102.8,Performance Elo:2295.8)<br />The winning player was also the chosen player and has the following stats for the round 386<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 9,2163.0,W<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 9,2163.0,W<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 8,2106.0,W<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 2,1937.0,W<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 4,2021.0,W<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 8,2106.0,L<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 9,2163.0,L<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 9,2163.0,W<br />...end chosen player data...<br />Winning Player Stats (ID:4, Rating:2021, Round:387, Total Score:6, Avg. Elo Opponent:1975.9,Performance Elo:2168.9)<br /><br />...{deletions}...<br /><br />Winning Player Stats (ID:7, Rating:2077, Round:998, Total Score:6, Avg. Elo Opponent:2077.9,Performance Elo:2270.9)<br />Winning Player Stats (ID:1, Rating:1934, Round:999, Total Score:6, Avg. Elo Opponent:2038.3,Performance Elo:2231.3)<br /><br />Program elapsed time: 00:00:00.6094112<br /><br />---<br /><br />END OF SAMPLE OUTPUT<br /><br />For the chosen player (here having an Elo of 1800) the percent first place win statistics are shown, and for all players plus or minus 50 Elo points from the chosen player's Elo (here 1750 to 1850). Given the low rating of the chosen player, and the small number of iterations (1000), there was only one first place win. To give a more accurate measure of the probability of winning for such a low rated player, the number of iterations should be increased, up to the maximum of one million iterations.<br /><br />Winning percent statistics for all players who won at the following intervals are shown: more than two standard deviations (sigma) above the mean, within 1-2 sigma above the mean, plus or minus one sigma from the mean, within 1-2 sigma below the mean, and more than two sigma below the mean (these are big upsets).<br /><br />Since there were no players having an Elo greater than 2 sigma above the mean, no such players won. Increasing the number of players from 10 to say 100 would give a few such players. Having a few such highly rated players will result in them winning first place in a significant percent of the iterations.<br /><br />For the first 1000 iteration simulation winners, the statistics recorded are: winning player ID, rating, round number the win occurred in, total score (Wins = 1 point, Losses = 0, draws are not allowed since statistically they do not matter in the long run, on average), average opponent Elo faced by the winner, and the performance Elo by the winner.<br /><br />Notice that no 'big upset winners' with an Elo of less than two sigma from the mean were found above. This is because the no such players existed. In general, if the number of iterations is too small, the program will not reliably capture such outliers. To find big upsets, you must decrease the number of games played in the tournament, and/or decrease the standard deviation of the population, and/or increase the number of iterations for the simulation (up to a maximum of 1M iterations). Further, there must be at least 10 players in the tournament. In the event such upset winners are found, the text file would have the following output for example:<br /><br />START OF SAMPLE OUTPUT FOR BIG UPSET WINNERS<br /><br />The list of top ten upsets (Elo less than 2 sigma below mean) for 10 or more players<br />Upset Winning Player Stats (ID:0, Rating:1554, Round:38159, Total Score:8,Avg. Elo Opponent:1849.7,Performance Elo:2100.7)<br />The upset player has the following stats for the round<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 48,1942.0,W<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 48,1942.0,L<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 48,1942.0,L<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 17,1755.0,W<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 17,1755.0,W<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 28,1810.0,W<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 42,1917.0,W<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 15,1746.0,W<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 6,1673.0,W<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 51,2015.0,W<br />...end upset player data...<br /><br />END OF SAMPLE OUTPUT FOR BIG UPSET WINNERS<br /><br />For these big upset winners, the statistics for the winning player are given as: ID, rating, round #, total score, average Elo of opponent and performance Elo of the winner; further, for each win or loss, the opponent ID, the opponent Elo, and the result (W=Win, L=Loss) are given for each opponent in the round. The order of opponents displayed is from most recent to least recent, thus the Upset Winning Player of ID:0 played the higher rated player of ID:51, rated 2015 Elo, then last played the player of ID: 48, rated 1942 Elo.<br /><br />In the event the user's chosen player wins, the text file would have the following entry (if the win occurs in the first 1000 wins):<br /><br />SAMPLE WHERE CHOSEN PLAYER WINS TOURNAMENT:<br />Winning Player Stats (ID:4, Rating:1999, Round:11, Total Score:6, Avg. Elo Opponent:2062.3,Performance Elo:2255.3)<br />The winning player was also the chosen player and has the following stats for the round 11<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 2,1953.0,L<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 9,2154.0,W<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 9,2154.0,L<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 0,1848.0,W<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 9,2154.0,W<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 9,2154.0,W<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 6,2043.0,W<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 5,2038.0,W<br />...end chosen player data...<br /><br />With the stats as before. At the very bottom of the text file is given the time elapsed for the execution of the program, in hour:minute:second format.<br /><br />Future improvements to the program might be to allow a user to input, in a text file, the actual players in a tournament rather than approximate them as a Gaussian distribution; to allow draws to count (though that should not change the statistics in the long run), and to show a graphical output rather than text.<br /><br />The program is stored at http://swisschesswinpredict.codeplex.com/, including the source code, and is freeware released AS IS AND WITHOUT ANY WARRANTY OF ANY KIND. It is written in Visual Studio C#.<br /><br />(c) 2012, by JayRodrequez</div><div class="ClearBoth"></div>JayRodrequezSun, 18 Nov 2012 20:44:29 GMTUpdated Wiki: Documentation 20121118084429PUpdated Wiki: Documentationhttp://swisschesswinpredict.codeplex.com/documentation?version=8<div class="wikidoc"><b>User Manual for SWISS CHESS TOURNAMENT WINNER PREDICTION SIMULATOR (SCTWPS)</b><br /><br />This program estimates the probability of a given chess player winning a Swiss-style chess tournament.<br />The user should be familiar with statistics such as the mean and standard deviation.<br /><br />The program requires from the user the following inputs:<br />--The mean Elo and the standard deviation of all the chess players in the tournament.<br />--The Player Elo = the Elo of the chosen chess player under consideration to win the tournament.<br />--The total number of chess players in the tournament<br />--The number of games to be played by each player<br />--The number of iterations that the chess simulator will run.<br /><br />The program takes from a few seconds to several hours to run, depending on the parameters chosen (bigger nos. = longer time). The user can abort the program anytime, by closing the window. A progress bar shows percent completion.<br /><br />The program outputs its main results to the screen, and optionally more data to a small text file (limited to typically ~130 kb). The results tell how often the chosen chess player wins first place, and how the other players fare.<br /><br />The program makes no changes to a user's machine, nevertheless, the user should take care to download this program from a reputable source, such as CodePlex.com (here), and run it through a virus checker and/or in a sandbox environment.<br /><br />SCTWPS PROGRAM DETAILS<br /><br />The program uses mean and sigma to form a Gaussian distribution (bell-shaped curve) of players. The players are ranked so the strongest player plays the weakest player in round 1, the second strongest plays the second weakest player, and so on. However, after the first round, players nearest in strength play each other. There is no provision against playing the same opponent twice in a row, nor any provision is made for colors or for draws (both ignored, and in the long run this should not matter).<br /><br />Tie break is used to sort players from strongest to weakest according to the following tie breaks: first, winning points; second, winning points won by a player's opponent (Solkoff tiebreak); and third, initial Elo rating. This system should give an accurate picture over many iterations. <br /><br />Program output is on the console screen and optionally the user may elect more information be placed in a small text file. The text file is limited to about 130 to 300 kb in size. <br /><br />Output is given as the % wins by: (1) the chosen player (CP), (2) all players within 50 pts of the CP, (3) all players having an Elo two sigma or greater from the mean, (4) 1-2 sigma above the mean (5) +/- 1 sigma from the mean, (6) 1-2 sigma below the mean, and, (7) 2 sigma or greater below the mean.<br /><br />Finally, the text file logs the first 10 upset wins (2+ sigma below the mean) and the first 1000 tournament wins of all winners.<br /><br />During setup, prior to the program being run, default values are given for population mean, standard deviation, number of players, number of games per player and program iterations. These default values may be chosen by hitting the Enter key. The larger the number of iterations, the more accurate is the prediction by the program.<br /><br />The user should be familiar with terms such as the mean and the standard deviation, which are found in any book on statistics. Arpad E. Elo, the inventor of the Elo system, states in the book “The Rating of Chessplayers Past & Present” (2nd. Ed., 1978) that the distribution of ratings on the 1983 USCF Rating List is, for all players, a mean of 1505 and a standard deviation (sigma) of 335, while for “established players” the mean is 1649 and the sigma is 288. Picking a large mean will make it harder for a weak player to win the tournament. Picking a large number of games to play in the tournament (up to 30 games are allowed) will also make it nearly impossible for a severe underdog to win the tournament. The best chances for an upset in a Swiss tournament is to have a small number of games and a narrow range of player strengths (sigma). <br /><br />The program should typically take a few seconds to run on a modern multi-core personal computer, but if the user inputs a large number of players (up to 500 players are allowed) and a large number of games per tournament (up to 30 games are allowed) and a large number of program iterations (up to 1 million are allowed), the program could take several hours. On an Intel Core 2 Duo the maximum number of parameters allowed took the program six hours to complete the simulation. Incidentally, due to the fact that only 1M iterations are allowed, the chances of finding an upset winner given a standard deviation of say 200 Elo points and 30 games per tournament is very small. In order to find such a winner reliably, many more iterations than 1M must be performed. In the event any large upsets occur (greater than 2 sigma), for ten or more players, the program logs the output in the text file. <br /><br />The data input by the user is checked to see if it is within legal boundaries, and if the data input would result in an unusually long time to process, the user is warned. The user may abort the program by simply closing the window of the program. A progress bar shows percent completion of the program in deciles.<br /><br />Sample output from the default values is shown below (abbreviated) for ten players with a chosen player having an Elo of 1800 and 8 games per tournament, with 1000 iterations of the tournament run. <br /><br />START SAMPLE OUTPUT<br /><br />Log, file created at time:11/14/2012 23:50:46<br />---<br /><br />The population mean is: 2000.0, and std Dev: 100.00<br />The Player Elo is: 1800<br />The number games played: 8<br />The number iterations: 1000<br />Player ID: 0, has rating: 1800.0<br />Player ID: 1, has rating: 1934.0<br />Player ID: 2, has rating: 1937.0<br />Player ID: 3, has rating: 1942.0<br />Player ID: 4, has rating: 2021.0<br />Player ID: 5, has rating: 2037.0<br />Player ID: 6, has rating: 2060.0<br />Player ID: 7, has rating: 2077.0<br />Player ID: 8, has rating: 2106.0<br />Player ID: 9, has rating: 2163.0<br /><br />Subject Player of Elo 1800 won 1 times out of 1000 iterations, a total of 0.1% percent<br />Winning Players within 50 Elo of Subject player (1750 to 1850) won 1 times out of 1000 iterations, a total of 0.1%<br />Winning Players having an Elo:2200 or greater, two sigma or greater from the mean, won 0 times out of 1000 iterations, a total of 0.0%<br />Winning Players having an Elo between:2100 and 2200, 1-2 sigma above mean, won 563 times out of 1000 iterations, a total of 56.3%<br />Winning Players having an Elo of 1900 to 2100, within 1 sigma of the mean:2000.0, won 436 out of 1000 iterations, a total of: 43.6%<br />Winning Players having an Elo of 1800 to 1900, between 1 to 2 sigmas below mean (2000), won 1 out of 1000 iterations, a total of: 0.1%<br />Winning Players having an Elo below: 1800, below 2 sigmas of mean, won 0 out of 1000 iterations, a total of: 0.0%<br />.................................<br />after 8 rounds per iteration, and 1000 iterations<br /> <br />First 1000 winners displayed (max.)<br />Winning Player Stats (ID:9, Rating:2163, Round:0, Total Score:7, Avg. Elo Opponent:1950.0,Performance Elo:2286.0)<br />Winning Player Stats (ID:9, Rating:2163, Round:1, Total Score:6, Avg. Elo Opponent:2028.5,Performance Elo:2221.5)<br /><br />… {deletions}...<br /><br />Winning Player Stats (ID:8, Rating:2106, Round:385, Total Score:6, Avg. Elo Opponent:2048.6,Performance Elo:2241.6)<br />Winning Player Stats (ID:0, Rating:1800, Round:386, Total Score:6, Avg. Elo Opponent:2102.8,Performance Elo:2295.8)<br />The winning player was also the chosen player and has the following stats for the round 386<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 9,2163.0,W<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 9,2163.0,W<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 8,2106.0,W<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 2,1937.0,W<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 4,2021.0,W<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 8,2106.0,L<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 9,2163.0,L<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 9,2163.0,W<br />...end chosen player data...<br />Winning Player Stats (ID:4, Rating:2021, Round:387, Total Score:6, Avg. Elo Opponent:1975.9,Performance Elo:2168.9)<br /><br />...{deletions}...<br /><br />Winning Player Stats (ID:7, Rating:2077, Round:998, Total Score:6, Avg. Elo Opponent:2077.9,Performance Elo:2270.9)<br />Winning Player Stats (ID:1, Rating:1934, Round:999, Total Score:6, Avg. Elo Opponent:2038.3,Performance Elo:2231.3)<br /><br />Program elapsed time: 00:00:00.6094112<br /><br />---<br /><br />END OF SAMPLE OUTPUT<br /><br />For the chosen player (here having an Elo of 1800) the percent first place win statistics are shown, and for all players plus or minus 50 Elo points from the chosen player's Elo (here 1750 to 1850). Given the low rating of the chosen player, and the small number of iterations (1000), there was only one first place win. To give a more accurate measure of the probability of winning for such a low rated player, the number of iterations should be increased, up to the maximum of one million iterations.<br /><br />Winning percent statistics for all players who won at the following intervals are shown: more than two standard deviations (sigma) above the mean, within 1-2 sigma above the mean, plus or minus one sigma from the mean, within 1-2 sigma below the mean, and more than two sigma below the mean (these are big upsets).<br /><br />Since there were no players having an Elo greater than 2 sigma above the mean, no such players won. Increasing the number of players from 10 to say 100 would give a few such players. Having a few such highly rated players will result in them winning first place in a significant percent of the iterations.<br /><br />For the first 1000 iteration simulation winners, the statistics recorded are: winning player ID, rating, round number the win occurred in, total score (Wins = 1 point, Losses = 0, draws are not allowed since statistically they do not matter in the long run, on average), average opponent Elo faced by the winner, and the performance Elo by the winner.<br /><br />Notice that no 'big upset winners' with an Elo of less than two sigma from the mean were found above. This is because the no such players existed. In general, if the number of iterations is too small, the program will not reliably capture such outliers. To find big upsets, you must decrease the number of games played in the tournament, and/or decrease the standard deviation of the population, and/or increase the number of iterations for the simulation (up to a maximum of 1M iterations). Further, there must be at least 10 players in the tournament. In the event such upset winners are found, the text file would have the following output for example:<br /><br />START OF SAMPLE OUTPUT FOR BIG UPSET WINNERS<br /><br />The list of top ten upsets (Elo less than 2 sigma below mean) for 10 or more players<br />Upset Winning Player Stats (ID:0, Rating:1554, Round:38159, Total Score:8,Avg. Elo Opponent:1849.7,Performance Elo:2100.7)<br />The upset player has the following stats for the round<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 48,1942.0,W<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 48,1942.0,L<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 48,1942.0,L<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 17,1755.0,W<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 17,1755.0,W<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 28,1810.0,W<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 42,1917.0,W<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 15,1746.0,W<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 6,1673.0,W<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 51,2015.0,W<br />...end upset player data...<br /><br />END OF SAMPLE OUTPUT FOR BIG UPSET WINNERS<br /><br />For these big upset winners, the statistics for the winning player are given as: ID, rating, round #, total score, average Elo of opponent and performance Elo of the winner; further, for each win or loss, the opponent ID, the opponent Elo, and the result (W=Win, L=Loss) are given for each opponent in the round. The order of opponents displayed is from most recent to least recent, thus the Upset Winning Player of ID:0 played the higher rated player of ID:51, rated 2015 Elo (as always occurs in the first round), then last played the player of ID: 48, rated 1942 Elo.<br /><br />In the event the user's chosen player wins, the text file would have the following entry (if the win occurs in the first 1000 wins):<br /><br />SAMPLE WHERE CHOSEN PLAYER WINS TOURNAMENT:<br />Winning Player Stats (ID:4, Rating:1999, Round:11, Total Score:6, Avg. Elo Opponent:2062.3,Performance Elo:2255.3)<br />The winning player was also the chosen player and has the following stats for the round 11<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 2,1953.0,L<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 9,2154.0,W<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 9,2154.0,L<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 0,1848.0,W<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 9,2154.0,W<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 9,2154.0,W<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 6,2043.0,W<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 5,2038.0,W<br />...end chosen player data...<br /><br />With the stats as before. At the very bottom of the text file is given the time elapsed for the execution of the program, in hour:minute:second format.<br /><br />Future improvements to the program might be to allow a user to input, in a text file, the actual players in a tournament rather than approximate them as a Gaussian distribution; to allow draws to count (though that should not change the statistics in the long run), and to show a graphical output rather than text.<br /><br />The program is stored at http://swisschesswinpredict.codeplex.com/, including the source code, and is freeware released AS IS AND WITHOUT ANY WARRANTY OF ANY KIND. It is written in Visual Studio C#.<br /><br />(c) 2012, by JayRodrequez</div><div class="ClearBoth"></div>JayRodrequezSun, 18 Nov 2012 20:43:20 GMTUpdated Wiki: Documentation 20121118084320PNew Post: Finding Big Upsets - how to search for them in hypothetical tournamentshttps://swisschesswinpredict.codeplex.com/discussions/403606<div style="line-height: normal;">
<p>Since the program involves Monte Carlo simulation you will not get the same output every time you run the program, but it will vary. With enough iterations however the same percentage of wins will appear on average for most of the common scenarios,
such as the favorite winning a Swiss style tournament. But it's interesting to hunt for rare upsets in hypothetical tournaments, where a player with a Elo well below the mean, such as two standard deviations (sigma) below the mean, wins the Swiss tournament.
</p>
<p>When hunting for these rare upsets the number of games played in the tournament should be kept low. Below is an example having the following parameters: 500 players, The population mean is: 2000.0, and std Dev: 100.00 The Player Elo
is: 1850; The number games played: 6; The number iterations: 110000</p>
<p>After about 6.5 minutes on an Intel Core 2 Duo, the results were output as shown below. There was one upset at the Round:13662 mark. This occurred when a player rated 1784 Elo won all six games, a rare occurrence. The player
achieved these six wins against opponents rated 1978 Elo. It is unlikely that five wins would have won the tournament for such a comparatively low rated player (given the rest of the field), but rather it is more likely the player had to win
every game. This is because in the event of a tie on won/loss points, the second and third criteria for tiebreak are opponent's scores (Solkoff tiebreak) and initial Elo. Likely winning just five games out of six would have resulted in this lower
rated player losing on tiebreaks to a stronger player who also won five games but played stronger opponents and has a higher initial Elo rating.</p>
<p>The round-by-round scores for all six games in the tournament for this big upset player are shown below, and notice this player beat 2126 Elo and 2196 Elo players to win.</p>
<p>To have a chance of scoring upsets enough players must be present so that the Gaussian distribution has player Elos below two sigmas from the mean. In the below example there are 14 such players (below 1800 Elo). However, it is a balancing act
in choosing the right distribution: if you enter too big a sigma value, you will create such strong players that they will monopolize the tournament and win nearly every match simulation. Even in the below simulation the 7 players out of 500 that
had an Elo two sigmas above the mean (namely, above 2200 Elo) won 15042 times out of 110000 iterations, a total of 13.7%, even though they only constituted 7/500 = 1.4% of the player pool. </p>
<p>Entering the maximum allowed parameters for the program, namely 30 games a tournament, 500 players in the tournament, 1 million iterations, and a reasonably sized sigma, will cause the program to work for a long time (six hours on a Core 2 Duo; note the
program can be safely aborted at any time by closing the window it appears in), but will not usually yield any interesting upsets. This is because there are too many games played, and the probability of scoring an upset with so many games is vanishingly small,
certainly less than the proverbial 'one in a million' (if anybody finds such a game, feel free to email me, as I've not found one yet).</p>
<p>If anybody finds any interesting upsets, feel free to post here the parameters used.</p>
<p>Jay</p>
<p>Output of a simulation (truncated to fit, only some parts of the file are reproduced): </p>
<p> Log, file created at time: 11/17/2012 7:39:32 PM---</p>
<p>The population mean is: 2000.0, and std Dev: 100.00 The Player Elo is: 1850 The number games played: 6 The number iterations: 110000</p>
<p>Player ID: 0, has rating: 1705.0</p>
<p>Player ID: 1, has rating: 1725.0</p>
<p>Player ID: 2, has rating: 1730.0</p>
<p>Player ID: 3, has rating: 1730.0</p>
<p>Player ID: 4, has rating: 1733.0</p>
<p>Player ID: 5, has rating: 1759.0</p>
<p>Player ID: 6, has rating: 1777.0</p>
<p>Player ID: 7, has rating: 1780.0</p>
<p>Player ID: 8, has rating: 1784.0</p>
<p>Player ID: 9, has rating: 1784.0</p>
<p>Player ID: 10, has rating: 1787.0</p>
<p>Player ID: 11, has rating: 1790.0</p>
<p>Player ID: 12, has rating: 1790.0</p>
<p>Player ID: 13, has rating: 1795.0</p>
<p>Player ID: 14, has rating: 1801.0 </p>
<p>// deletions</p>
<p>Player ID: 36, has rating: 1853.0</p>
<p>// deletions</p>
<p>Player ID: 491, has rating: 2196.0</p>
<p>Player ID: 492, has rating: 2199.0</p>
<p>Player ID: 493, has rating: 2206.0</p>
<p>Player ID: 494, has rating: 2208.0</p>
<p>Player ID: 495, has rating: 2212.0</p>
<p>Player ID: 496, has rating: 2212.0</p>
<p>Player ID: 497, has rating: 2264.0</p>
<p>Player ID: 498, has rating: 2265.0</p>
<p>Player ID: 499, has rating: 2294.0</p>
<p><br>
Subject Player of Elo 1850 won 7 times out of 110000 iterations, a total of 0.0% percent</p>
<p>Winning Players within 50 Elo of Subject player (1800 to 1900) won 340 times out of 110000 iterations, a total of 0.3%</p>
<p>Winning Players having an Elo:2200 or greater, two sigma or greater from the mean, won 15042 times out of 110000 iterations, a total of 13.7%</p>
<p>Winning Players having an Elo between:2100 and 2200, 1-2 sigma above mean, won 45891 times out of 110000 iterations, a total of 41.7%</p>
<p>Winning Players having an Elo of 1900 to 2100, within 1 sigma of the mean:2000.0, won 48726 out of 110000 iterations, a total of: 44.3%</p>
<p>Winning Players having an Elo of 1800 to 1900, between 1 to 2 sigmas below mean (2000), won 340 out of 110000 iterations, a total of: 0.3%</p>
<p>Winning Players having an Elo below: 1800, below 2 sigmas of mean, won 1 out of 110000 iterations, a total of: 0.0%</p>
<p>.................................after 6 rounds per iteration, and 110000 iterations </p>
<p>The list of top ten upsets (Elo less than 2 sigma below mean) for 10 or more players</p>
<p>Upset Winning Player Stats (ID:9, Rating:1784, Round:13662, Total Score:6,Avg. Elo Opponent:1978.0,Performance Elo:7533.0)</p>
<p>The upset player has the following stats for the round 13662:</p>
<p>OpponentID, Rating,W/L result (W=Win; L=Loss):202,1983.0,W </p>
<p>OpponentID, Rating, W/L result (W=Win; L=Loss): 129,1937.0,W </p>
<p>OpponentID, Rating, W/L result (W=Win; L=Loss): 455,2126.0,W</p>
<p>OpponentID, Rating, W/L result (W=Win; L=Loss): 25,1831.0,W </p>
<p>OpponentID, Rating, W/L result (W=Win; L=Loss): 13,1795.0,W </p>
<p>OpponentID, Rating, W/L result (W=Win; L=Loss): 491,2196.0,W</p>
<p> ...end upset player data...</p>
<p>End of upsets list</p>
<p>First 1000 winners displayed (max.) )</p>
<p>//DELETIONS <br>
Program elapsed time: 00:06:32.6780094<br>
---</p>
</div>JayRodrequezSat, 17 Nov 2012 18:42:35 GMTNew Post: Finding Big Upsets - how to search for them in hypothetical tournaments 20121117064235PUpdated Wiki: Homehttp://swisschesswinpredict.codeplex.com/wikipage?version=6<div class="wikidoc"><b>Swiss Chess Tournament Winner Simulator</b><br />*SWISS CHESS TOURNAMENT WINNER PREDICTION SIMULATOR (SCTWPS)*<br />Program estimates the probability of a given chess player winning a Swiss-style chess tournament.<br /><br />This program estimates the probability of a given chess player winning a Swiss-style chess tournament using Monte Carlo simulation. The user should be familiar with statistics such as the mean and standard deviation.<br /><br />The program requires from the user the following inputs: <br />--The mean Elo and the standard deviation of all the chess players in the tournament.<br />--The Player Elo = the Elo of the chosen chess player under consideration to win the tournament.<br />--The total number of chess players in the tournament<br />--The number of games to be played by each player<br />--The number of iterations that the chess simulator will run.<br /><br />The program takes from a few seconds to several hours to run, depending on the parameters chosen (bigger nos. = longer time). The user can abort the program anytime, by closing the window. A progress bar shows percent completion.<br /><br />The program outputs its main results to the screen, and optionally more data to a small text file (limited to typically ~130 kb). The results tell how often the chosen chess player wins first place, and how the other players fare.<br /><br />The program makes no changes to a user's machine, nevertheless, the user should take care to download this program from a reputable source, such as CodePlex.com and run it through a virus checker and/or in a sandbox environment.</div><div class="ClearBoth"></div>JayRodrequezThu, 15 Nov 2012 22:29:40 GMTUpdated Wiki: Home 20121115102940PProject License Changedhttp://swisschesswinpredict.codeplex.com/license?LicenseHistoryId=103772Copyright (c) 2012 JayRodrequez Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.Thu, 15 Nov 2012 21:08:06 GMTProject License Changed 20121115090806PUpdated Release: Swiss Chess Tournament Winner Prediction Simulator (Nov 15, 2012)http://swisschesswinpredict.codeplex.com/releases/view/97795<div class="wikidoc"><b>Swiss Chess Tournament Winner Prediction Simulator (SCTWPS) </b><br /><br />Fully functional beta version 1. Unzip and run in any directory. Makes no changes to a user's PC.<br /><br />Please leave comments in the Discussions tab here in CodePlex<br /><br />// Contains one executable file: chessest1.exe having <br />// cryptographic hash function checksum below<br />// <br />// File Checksum Integrity Verifier version 2.05.<br />//<br /> MD5 SHA-1
<hr />---------------------------------------------------------------------<br />28ecc649c58a50e2e63823c0aadea2e2 0580dfa951520182236559ca39e25f91b6cf58e0</div><div class="ClearBoth"></div>jayrodrequezThu, 15 Nov 2012 21:03:05 GMTUpdated Release: Swiss Chess Tournament Winner Prediction Simulator (Nov 15, 2012) 20121115090305PReleased: Swiss Chess Tournament Winner Prediction Simulator (Nov 15, 2012)http://swisschesswinpredict.codeplex.com/releases/view/97795
<div class="wikidoc"><b>Swiss Chess Tournament Winner Prediction Simulator (SCTWPS)
</b><br>
<br>
Fully functional beta version 1. Unzip and run in any directory. Makes no changes to a user's PC.<br>
<br>
Please leave comments in the Discussions tab here in CodePlex<br>
<br>
// Contains one executable file: chessest1.exe having <br>
// cryptographic hash function checksum below<br>
// <br>
// File Checksum Integrity Verifier version 2.05.<br>
//<br>
MD5 SHA-1
<hr>
---------------------------------------------------------------------<br>
28ecc649c58a50e2e63823c0aadea2e2 0580dfa951520182236559ca39e25f91b6cf58e0</div>
<div></div>
Thu, 15 Nov 2012 21:03:05 GMTReleased: Swiss Chess Tournament Winner Prediction Simulator (Nov 15, 2012) 20121115090305PCreated Release: Swiss Chess Tournament Winner Prediction Simulator (Nov 15, 2012)http://swisschesswinpredict.codeplex.com/releases?ReleaseId=97795<div class="wikidoc"><b>Swiss Chess Tournament Winner Prediction Simulator (SCTWPS) </b><br /><br />Fully functional beta version 1. Unzip and run in any directory. Makes no changes to a user's PC.<br /><br />Please leave comments in the Discussions tab here in CodePlex</div><div class="ClearBoth"></div>jayrodrequezThu, 15 Nov 2012 20:58:15 GMTCreated Release: Swiss Chess Tournament Winner Prediction Simulator (Nov 15, 2012) 20121115085815PUpdated Wiki: Documentationhttp://swisschesswinpredict.codeplex.com/documentation?version=7<div class="wikidoc"><b>User Manual for SWISS CHESS TOURNAMENT WINNER PREDICTION SIMULATOR (SCTWPS)</b><br /><br />This program estimates the probability of a given chess player winning a Swiss-style chess tournament.<br />The user should be familiar with statistics such as the mean and standard deviation.<br /><br />The program requires from the user the following inputs:<br />--The mean Elo and the standard deviation of all the chess players in the tournament.<br />--The Player Elo = the Elo of the chosen chess player under consideration to win the tournament.<br />--The total number of chess players in the tournament<br />--The number of games to be played by each player<br />--The number of iterations that the chess simulator will run.<br /><br />The program takes from a few seconds to several hours to run, depending on the parameters chosen (bigger nos. = longer time). The user can abort the program anytime, by closing the window. A progress bar shows percent completion.<br /><br />The program outputs its main results to the screen, and optionally more data to a small text file (limited to typically ~130 kb). The results tell how often the chosen chess player wins first place, and how the other players fare.<br /><br />The program makes no changes to a user's machine, nevertheless, the user should take care to download this program from a reputable source, such as CodePlex.com (here), and run it through a virus checker and/or in a sandbox environment.<br /><br />SCTWPS PROGRAM DETAILS<br /><br />The program uses mean and sigma to form a Gaussian distribution (bell-shaped curve) of players. The players are ranked so the strongest player plays the weakest player in round 1, the second strongest plays the second weakest player, and so on. However, after the first round, players nearest in strength play each other. There is no provision against playing the same opponent twice in a row, nor any provision is made for colors or for draws (both ignored, and in the long run this should not matter).<br /><br />Tie break is used to sort players from strongest to weakest according to the following tie breaks: first, winning points; second, winning points won by a player's opponent (Solkoff tiebreak); and third, initial Elo rating. This system should give an accurate picture over many iterations. <br /><br />Program output is on the console screen and optionally the user may elect more information be placed in a small text file. The text file is limited to about 130 to 300 kb in size. <br /><br />Output is given as the % wins by: (1) the chosen player (CP), (2) all players within 50 pts of the CP, (3) all players having an Elo two sigma or greater from the mean, (4) 1-2 sigma above the mean (5) +/- 1 sigma from the mean, (6) 1-2 sigma below the mean, and, (7) 2 sigma or greater below the mean.<br /><br />Finally, the text file logs the first 10 upset wins (2+ sigma below the mean) and the first 1000 tournament wins of all winners.<br /><br />During setup, prior to the program being run, default values are given for population mean, standard deviation, number of players, number of games per player and program iterations. These default values may be chosen by hitting the Enter key. The larger the number of iterations, the more accurate is the prediction by the program.<br /><br />The user should be familiar with terms such as the mean and the standard deviation, which are found in any book on statistics. Arpad E. Elo, the inventor of the Elo system, states in the book “The Rating of Chessplayers Past & Present” (2nd. Ed., 1978) that the distribution of ratings on the 1983 USCF Rating List is, for all players, a mean of 1505 and a standard deviation (sigma) of 335, while for “established players” the mean is 1649 and the sigma is 288. Picking a large mean will make it harder for a weak player to win the tournament. Picking a large number of games to play in the tournament (up to 30 games are allowed) will also make it nearly impossible for a severe underdog to win the tournament. The best chances for an upset in a Swiss tournament is to have a small number of games and a narrow range of player strengths (sigma). <br /><br />The program should typically take a few seconds to run on a modern multi-core personal computer, but if the user inputs a large number of players (up to 500 players are allowed) and a large number of games per tournament (up to 30 games are allowed) and a large number of program iterations (up to 1 million are allowed), the program could take several hours. On an Intel Core 2 Duo the maximum number of parameters allowed took the program six hours to complete the simulation. Incidentally, due to the fact that only 1M iterations are allowed, the chances of finding an upset winner given a standard deviation of say 200 Elo points and 30 games per tournament is very small. In order to find such a winner reliably, many more iterations than 1M must be performed. In the event any large upsets occur (greater than 2 sigma), for ten or more players, the program logs the output in the text file. <br /><br />The data input by the user is checked to see if it is within legal boundaries, and if the data input would result in an unusually long time to process, the user is warned. The user may abort the program by simply closing the window of the program. A progress bar shows percent completion of the program in deciles.<br /><br />Sample output from the default values is shown below (abbreviated) for ten players with a chosen player having an Elo of 1800 and 8 games per tournament, with 1000 iterations of the tournament run. <br /><br />START SAMPLE OUTPUT<br /><br />Log, file created at time:11/14/2012 23:50:46<br />---<br /><br />The population mean is: 2000.0, and std Dev: 100.00<br />The Player Elo is: 1800<br />The number games played: 8<br />The number iterations: 1000<br />Player ID: 0, has rating: 1800.0<br />Player ID: 1, has rating: 1934.0<br />Player ID: 2, has rating: 1937.0<br />Player ID: 3, has rating: 1942.0<br />Player ID: 4, has rating: 2021.0<br />Player ID: 5, has rating: 2037.0<br />Player ID: 6, has rating: 2060.0<br />Player ID: 7, has rating: 2077.0<br />Player ID: 8, has rating: 2106.0<br />Player ID: 9, has rating: 2163.0<br /><br />Subject Player of Elo 1800 won 1 times out of 1000 iterations, a total of 0.1% percent<br />Winning Players within 50 Elo of Subject player (1750 to 1850) won 1 times out of 1000 iterations, a total of 0.1%<br />Winning Players having an Elo:2200 or greater, two sigma or greater from the mean, won 0 times out of 1000 iterations, a total of 0.0%<br />Winning Players having an Elo between:2100 and 2200, 1-2 sigma above mean, won 563 times out of 1000 iterations, a total of 56.3%<br />Winning Players having an Elo of 1900 to 2100, within 1 sigma of the mean:2000.0, won 436 out of 1000 iterations, a total of: 43.6%<br />Winning Players having an Elo of 1800 to 1900, between 1 to 2 sigmas below mean (2000), won 1 out of 1000 iterations, a total of: 0.1%<br />Winning Players having an Elo below: 1800, below 2 sigmas of mean, won 0 out of 1000 iterations, a total of: 0.0%<br />.................................<br />after 8 rounds per iteration, and 1000 iterations<br /> <br />First 1000 winners displayed (max.)<br />Winning Player Stats (ID:9, Rating:2163, Round:0, Total Score:7, Avg. Elo Opponent:1950.0,Performance Elo:2286.0)<br />Winning Player Stats (ID:9, Rating:2163, Round:1, Total Score:6, Avg. Elo Opponent:2028.5,Performance Elo:2221.5)<br /><br />… {deletions}...<br /><br />Winning Player Stats (ID:8, Rating:2106, Round:385, Total Score:6, Avg. Elo Opponent:2048.6,Performance Elo:2241.6)<br />Winning Player Stats (ID:0, Rating:1800, Round:386, Total Score:6, Avg. Elo Opponent:2102.8,Performance Elo:2295.8)<br />The winning player was also the chosen player and has the following stats for the round 386<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 9,2163.0,W<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 9,2163.0,W<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 8,2106.0,W<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 2,1937.0,W<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 4,2021.0,W<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 8,2106.0,L<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 9,2163.0,L<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 9,2163.0,W<br />...end chosen player data...<br />Winning Player Stats (ID:4, Rating:2021, Round:387, Total Score:6, Avg. Elo Opponent:1975.9,Performance Elo:2168.9)<br /><br />...{deletions}...<br /><br />Winning Player Stats (ID:7, Rating:2077, Round:998, Total Score:6, Avg. Elo Opponent:2077.9,Performance Elo:2270.9)<br />Winning Player Stats (ID:1, Rating:1934, Round:999, Total Score:6, Avg. Elo Opponent:2038.3,Performance Elo:2231.3)<br /><br />Program elapsed time: 00:00:00.6094112<br /><br />---<br /><br />END OF SAMPLE OUTPUT<br /><br />For the chosen player (here having an Elo of 1800) the percent first place win statistics are shown, and for all players plus or minus 50 Elo points from the chosen player's Elo (here 1750 to 1850). Given the low rating of the chosen player, and the small number of iterations (1000), there was only one first place win. To give a more accurate measure of the probability of winning for such a low rated player, the number of iterations should be increased, up to the maximum of one million iterations.<br /><br />Winning percent statistics for all players who won at the following intervals are shown: more than two standard deviations (sigma) above the mean, within 1-2 sigma above the mean, plus or minus one sigma from the mean, within 1-2 sigma below the mean, and more than two sigma below the mean (these are big upsets).<br /><br />Since there were no players having an Elo greater than 2 sigma above the mean, no such players won. Increasing the number of players from 10 to say 100 would give a few such players. Having a few such highly rated players will result in them winning first place in a significant percent of the iterations.<br /><br />For the first 1000 iteration simulation winners, the statistics recorded are: winning player ID, rating, round number the win occurred in, total score (Wins = 1 point, Losses = 0, draws are not allowed since statistically they do not matter in the long run, on average), average opponent Elo faced by the winner, and the performance Elo by the winner.<br /><br />Notice that no 'big upset winners' with an Elo of less than two sigma from the mean were found above. This is because the no such players existed. In general, if the number of iterations is too small, the program will not reliably capture such outliers. To find big upsets, you must decrease the number of games played in the tournament, and/or decrease the standard deviation of the population, and/or increase the number of iterations for the simulation (up to a maximum of 1M iterations). Further, there must be at least 10 players in the tournament. In the event such upset winners are found, the text file would have the following output for example:<br /><br />START OF SAMPLE OUTPUT FOR BIG UPSET WINNERS<br /><br />The list of top ten upsets (Elo less than 2 sigma below mean) for 10 or more players<br />Upset Winning Player Stats (ID:0, Rating:1554, Round:38159, Total Score:8,Avg. Elo Opponent:1849.7,Performance Elo:2100.7)<br />The upset player has the following stats for the round<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 48,1942.0,W<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 48,1942.0,L<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 48,1942.0,L<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 17,1755.0,W<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 17,1755.0,W<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 28,1810.0,W<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 42,1917.0,W<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 15,1746.0,W<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 6,1673.0,W<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 51,2015.0,W<br />...end upset player data...<br /><br />END OF SAMPLE OUTPUT FOR BIG UPSET WINNERS<br /><br />For these big upset winners, the statistics for the winning player are given as: ID, rating, round #, total score, average Elo of opponent and performance Elo of the winner; further, for each win or loss, the opponent ID, the opponent Elo, and the result (W=Win, L=Loss) are given for each opponent in the round.<br /><br />In the event the user's chosen player wins, the text file would have the following entry (if the win occurs in the first 1000 wins):<br /><br />SAMPLE WHERE CHOSEN PLAYER WINS TOURNAMENT:<br />Winning Player Stats (ID:4, Rating:1999, Round:11, Total Score:6, Avg. Elo Opponent:2062.3,Performance Elo:2255.3)<br />The winning player was also the chosen player and has the following stats for the round 11<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 2,1953.0,L<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 9,2154.0,W<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 9,2154.0,L<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 0,1848.0,W<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 9,2154.0,W<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 9,2154.0,W<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 6,2043.0,W<br />OpponentID, Rating, W/L result (W=Win; L=Loss): 5,2038.0,W<br />...end chosen player data...<br /><br />With the stats as before. At the very bottom of the text file is given the time elapsed for the execution of the program, in hour:minute:second format.<br /><br />Future improvements to the program might be to allow a user to input, in a text file, the actual players in a tournament rather than approximate them as a Gaussian distribution; to allow draws to count (though that should not change the statistics in the long run), and to show a graphical output rather than text.<br /><br />The program is stored at http://swisschesswinpredict.codeplex.com/, including the source code, and is freeware released AS IS AND WITHOUT ANY WARRANTY OF ANY KIND. It is written in Visual Studio C#.<br /><br />(c) 2012, by JayRodrequez</div><div class="ClearBoth"></div>JayRodrequezThu, 15 Nov 2012 20:44:09 GMTUpdated Wiki: Documentation 20121115084409PSource code checked in, #21314http://swisschesswinpredict.codeplex.com/SourceControl/changeset/changes/21314JayRodrequezThu, 15 Nov 2012 20:08:53 GMTSource code checked in, #21314 20121115080853P