-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathhelp.html
468 lines (468 loc) · 23.1 KB
/
help.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<link rel="stylesheet" href="default.css" type="text/css">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Help: TrueSkill Server</title>
<script type="text/javascript">
function example(args) {
document.write('<a href="' + location.protocol + '//' + location.host + args + '">' + location.protocol + '//' + location.host + args + '</a>');
}
</script>
</head>
<body>
<h1>Using the TrueSkill Server</h1>
<p>[<a href="/">Home</a>] [<a href="credits.html">Acknowledgements</a>]</p>
<p>TrueSkill is one of the most lauded methods of rating and ranking
game players developed to date.<br>
</p>
<p>This TrueSkill server provides access to the TrueSkill updates
via either a form entry or URL.</p>
<p>In either instance understanding the TrueSkill parameters will be
essential.</p>
<h2>TrueSkill Parameters</h2>
<p>TrueSkill models a players skill with two distinct parameters,
each of which is measured in arbitrary units we can call skill
points:</p>
<ul>
<li>A mean (µ) - which represents an estimate of the skill the
player has. The higher the mean the more skilled the player is
judged to be, the lower the mean the less skilled.</li>
<li>A standard deviation (σ) - which represents an estimate of the
uncertainty surrounding that skill. The higher the standard
deviation the less sure we are, the lower the more sure. It is
the opposite of confidence.</li>
</ul>
<p>The beauty and importance of this is that TrueSkill starts
everyone off with a given measure of skill (mean, µ) and high
uncertainty (standard deviation, σ).</p>
<p>Every player is given the same initial value of mean and standard
deviation and each time a game is recorded, the means are adjusted
standard deviations will drop (confidence rises). Specifically
TrueSkill will take points away from the losers and given to the
winners so that they total number of points among all players in a
game remains the same. These are labelled:</p>
<ul>
<li>An initial mean (µ<sub>0</sub>) - being the initial value of
the mean (µ) assigned to each player (before any game data is
collected to measure their performance).</li>
<li>An initial standard deviation (σ<sub>0</sub>) - being the
initial value of standard deviation (σ) assigned to each player
(before any game data is collected to measure their
performance).</li>
</ul>
<p>A third number is associated with each player, which is a
conservative measure of skill. The mean (µ) is a measure of the
presumed skill, but the standard deviation (σ) describes how
uncertain we are about that. The conservative measure of skill
then is calculated as a single number from the mean and standard
deviation. This is the single number used for ranking players and
comparing their skill level and represents the level of skill we
are confident they have, at least. It could be higher, and the
more games they play the lower the standard deviation will fall
as uncertainty drops and confidence rises.</p>
<p>This TrueSkill server defines the conservative skill measure as:</p>
<ul>
<li>Rating (η) = µ − (µ<sub>0</sub> ÷ σ<sub>0</sub>) × σ</li>
</ul>
<p>The rating at outset is thus by definition, 0:</p>
<ul>
<li>Initial Rating (η<sub>0</sub>) = µ<sub>0</sub>−(µ<sub>0</sub>
÷ σ<sub>0</sub>) × σ<sub>0</sub> = µ<sub>0</sub> −µ<sub>0</sub>
= 0</li>
</ul>
<p>With this understanding you can now interpret all of the
TrueSkill parameters.</p>
<p style="margin-left:2em"><strong>Side note:</strong> The TrueSkill
documentation never gives this conservative measure of skill a
name or symbol, but loosely implies that it is called the true skill.
This server was developed specifically as a first step towards
supporting leaderboard rankings for a competitive gamers group
calling themselves <a href="https://leaderboard.space">CoGs</a>
(for <strong>Co</strong>mpetitive <strong>G</strong>amer<strong>s</strong>),
and so true skill is named rating (in the manner of chess ratings) and
measured in teeth (cogs have teeth) alluding also to the voracity of
any given player (like the teeth of a lion) and the Greek symbol eta
(η) chosen as intentional pun on teeth (eater) and conveniently resembling
the letter n (for number of teeth).</p>
<h3>Player Parameters (for a given game result)</h3>
<p>These parameters are specific to the the players (and/or teams)
playing the game.</p>
<table class="deflist" width="80%">
<tbody>
<tr>
<td class="deflist" nowrap="nowrap">Place</td>
<td class="deflist">A number indicating the placing. The first
player would be 1, the second 2, the third 3 etc. Ties can
be entered so if two players tied in second place for
example they would both have a Place of 2. The actual number
is not relevant to the TrueSkill calculation, players are
simply sorted by Place to determine who beat whom. The
winners taking points away from the losers respectively.</td>
</tr>
<tr>
<td class="deflist" nowrap="nowrap">Name</td>
<td class="deflist">The name of the player. Each player must
have a unique name but otherwise, it's not relevant to the
TrueSkill calculation excepting that the results are listed
by name again. This is your identifier for each player. </td>
</tr>
<tr>
<td class="deflist" nowrap="nowrap">Mean (µ)</td>
<td class="deflist">The current mean (as described above)
which the player has before the game you're recording was
played. TrueSkill will undertake to calculate a new mean
based on this players placing in the game.</td>
</tr>
<tr>
<td class="deflist" nowrap="nowrap">Standard Deviation (σ)</td>
<td class="deflist">The current standard deviation (as
described above) which the player has before the game you're
recording was played. TrueSkill will undertake to calculate
a new standard deviation based on the game parameters you
specified.</td>
</tr>
<tr>
<td class="deflist" nowrap="nowrap">Partial Play Weighting (ω)</td>
<td class="deflist">A weighting for partial play. Let's say a
given player could not play the game to completion because
the wife called and was having a baby. Well, you can
estimate what portion of the game they did play and this
will moderate how much TrueSkill adjusts their mean and
standard deviation results. The default of 1, is playing to
completion, 0 in turn means they didn't even start, their
mean and standard deviation won't be touched, why are you
enterig them at all? And 0.5 would mean they played for half
the game, 0.75, <sup>3</sup>/<sub>4</sub> of the game and
0.25, <sup>1</sup>/<sub>4</sub> of the game and so on.</td>
</tr>
</tbody>
</table>
<h4>Team Play</h4>
<p>TrueSkill supports team play (in fact individual play is just
modeled as teams of 1 internally). In which case there is Place
and Name for each team, and each player has a Name but no Place.
In other words all the players in one team score together the same
placing. </p>
<h3>Game Parameters</h3>
<p>These parameters are specific to the game being played. Each game
will have it's own unique set of parameters, though TrueSkill
provides some convenient defaults.</p>
<table class="deflist" width="80%">
<tbody>
<tr>
<td class="deflist" nowrap="nowrap">Initial Mean (µ<sub>0</sub>)</td>
<td class="deflist">The initial value of the mean as described
above. The default value in TrueSkill is 25 points. This is
completely arbitrary and you could use any value. Important
only is that for any given game, league or leaderboard you
are managing that all players who enter do so with the same
initial mean - to be consistent and fair.</td>
</tr>
<tr>
<td class="deflist" nowrap="nowrap">Initial Standard Deviation
(σ<sub>0</sub>)</td>
<td class="deflist">The initial value of the standard
deviation as described above.
<p>The default value is one third of the initial mean, or 25
÷ 3, which is 8<sup>1</sup>/<sub>3</sub> or 8.333... if
you prefer. </p>
<p>This is a completely arbitrary but a value that worked
empirically for the TrueSkill developers in their initial
environment (the Xbox matchmaking system). </p>
<p>You can use any value you like, but the server constrains
you to use one that is not greater than the initial mean
(said another way, let us not begin with uncertainty
greater than the measure).</p>
</td>
</tr>
<tr>
<td class="deflist" nowrap="nowrap">Skill Factor (ß)</td>
<td class="deflist">Described in the literature as the
difference in µ values that would map to approximately 80%
chance of the higher µ holder of winning. Meaning: The
Trueskill authors argue that this reflects the balance of
skill and luck in a game. If ß is high more luck is modeled,
and if it is low, more skill. <br>
<p>The default value is one sixth of the initial mean, or 25
÷ 6, which is 4<sup>1</sup>/<sub>6</sub> or 4.166... if
you prefer. </p>
<p>This again is completely arbitrary but a value that
worked empirically for the TrueSkill developers in their
initial environment (the Xbox matchmaking system).</p>
<p>It turns out they did some subsequent research comparing
actual game outcomes against Trueskill predictions to tune ß.
They arrived at the following values as guidelines for Xbox
games:</p>
<ul>
<li>3.33 for Golf (a game of almost pure skill)</li>
<li>5.00 for Car racing</li>
<li>20.8 for UNO (a game of chance)</li>
</ul>
</td>
</tr>
<tr>
<td class="deflist" nowrap="nowrap">Dynamics Factor (τ)</td>
<td class="deflist">The Dynamics Factor (τ) models the
uncertainty in a players skill that is acquired due to
absence between games. Technically it tries to model the
fact that while not playing, a player might not be
practicing and losing skill, or might be practicing and
gaining skill, we don't know, all we know is that our
confidence that we know their skill diminishes.<br>
<p>Left alone TrueSkill will bring the standard deviation
closer and closer to 0 with every game you play, getting
more and more confident. </p>
<p>The Dynamics Factor (τ) is a measure of residual
uncertainty in this process. It is added to the standard
deviation (σ) on each update. Thus the higher τ is, the
less confidence in any given µ there is and the lower τ is
the more confidence in any given µ there is.</p>
<p>Technically of course, this might be a reasonable model if
most or all players have similar spans between games, i.e. are
consistently playing. If players have very disparate periods of
time between plays it fails in any way to model any difference
in their loss of or our uncertainty in, their skill</p>
<p>The default value in TrueSkill is one hundredth of the
initial standard deviation (σ<sub>0</sub>), or 25 ÷ 3 ÷
100, which is about 0.08333...</p>
</td>
</tr>
<tr>
<td class="deflist" nowrap="nowrap">Draw Probability (p)</td>
<td class="deflist">The probability (0 to 1, meaning 0% to
100%) of a draw occurring in this game.
<p>This affects the interpretation of draws by TrueSkill. In
essence if a draw is recorded between two or more players
TrueSkill will tend to move their means (µ) toward each
other. If a draw is very likely however, this result says
little about the individual player skills, and the
adjustment to µ will be lower, and if a draw is very
unlikely then scoring a draw suggest much more strongly
that the players are well matched and the adjustment to µ
is accordingly higher.</p>
<p>The default value is 0.1 (or 10%) which is completely
arbitrary.</p>
<p>You can of course, with enough game data recorded measure
the probability of a draw in retrospect. This is another
reason to independently keep a record of all game results,
so that you could if desired, recalculate all rankings by
running each played game through the server once again
with a different draw probability.</p>
</td>
</tr>
<tr>
<td class="deflist" nowrap="nowrap">Delta (δ)</td>
<td class="deflist">Delta is the convergence parameter.
TrueSkill runs itself in circles adjusting players µ and σ
values trying to find values that best predict the recorded
outcome. The smaller δ is the longer it will take but more
accurate the result will be, and the higher δ is the faster
the calculation and the less accurate the result will be.
<p>The default value is 0.0001, an arbitrarily small value.</p>
<p>Not likely you'll need to play with this, but you can
experiment. </p>
</td>
</tr>
</tbody>
</table>
<h2>Using the Form</h2>
<p>The form should be fairly self explanatory. It is simple and asks
you to enter the game, player (and/or) team parameters, after
which you can click <strong>Calculate New Ratings</strong> to
produce results.</p>
<p>Things to note when using the form:</p>
<ul>
<li><strong>Game Info</strong> is where you enter the game
parameters described above. All boxes are initialised with the
TrueSkill defaults or values passed through the URL, see <a
href="#URL">Using the URL</a> below.</li>
<li><strong>Game Results</strong> is where you enter the player
(and/or team) parameters described above.
<ul>
<li>You will need to choose either the <strong>Individual
Player Form</strong> or the <strong>Team Play Form</strong>.
Individual Play is the default.</li>
<li>In either case you will need to enter the number of player
or teams. A link beside this box switches forms.</li>
<li>Once you enter the number of players or teams one row per
player or team appears in which to enter the player and team
parameters described above.</li>
<li>All boxes are initialized with the TrueSkill defaults or
values passed through the URL, see <a href="#URL">Using the
URL</a> below.</li>
</ul>
</li>
<li>Once all the game and player (and/or team parameters) are set,
click <strong>Calculate New Ratings</strong> to produce
results.
<ul>
<li>This will conveniently also produce the URL which you can
use to bookmark this calculation and/or use later to perform
the calculation without the form, but <a href="#URL">using
the URL</a>.</li>
</ul>
</li>
</ul>
<h2><a name="URL"></a>Using the URL</h2>
<p>As a web service the TrueSkill server is designed to feed results
to a client in a convenient format. </p>
<p>URL parameters can be set to define any or all the TrueSkill
parameters above and request a calculation and/or the format of
the results desired.</p>
<p>Parameters are as follows:</p>
<table class="deflist" width="80%">
<thead> <tr>
<th class="deflist" style="font-size: large" nowrap="nowrap">URL
Parameter</th>
<th class="deflist" style="font-size: large">Description</th>
</tr>
</thead> <tbody>
<tr>
<td class="deflist" colspan="2"><strong>Game Info Parameters</strong></td>
</tr>
<tr>
<td class="deflist" nowrap="nowrap">iMu</td>
<td class="deflist">Initial Mean (µ<sub>0</sub>)</td>
</tr>
<tr>
<td class="deflist" nowrap="nowrap">iSigma</td>
<td class="deflist">Initial Standard Deviation (σ<sub>0</sub>)</td>
</tr>
<tr>
<td class="deflist" nowrap="nowrap">Beta</td>
<td class="deflist">Skill Factor (ß)</td>
</tr>
<tr>
<td class="deflist" nowrap="nowrap">Tau</td>
<td class="deflist">Dynamics Factor (τ)</td>
</tr>
<tr>
<td class="deflist" nowrap="nowrap">pDraw</td>
<td class="deflist">Draw Probability (p)</td>
</tr>
<tr>
<td class="deflist" nowrap="nowrap">Delta</td>
<td class="deflist">Delta (δ)</td>
</tr>
<tr>
<td class="deflist" colspan="2"><strong>Game Results
Parameters</strong>
<p>Each of these may be specified as a comma separated list
or as a list of parameters or a combination thereof. If
the parameter is repeated all repeat entries are joined
with a comma in between them before further
processing. So that these are all identical in effect:</p>
<p style="margin-left:2em;">?Players=Jack,Jill,Bonnie,Clyde
</p>
<p style="margin-left:2em;">?Players=Jack&Players=Jill&Players=Bonnie&Players=Clyde
</p>
<p style="margin-left:2em;">?Players=Jack,Jill&Players=Bonnie,Clyde
</p>
</td>
</tr>
<tr>
<td class="deflist" nowrap="nowrap">Players</td>
<td class="deflist">A comma separated list of player names. </td>
</tr>
<tr>
<td class="deflist" nowrap="nowrap">Ranking</td>
<td class="deflist">A comma separated list of of rankings
(places), which maps 1 to 1 to the list of Players in the
same order.</td>
</tr>
<tr>
<td class="deflist" nowrap="nowrap">Mus</td>
<td class="deflist">A comma separated list of of means (μ<span
style="font-size: smaller">s</span>), which maps 1 to 1 to
the list of Players in the same order.</td>
</tr>
<tr>
<td class="deflist" nowrap="nowrap">Sigmas</td>
<td class="deflist">A comma separated list of of sigmas (σ<span
style="font-size: smaller">s</span>), which maps 1 to 1 to
the list of Players in the same order.</td>
</tr>
<tr>
<td class="deflist" nowrap="nowrap">Weights</td>
<td class="deflist">A comma separated list of of weights (ω<span
style="font-size: smaller">s</span>), which maps 1 to 1 to
the list of Players in the same order.</td>
</tr>
<tr>
<td class="deflist" nowrap="nowrap">Teams</td>
<td class="deflist">Optionally, if Team Play is in effect.
<p>A comma separated list of of team names. </p>
</td>
</tr>
<tr>
<td class="deflist" nowrap="nowrap">PlayerTeams</td>
<td class="deflist">Optionally, if Team Play is in effect.
<p>A comma separated list of of team names, which maps 1 to
1 to the list of Players in the same order and which maps
each player into one of the teams listed in the Teams
parameter.</p>
</td>
</tr>
<tr>
<td class="deflist" colspan="2"><strong>Control Parameters</strong></td>
</tr>
<tr>
<td class="deflist" nowrap="nowrap">Go</td>
<td class="deflist">If present and set to true, yes or 1, will
cause an immediate TrueSkill calculation to be performed and
results presented. The equivalent of clicking Calculate New
Ratings on the form</td>
</tr>
<tr>
<td class="deflist" nowrap="nowrap">Format</td>
<td class="deflist">If present can specify a format to present
the results in:
<dl>
<dt style="margin-left:2em;">CSV</dt>
<dd>A comma separated list of results is returned. For
simple parsing by a client, and/or viewing in any CSV
viewer like a spreadsheet. A header line is included.<br>
<br>
</dd>
<dt style="margin-left:2em;">XML</dt>
<dd>An XML version of the results is returned. Again for
simple parsing by an XML aware client or viewing in an
XML viewer.<br>
<br>
</dd>
<dt style="margin-left:2em;">HTML</dt>
<dd>A clean HTML table, without the entry form. Primarily
for visual rendering in the browser.</dd>
</dl>
<p>If not specified then the results are displayed after the
entry form as an HTML table. </p>
</td>
</tr>
</tbody>
</table>
<h3>URL Examples</h3>
<p>Jill beat Jack, display the form.</p>
<p style="margin-left:2em;">
<script type="text/javascript">
example('?Players=Jack,Jill&Ranking=2,1');
</script></p>
<p>Jill beat Jack, calculate results and display them in CSV format.</p>
<p style="margin-left:2em;">
<script type="text/javascript">
example('?Players=Jack,Jill&Ranking=2,1&Go=1&Format=CSV');
</script></p>
<p>Two teams, guys versus gals, gals won, calculate results and
display in form.</p>
<p style="margin-left:2em;">
<script type="text/javascript">
example('?Teams=Guys,Gals&Players=Jack,Jill,Bill,Ben,Bonnie,Clyde&PlayerTeams=Guys,Gals,Guys,Guys,Gals,Guys&Ranking=2,1&Go=1');
</script></p>
<p>Same teams but specify players current ratings and some game
info.</p>
<p style="margin-left:2em;">
<script type="text/javascript">
example('?Teams=Guys,Gals&Players=Jack,Jill,Bill,Ben,Bonnie,Clyde&PlayerTeams=Guys,Gals,Guys,Guys,Gals,Guys&Ranking=2,1&Go=1&Mus=26,24,27,28,25,29&Sigmas=5,7,4,3,8,4&Beta=7.5&Tau=2.5&pDraw=0.3');
</script></p>
</body>
</html>