Not logged inCSS-Forum
Forum CSS-Online Help Search Login
CSS-Shop Impressum Datenschutz
Up Topic Hauptforen / CSS-Forum / Ergebniswahrscheinlichkeiten in Enginezweikämpfen
- - By Benno Hartwig Date 2013-09-15 15:58
Immer mal wieder werden Zweikämpfe von Engines gemacht und die Ergebnisse bestaunt.
Ich fand mal ganz interessant zu ermitteln, mit welchen Wahrscheinlichkeiten eigentlich bestimmte Ergebnsse herauskommen unter der Annahme bestimmter Spielstärkeverhältnisse.

Darum hatte ich mal ein kleines Script geschrieben, welches dies aus Sicht einer Engine berechnet.
Man gibt vor:
- die Anzahl der Spiele
- Die Wahrscheinlichkeit für Gewinn in einer Partie
- Die Wahrscheinlichkeit für remis in einer Partie
- Die Wahrscheinlichkeit für Verlust in einer Partie

und heraus kommt eine Tabelle, in der man die Wahrscheinlichkeiten ablesen kann für z.B.
- genau 3,5 Punkte
- höchstens 5,0 Punkte
- mindestens 6,5 Punkte
eben immer aus Sicht jener Engine.

Vielleicht interessiert's ja jemanden, ich stelle es gleich hier in einem Antwortposting vor.
Benno
Parent - - By Benno Hartwig Date 2013-09-15 16:04
Das Script ist folgendes, ich habe es abgespeichert unter dem Namen match.vbs

Code:
anzahl=100
pGewinn=0.24
pRemis=0.40
pVerlust=0.36


wscript.echo "######## Wahrscheinlichkeiten berechnen"
dim feld(20005)
feld(0)=1
for i=1 to anzahl
  for j=2*i to 2 step -1
    feld(j) = feld(j-2)*pGewinn + feld(j-1)*pRemis + feld(j)*pVerlust
  next
  feld(1) = feld(0)*pRemis + feld(1)*pVerlust
  feld(0) = feld(0)*pVerlust
next

wscript.echo "######## Erwartungswert, Varianz, Standaradabweichung, Erwartungswert des Fehlerbetrages"
for p=0 to 2*anzahl
  erw=erw+p*feld(p)/2
next
for p=0 to 2*anzahl
  var=var+feld(p)*(p/2-erw)^2
  eFehler=eFehler+feld(p)*abs(p/2-erw)
next
stAbw=sqr(var)

wscript.echo "######## Ergebnis ausgeben"
genau=13
set FSO=createObject ( "Scripting.FileSystemObject")
set aus = FSO.openTextfile("match.txt",2,true)
aus.writeLine "Anzahl Spiele                   : " & anzahl
aus.writeLine "Wahrsch. (Gewinn/Remis/Verlust) : " & pGewinn & " / " & pRemis & " / " & pVerlust
aus.writeLine "Überlegenheit                   : " & pGewinn + pRemis/2  & " : " & pRemis/2 + pVerlust
aus.writeLine "Erwartung                       : " & anzahl*(pGewinn + pRemis/2)  & " : " & anzahl*(pRemis/2 + pVerlust)
aus.writeLine
aus.writeLine " Punkte      %    Wahrsch.genau     W.hoechstens     W.mindestens  ELO-Diff."
aus.writeLine "-------------------------------------------------------------------------------"
for j=0 to 2*anzahl
  mind=1-hoechst
  hoechst=hoechst+feld(j)
  punkte=j/2
  prozent=100*j/2/anzahl
  if (prozent=0) then elo=-9999
  if (prozent=100) then elo=+9999
  if (prozent<> 0) and (prozent<> 100) then
    elo = -400 * log(1/(prozent/100)-1) / log(10)
  end if
  s = form(punkte,5,1) & form(prozent,5,1) & form(feld(j),3,genau) & form(hoechst,3,genau) & form(mind,3,genau) & form(ELO,9,0)
  aus.writeLine s
next
aus.writeLine
aus.writeLine "Erwartungswert     : " & erw
aus.writeLine "Varianz            : " & var
aus.writeLine "Standardabweichung : " & stAbw
aus.writeLine "Erwartung.Fehler   : " & eFehler
aus.close

function form (z,v,n)
  form=right("                    " & formatnumber(z,n),v+1+n)
end function

In den ersten 4 Zeilen werden die 4 angekündigten Werte bekanntgegeben.

Gestartet werden kann das Script zum Beispiel über eine Batch-Datei mit dem Inhalt:

