_____________________________________________________________________________________
Inhalt....: Roulettestrategien I
Kategorie.: Arbeitsblatt
Mathematik: Stochastik, Programmierung
MuPAD.....: 3.1.0
Datum.....: 2005-07-04
Autoren...: Thorsten Fraas <thorstenfraas@gmx.de>
Funktionen: contains, for, has, if, mod, AxesTitles, stats::sample
Funktionen: op, plot::Polygon2d, stats::mean
_____________________________________________________________________________________
Empirische Untersuchung von Roulettestrategien I
In diesem aus fünf Notebooks bestehenden Paket werden Eigenschaften
verschiedener geläufiger Roulettestrategien empirisch untersucht. Die Strategien
werden in den ersten drei Notebooks programmiert:
Dieses Notebook gibt allgemeine Informationen zum Roulettespiel und erläutert
kurz den Unterschied der beiden Arten von Roulettestrategien
(Masse égale-Spiele und Progressionsspiele).
Es beschäftigt sich dann mit den Masse égale-Spielen.
Die beiden folgenden Notebooks behandeln die sogenannten Progressionsspiele.
Darunter fallen die Einfache Martingalstrategie, die Supermartingalstrategie
(beide Notebook 2), die Amerikanische Martingalstrategie und die
Whittacker- Progression (beide in Notebook 3).
Im vierten Notebook werden alle Strategien anhand eines identischen Spielverlaufs
miteinander verglichen.
Das fünfte Notebook beschäftigt sich mit einem bei der Programmierung der
Strategien aufgetretenen Problem und versucht dies ansatzweise zu lösen. Der
interessierte Leser kann versuchen, die Problemlösung an dieser Stelle fortzuführen.
Aufbau dieses Notebooks:
1. Allgemeine Informationen zum Roulettespiel
2. Masse égale-Spiele
2.1 Masse égale-Spiele für vorsichtige Spieler
2.2 Masse égale-Spiele für "Zocker"
2.3 Wann ist der Spieler bankrott oder hat sein Ziel erreicht?
2.4 Wie wahrscheinlich ist es, dass der Spieler bankrott geht?
3. "Spielempfehlung"
1. Allgemeine Informationen zum Roulettespiel
Roulette zählt unter den Gesellschaftsspielen zu den Glücksspielen und unterscheidet
sich damit von kombinatorischen Spielen wie Schach und strategischen Spielen wie Poker
dadurch, dass nicht mit Logik oder Bluff, sondern mit Glück gewonnen wird.
Da es zahlreiche Varianten des Roulettespiels gibt, wollen wir das klassische,
meistgespielte, sogenannte französische Roulettespiel betrachten. Der Ablauf eines Spiels
dürfte jedem bekannt sein. Der Spieler hat verschiedene Möglichkeiten auf Zahlen von
0 bis 36 zu setzen. Die für dieses Notebook relevanten Möglichkeiten sollen sich auf
die Einfachen Chancen beschränken. Zu den Einfachen Chancen zählt das Setzen auf
Rot oder Schwarz, Gerade oder Ungerade und Manque (Zahlen von 1 bis 18) oder
Passe (Zahlen von 19 bis 36). Die Null zählt zu keinem dieser Bereiche.
Wir werden uns mit zwei Arten von Spielstrategien beim Roulette beschäftigen:
Dem sogenannten Masse égale-Spiel und dem Progressionsspiel.
Beim Masse égale-Spiel setzt man zu Beginn jedes Spiels immer den gleichen Betrag
auf die Einfachen Chancen.
Beim Progressionsspiel variiert der Einsatz und hängt davon ab, ob man im Spiel zuvor
gewonnen oder verloren hat.
Die einzelnen Strategien werden im Folgenden näher beschrieben. Wer mehr Informationen
zu Roulettespielregeln benötigt, kann sich im Internet auf der Homepage jeder Spielbank
darüber informieren.
2. Masse égale-Spiele
2.1 Masse égale-Spiele für vorsichtige Spieler
Wir wollen im Folgenden das sogenannte Masse égale-Spiel simulieren. Dabei setzt
der Spieler, der mit einem Startkapital von K Euro beginnt, n Spiele lang bei jedem Spiel
vorsichtig 1 Euro auf die Einfachen Chancen (also z.B. die geraden Zahlen).
Eine Besonderheit ist, dass der Spieler beim Setzen auf die Einfachen Chancen,
wenn die Null fällt, die ja weder gerade noch ungerade ist, unter anderem die Möglichkeit
hat, die Hälfte seines Einsatzes zurückzuverlangen.
Wir berücksichtigen dies in der folgenden Prozedur, in der wir Zufallszahlen von 0 bis 36
erzeugen und allen geraden Zahlen den Wert 1 zuordnen (das entspricht also einem Euro
Gewinn beim Setzen auf gerade Zahlen), allen ungeraden Zahlen den Wert -1 (da der
Spieler verloren hat) und der Null den Wert -1/2.
masseegale:=proc(n,K)
local A,B,i;
begin
zufallszahlen:=proc(n)
begin
kessel := random(0..36): kessel() $ i = 1..n
end_proc:
B:=[0$n];
A:=zufallszahlen(n);
if A[1]mod 2=0 and A[1]>0 then B[1]:=K+1;
elif A[1]=0 then B[1]:=K-1/2
else B[1]:=K-1
end_if;
for i from 2 to n do
if (A[i]mod 2 = 0) and A[i]>0 then B[i]:=B[i-1]+1
elif A[i]=0 then B[i]:=B[i-1]-1/2
else B[i]:=B[i-1]-1;
end_if;
end_for;
B;
end_proc:
masseegale(10,50)
![]()
schaubild:=masseegale(200,50):
Pktliste:=[n,schaubild[n]]$n=1..200:
plot(plot::Polygon2d([Pktliste],
AxesTitles=["Spiel","Kontostand"]));

