MuPAD Education Group: Kostenlose Materialen für MuPAD Pro:
www.sciface.com/education, schule.mupad.de, studium.mupad.de, mupad.zum.de.

_____________________________________________________________________________________

 

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)

math

schaubild:=masseegale(200,50):

Pktliste:=[n,schaubild[n]]$n=1..200:

plot(plot::Polygon2d([Pktliste],

AxesTitles=["Spiel","Kontostand"]));

MuPAD graphics

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)

math

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)

math

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"]));

MuPAD graphics

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)

math

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)

math

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

 

image

 

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)

math

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)

math

mittelwert(5000,2000,18/37,20,30)

math

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!):

 

image

 

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)

math

Der Spieler geht also mit 93%-iger Wahrscheinlichkeit bankrott!! Für K=20 und N=30

ist dies

 

bankrott(18/37,20,30)

math

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)

math

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)

math

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)

math

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.

_______________________________________________________________________________

 

 

MuPAD Education Group: Kostenlose Materialen für MuPAD Pro:
www.sciface.com/education, schule.mupad.de, studium.mupad.de, mupad.zum.de.