Code:
cscript /Nologo match.vbs
notepad match.txt

Das Script baut dann eine Tabelle auf, in der sich die oben erwähnten Wahrscheinlichkeiten ablesen lassen.

Benno
Parent - - By Benno Hartwig Date 2013-09-15 16:08
Ein Beispiel:

Code:
anzahl=6
pGewinn=0.24
pRemis=0.40
pVerlust=0.36
...

liefert die Ausgabe

Code:
Anzahl Spiele                   : 6
Wahrsch. (Gewinn/Remis/Verlust) : 0,24 / 0,4 / 0,36
Überlegenheit                   : 0,44 : 0,56
Erwartung                       : 2,64 : 3,36

Punkte      %    Wahrsch.genau     W.hoechstens     W.mindestens  ELO-Diff.
-------------------------------------------------------------------------------
    0,0    0,0  0,0021767823360  0,0021767823360  1,0000000000000    -9.999
    0,5    8,3  0,0145118822400  0,0166886645760  0,9978232176640      -417
    1,0   16,7  0,0490179133440  0,0657065779200  0,9833113354240      -280
    1,5   25,0  0,1080926208000  0,1737991987200  0,9342934220800      -191
    2,0   33,3  0,1717737062400  0,3455729049600  0,8262008012800      -120
    2,5   41,7  0,2060550144000  0,5516279193600  0,6544270950400       -58
    3,0   50,0  0,1908460748800  0,7424739942400  0,4483720806400        -0
    3,5   58,3  0,1373700096000  0,8798440038400  0,2575260057600        58
    4,0   66,7  0,0763438694400  0,9561878732800  0,1201559961600       120
    4,5   75,0  0,0320274432000  0,9882153164800  0,0438121267200       191
    5,0   83,3  0,0096825507840  0,9978978672640  0,0117846835200       280
    5,5   91,7  0,0019110297600  0,9998088970240  0,0021021327360       417
    6,0  100,0  0,0001911029760  1,0000000000000  0,0001911029760     9.999

Erwartungswert     : 2,64
Varianz            : 0,8784
Standardabweichung : 0,937229961108799
Erwartung.Fehler   : 0,7583999459328
Parent - - By Chess Player Date 2013-09-15 17:13
Hallo Benno,

tolle Tabelle, aber wie sieht es in Bezug zu Realität aus?
Hast Du Beispiele dafür dass diese Tabelle in der Praxis zutrifft?

MfG

C.P.
Parent - - By Benno Hartwig Date 2013-09-15 18:33 Edited 2013-09-15 18:36
[quote="Chess Player"]Hast Du Beispiele dafür dass diese Tabelle in der Praxis zutrifft?[/quote]Du kannst dir halt mit dem Tool zu (annähernd) jeder Wettkampflänge und jeder Wahrscheinlichkeitsverteilung ganz fix diese Tabelle generieren lassen.

Ein Wettkampf zweier Engines unter gleichbleibenden Bedingungen und regelmäßigem Farbwechsel ist in sehr guter Näherung eine Zufallsvariable mit den Ausgängen gewinn, remis, verlust (aus Sicht der einen Engine).
Das Tool berechnet die resultierenden Wahrscheinlichkeiten dann schon exakt.
Ganz egal, ob das Schachpartien, Fußballspiele oder Münzen (Kopf, Zahl, Kante ) sind.

Ich finde es ganz hilfreich, wenn ich ein Ergebnis sehe, welches unter angenommenen realen Spielstärkeverhältnissen äußerst unwahrscheinlich ist.
Denn dann bleiben nur die Thesen:
- ein außergewöhnlich(!!) seltenes Ereignis ist eingetreten
- die angenommenen Spielstärkeverhältnisse waren falsch
- die Wettkampfbedingungen waren nicht so, wie es der Veranstalter meinte. (Halte ich ggf. auch gar nicht für unwahrscheinlich!)
- (sonst was?)

Mit Praxisbeispielen ist das schlecht. Denn jeder Zweikampf liefert ja nur ein Ergebnis.
Ob es eines von den wahrscheinlichen war oder von den unwahrscheinlichen, ist dem einzelnen Ergebnis ja nicht anzusehen.

Die Werte in meinem Posting
http://forum.computerschach.de/cgi-bin/mwf/topic_show.pl?pid=65359#pid65359
hatte ich übrigens damit ermittelt.