Auf diese Weise können wir den Verlauf des Kontostandes beim Spielen
dieser Strategie simulieren.
2.2 Masse égale-Spiele für "Zocker"
Wir wollen die Prozedur nun etwas abwandeln:
Im Casino gibt es Tische, bei denen das Tischminimum 2, 5, 10, 20 oder auch
50 Euro beträgt. Der Spieler gebe sich nun nicht mehr mit einem 1-Euro-Tisch
zufrieden, sondern er will seinen Einsatz erhöhen. Er beginne weiterhin mit K Euro
und setze bei jedem Spiel m Euro auf die Einfachen Chancen (also z.B. Rot).
Wir wollen mit p die Gewinnwahrscheinlichkeit eines Spiels angeben, die etwas
kleiner als 1/2 ist, da ja die Null weder Rot noch Schwarz ist.
Die Sonderregel, dass der Spieler beim Auftreten der Null die Hälfte seines Geldes
zurückerhält, können wir an dieser Stelle leider nicht berücksichtigen, denn sonst
wird die mathematisch 100%ige-Modellierung des Spiels im Hinblick auf die später im
Notebook noch zu berechnende Bankrottwahrscheinlichkeit und den Zeitpunkt des
Ende des Spiels ungleich komplizierter. Wir begnügen uns an dieser Stelle also
damit, dass wir p=18/37 wählen (18 rote Zahlen, 19 nicht-rote Zahlen).
Zuerst benötigen wir eine Prozedur, die das Roulettespiel simuliert. Dies
erledigt die Prozedur roulette:
Es werden n-Spiele gemacht und der Spieler gewinnt mit Wahrscheinlichkeit p.
Es wird eine Liste mit Nullen und Einsen ausgegeben.
Eine Eins gibt ein gewonnenes Spiel an, die Null steht für ein verlorenes Spiel.
roulette:=proc(n,p)
local A,i,k;
begin
kessel:=stats::binomialRandom(1,p):kessel()$ k=1..n;
A:=[kessel() $i=1..n];
end_proc:
roulette(10,18/37)
![]()
Die folgende Prozedur gibt uns die Spielstände nach n Spielen an:
spielstaendeallg:=proc(n,p,K,m)
local A,B,Z,i;
begin
A:=roulette(n,p);
B:=[];
if A[1]>0 then A[1]:=K+m;
else A[1]:=K-m;
end_if;
for i from 2 to nops(A) do
if A[i]=1 then A[i]:=A[i-1]+m;
elif A[i]=0 then A[i]:=A[i-1]-m;
end_if;
end_for;
B:=[op(A,i)$i=1..nops(A)];
end_proc:
Wir simulieren nun 10 Spiele, wobei der Spieler mit 50 Euro startet und
bei jedem Spiel 5 Euro setzt.
spielstaendeallg(10,18/37,50,5)
![]()
Wir wollen den Verlauf des Kontostandes bei 200 Spielen einmal in
einem Graph veranschaulichen:
kurve:=spielstaendeallg(200,18/37,50,5):
Punkte:=[n,kurve[n]]$n=1..200:
plot(plot::Polygon2d([Punkte],
AxesTitles=["Spiel","Kontostand"]));

2.3 Wann ist der Spieler bankrott oder hat sein Ziel erreicht?
Die folgende Prozedur gibt eine Liste aus, die angibt, wann der Spieler das
erste Mal bankrott ist oder N Euro erreicht hat.
Den Wert N hat der Spieler sich vor Betreten des Casinos gesetzt. Wenn er N Euro
in der Tasche hat, geht er nach Hause.
Falls der Kontostand nach n Spielen weder bei 0 noch bei N angekommen ist,
wird der Wert etwas größer als n gesetzt.
Den Grund für diese Maßnahme sehen wir später. Im Folgenden setzt der
Spieler immer 1 Euro in jedem Spiel:
ende:=proc(n,p,K,N)
local A,B,C,i,j;
begin
A:=roulette(n,p);
B:=[];
C:=[];
if A[1]>0 then A[1]:=K+1;
else A[1]:=K-1;
end_if;
for i from 2 to nops(A) do
if A[i]=1 then A[i]:=A[i-1]+1;
elif A[i]=0 then A[i]:=A[i-1]-1;
end_if;
end_for;
B:=[op(A,i)$i=1..nops(A)];
for j from 1 to n do
if B[j]=N then
return([j,"Gewinn von " .expr2text(N) ." Euro."]);
elif B[j]=0 then return([j,"bankrott"]);
end_if;
end_for;
return([n+n/10,"Das Spiel dauert noch an."]);
end_proc:
Nun sollen viele Simulationen gemacht werden. y gibt die Zahl der unabhängigen
Wiederholungen der Spiele an.
spiel:=proc(y,n,p,K,N)
local h;
begin
[ende(n,p,K,N)$h=1..y]
end_proc:
spiel(3,2000,18/37,50,100)
![]()
Im obigen Beispiel haben wir dreimal 2000 Spiele simuliert. Zweimal ist der
Spieler vorzeitig bankrott gegangen, einmal dauert das Spiel nach 2000 Spielen
noch an und wir setzen den Wert auf 2200.
Nun ist der Mittelwert interessant, wann das Spiel beendet ist.
Dafür bilden wir den Mittelwert aus den ersten Einträgen der Listen:
mittelwert:=proc(y,n,p,K,N)
local D1;
begin
D1:=stats::sample(spiel(y,n,p,K,N)):
float(stats::mean(D1));
end_proc:
Jetzt wird deutlich, warum wir oben den Wert für die Anzahl der Spiele etwas
größer als n gesetzt haben, wenn der Spieler noch nicht bankrott ist oder N Euro
erreicht hat: Um einen genauen Mittelwert zu erhalten, muss für den Fall, dass
man noch nicht am Ende des Spiels angekommen ist, ein repräsentativer Wert gesetzt
werden, der den Mittelwert nicht verfälscht. Deshalb gehen wir einfach davon aus,
dass, wenn der Spieler nach n Spielen noch nicht am Ende ist, dies in Kürze
geschehen wird. Nun wollen wir den Mittelwert aus 100 Wiederholungen der
5000 Spiele machen. Das Programm simuliert also 100 Casinobesuche, wobei jedes
Mal 5000 Spiele gemacht werden und der Spieler mit 50 Euro startet und nach Hause
geht, wenn er entweder bankrott ist oder 100 Euro in der Tasche hat.
mittelwert(100,5000,18/37,50,100)
![]()
Zur Berechnung der mittleren Zeit bis zum Ende des Spiels lässt sich eine Formel
herleiten, die folgendermaßen aussieht (zur Herleitung der Formel bitte die Anmerkung
am Ende des Dokuments lesen!):
Die mittlere Zeit T_K ist