Benno
Parent - - By Benno Hartwig Date 2013-09-15 19:12
[quote="Benno Hartwig"]Das Tool berechnet die resultierenden Wahrscheinlichkeiten dann schon exakt.[/quote]Hier kurz die Idee, wie das Tool das macht:

W(Sieg), W(Remis) und W(Niederlage) seien die jeweiligen Wahrscheinlichkeiten,
und W(p,n) sei die Wahrscheinlichkeit für genau p Punkte bei n Partien. Dann gilt also:

W(0,0)=1
W(p,0)=0 für jedes p!=0
"Wenn ich keine Partie spiele, kann ich nur 0 Punkte haben!"

und für jedes n>0 gilt:

W(p,n)=W(p,n-1)*W(Niederlage) + W(p-0.5,n-1)*W(Remis) + W(p-1,n-1)*W(Sieg)
"Ich kann p Punkte habe, wenn ich die eben schon hatte und dann verlor, oder wenn ich p-0.5 hatte und dann remis spielte, oder wenn ich p-1 hatte und dann siegte!"

Benno
Parent - - By Michael Scheidl Date 2013-09-15 19:23
Was sind die Variablen, welche eingegeben werden müssen? Und was genau kommt dann als Output heraus?

(Es beginnt mich zu interessieren.)
Parent - By Benno Hartwig Date 2013-09-16 07:25 Edited 2013-09-16 07:32
Hallo Michael,

Speichere bitte die Dateien genau so in einem Verzeichnis ab, wie ich es oben beschrieb.
Das Script unter dem Namen 'matsch.vbs'
die Batchdatei heißt bei mir 'match.bat'
Ein Doppelklick auf match.bat startet dann das Script und ruft danach gleich Notepad auf, der die das Ergebnis anzeigt. Ganz einfach.

Die ersten 4 Zeilen im Script sind die Variablen, wo man vorher einstellt, was man haben will (aus Sicht einer Engine):
Code:
anzahl=100
pGewinn=0.24
pRemis=0.40
pVerlust=0.36


'anzahl'        ist die Anzahl der Partien, die diese beiden Engines gegeneinander austragen
'pGewinn'     ist die Wahrscheinlichkeit, dass diese Engine die einzelne Partie gewinnt gegen jenen Gegner
'pRemis'       ist die Wahrscheinlichkeit, dass diese Partie remis ausgeht
'pVerlust'     ist die Wahrscheinlichkeit, dass diese Engine die einzelne Partie verliert gegen jenen Gegner

Im obigen Beispiel werden also die Wahrscheinlichkeiten bestimmt für einen 100-rundigen Zweikampf
mit Sieg-, remis- und Niederlage-Wahrscheinlichkeiten 0,24 0,40 und 0,36, also für eine 44:56-Unterlegenheit bei einer Annahme: 40% Remis-Partien.
Die Summe vom pGewinn, pRemis und pVerlust  muss natürlich immer 1 sein.

In der Ergebnistabelle bedeutet dann beispielsweise die Zeile
Code:
41,0   41,0  0,0385914856441  0,2368191346903  0,8017723509538       -63


1. Spalte: hier wird die Ausbeute 41,0 Punkte betrachtet
2. Spalte: dass das bei 100 Spielen genau 41% sind (Überraschung)
3. Spalte: dass genau 41,0 Punkte mit Wahrscheinlichkeit 0,0385914856441 auftritt (Über die angezeigte Anzahl der Nachkommastellen mag man diskutieren wollen)
4. Spalte: dass mit Wahrscheinlichkeit 0,2368191346903 die Situation auftritt, dass die Engine 41,0 Punkte oder weniger hat (Dass der Gegner also mit mindestens 59:41 gewinnt)
5. Spalte dass mit Wahrscheinlichkeit 0,8017723509538 die Situation auftritt, dass die Engine 41,0 Punkte oder mehr hat
6. Spalte: Dass diese Ausbeute von genau 41% der Erwartung bei einer ELO-Differenz -63 entspricht.

Probiere es ruhig erst mal mit sehr kleinen anzahl-Werten aus, 4 oder so. Dann ist es übersichtlicher.

Das Script verkraftet auch deutlich größere anzahl-Werte, allerdings steigt dann die Laufzeit.
Im Moment ist 10000 der höchste verarbeitbare Wert für 'anzahl' (und dann braucht es ungefähr 1 Minute).

Benno
Up Topic Hauptforen / CSS-Forum / Ergebniswahrscheinlichkeiten in Enginezweikämpfen

Powered by mwForum 2.29.3 © 1999-2014 Markus Wichitill