Diese Formel gilt nur für Spiele mit 1 Euro Einsatz pro Spiel.
Die theorie-Prozedur stellt die obige Formel für p<>q dar.
Mit ihr kann man schnell den theoretischen Wert errechnen lassen:
theorie:=proc(p,K,N)
begin
float((1/(1-2*p))*(K-(1-((1-p)/p)^K)/(1-((1-p)/p)^N)*N));
end_proc:
Mit den Werten K=50, N=100 und p=18/37 erhalten wir dann den Wert 1617:
theorie(18/37,50,100)
![]()
Unser empirisch ermittelter Mittelwert sollte sich nach dem Gesetz der Großen Zahlen
also der Zahl 1617 annähern. Das ist tatsächlich der Fall, wie wir mit einem Blick
nach oben feststellen können.
Wir wollen ein weiteres Beispiel testen:
Wenn man z.B. mit 20 Euro startet und bei 30 Euro aufhört, macht man
theoretisch 207 Spiele, bis man bankrott ist oder die 30 Euro in der Tasche hat, denn
theorie(18/37,20,30)
![]()
mittelwert(5000,2000,18/37,20,30)
![]()
Unsere empirische Untersuchung liefert für diese Anfangsbedingungen 204 Spiele.
Das liegt sehr nah an unserem theoretisch errechneten Wert!
2.4 Wie wahrscheinlich ist es, dass der Spieler bankrott geht?
Wir sehen also, dass die Formel, die die mittlere Zeit bis zum Ende des Spiels angibt,
durch empirische Untersuchungen bestätigt wird.
Was sagt uns das für unsere Strategie? Ist sie nun empfehlenswert oder nicht?
Wir wissen bislang nur, wann das Ende des Spiels erreicht ist, der Spieler also bankrott
ist oder N Euro besitzt. Es lässt sich auch eine Formel für die
Bankrottwahrscheinlichkeit p_K herleiten (zur Herleitung der Formel bitte die Anmerkung
am Ende des Dokuments lesen!):

Wir können beispielhaft für p=18/37, K=50 und N=100 berechnen, wie wahrscheinlich es ist,
bankrott zu gehen:
bankrott:=proc(p,K,N)
begin
float((((1-p)/p)^K-((1-p)/p)^N)/(1-((1-p)/p)^N))
end_proc:
bankrott(18/37,50,100)
![]()
Der Spieler geht also mit 93%-iger Wahrscheinlichkeit bankrott!! Für K=20 und N=30
ist dies
bankrott(18/37,20,30)
![]()
Wir können die Bankrottwahrscheinlichkeit auch empirisch ermitteln. Dazu
programmieren wir wieder eine Prozedur, die uns angibt, ob der Spieler bankrott
gegangen ist oder nicht. Wir mitteln dann wieder über viele Werte und werden sehen,
dass sich der Wert dem von uns theoretisch errechneten annähert.
Die ende1-Prozedur gibt aus, in welchem Spiel man bankrott geht oder N Euro
erreicht hat.
ende1:=proc(n,p,K,N)
local A,B,C,i,j;
begin
A:=roulette(n,p);
B:=[];
C:=[];
if A[1]>0 then A[1]:=K+1;
else A[1]:=K-1;
end_if;
for i from 2 to nops(A) do
if A[i]=1 then A[i]:=A[i-1]+1;
elif A[i]=0 then A[i]:=A[i-1]-1;
end_if;
end_for;
B:=[op(A,i)$i=1..nops(A)];
for j from 1 to n do
if B[j]<=0 then return([j,1])
elif B[j]=N then return([j,N])
end_if;
end_for;
end_proc:
ende1(1000,18/37,20,30)
![]()
Wir wiederholen nun die n-Spiele y-mal und falls der Spieler bankrott geht, geben
wir in einer Liste eine Eins aus. Diese Einsen werden aufsummiert und durch y geteilt.
Damit errechnen wir also wie oft im Schnitt ein Spieler bei y-Casino Besuchen,
bei denen er immer n Spiele gemacht hat, bankrott gegangen ist. Dies ist die
Bankrottwahrscheinlichkeit für den Spieler:
mittelwert1:=proc(y,n,p,K,N)
local H,U,f,h;
begin
H:=[ende1(n,p,K,N)$h=1..y];
U:=[0$y];
for f from 1 to y do
if H[f]=NIL then H[f]:=[0,0]
end_if;
end_for;
for f from 1 to y do
if op(H,[f,2])=1 then U[f]:=1
end_if;
end_for;
float(_plus(op(U))/y);
end_proc:
mittelwert1(2000,1000,18/37,20,39)
![]()
Wir wollen den theoretischen und den empirischen Wert in einer Ausgabe
vergleichen:
vergleich1:=proc(y,n,p,K,N)
begin
return([mittelwert1(y,n,p,K,N),bankrott(p,K,N)]);
end_proc:
vergleich1(1000,5000,18/37,50,80)
![]()
Wir sehen: Die Werte liegen nah beieinander!
3. "Spielempfehlung"
Wir sehen: Wenn es dem Roulettespieler um Gewinnmaximierung geht und nicht
um den Spaß, dann sollte er die Masse égale-Strategie auf keinen Fall spielen:
Im Schnitt geht der Spieler nämlich mit einer Wahrscheinlichkeit von über 80% bankrott
wenn er mit 50 Euro beginnt und bei 80 Euro aufhören will. Da könnte er besser
"Alles oder Nichts" spielen und sein komplettes Startkapital im ersten Spiel auf die
Einfachen Chancen setzen. Da verliert er sein komplettes Kapital "nur" mit einer
Wahrscheinlichkeit, die etwas größer als 50% ist und im Gewinnfall besitzt er sogar
100 Euro! Weitere sehr interessante Strategien werden in den Teilen 2 und 3 des
Roulette-Pakets behandelt.
_______________________________________________________________________________
Anmerkungen:
1. Weitere Anregungen zum Einsatz von MuPAD in der Lehre finden Sie auf unserem WebPortal
MuPAD in Schule und Studium unter: http://schule.mupad.de bzw. http://studium.mupad.de.
2. Mathematische Formeln in diesem Notebook stammen aus der Examensarbeit
"Roulette - Theorie und Simulation eines Glücksspiels", die vom Autor im Rahmen
der Ersten Staatsprüfung für das Lehramt an Gymnasien im Jahr 2004 am
Institut für Mathematische Stochastik an der Georg-August Universität in
Göttingen angefertigt wurde. Die programmierten Roulettestrategien wurden im
Rahmen dieser Arbeit ebenfalls mathematisch untersucht.
Der interessierte Leser sei darauf verwiesen. Entsprechende Teile der Arbeit
können gerne auf Anfrage beim Autor angefordert werden.
_______________________________________________________________________________