Courtesy of pxhere

Übersicht

Dieses Projekt befasst sich mit dem Thema Glücksspiel. Es existieren zahlreiche Glücksspiele, beispielsweise Glücksspielautomaten (z.B. der “Einarmige Bandit”), Roulette, Kartenspiele (z.B. Blackjack und Poker), Würfelspiele, Sportwetten, Lotto, Rubbellose und Bingo sowie im weiteren Sinne auch die Börsenspekulation. In diesem Projekt möchten wir uns auf das Roulette konzentrieren. Roulette ist ein weltweit verbreitetes, traditionelles Glücksspiel, bei dem es darum geht, auf bestimmte Zahlen oder Eigenschaften von Zahlen zu setzen, die durch den zufälligen Lauf einer Kugel in einem Kessel bestimmt werden (Klicke hier für weitere Informationen). Ziel ist in diesem Projekt, dass du dir am Ende den Weg ins Casino sparen kannst, weil du dir in R ein Roulette nachgebaut hast!

Zielsetzung

In diesem Projekt soll es um den Umgang mit Funktionen in R, den Umgang mit Wenn-Dann-Bedingungen (if und else) und um das Erzeugen von Schleifen mit for, while oder repeat gehen. In diesem Projekt soll mithilfe dieser Funktionen ein Roulette-Spiel rekonstruiert und mithilfe dessen verschieden Situationen nachgestellt werden. Hierdurch sollst du dich mit dem Gebrauch dieser Funktionen vertraut machen und verschiedene, kombinierte Verwendungsmöglichkeiten kennenlernen.

Vorbereitung

Für die Bearbeitung dieses Projektes solltest du dich zunächst mit Funktionen in R beschäftigen. Dazu kannst du dich entweder selbst im Internet informieren, oder du nutzt diesen R-Blog zu if und else - Bedingungen in R. In der statistischen Lehre an der Goethe Universität werden diese Arten von Funktionen in dem Tutorial Loops und Funktionen für PsyBSc7 näher behandelt.

Desweiteren solltest du dich ein wenig mit dem Spiel Roulette auseinandersetzen. Auf SpielBank.com.de kannst du dir die Regeln und den Ablauf des französischen Roulettes durchlesen, um mögliche Wetten und die dazugehörigen Wettquoten kennenzulernen. Kurz zusammengefasst wir eine Roulettekugel in den Roulettekessel geworfen, welcher mit 37 Fächern (für die Zahlen 0-36) in abwechselnd roter und schwarzer Farbe - oder grün im Falle der 0 - bestückt ist. Ziel des Spieles ist es, die Zahl oder die Farbe vorherzusagen, auf welcher die Kugel in der folgenden Spielrunde liegenbleiben wird.

In der folgenden Tabelle sind die möglichen Einsatzvarianten samt ihrer dazugehörigen Gewinnquoten abgebildet. Je höher die Gewinnquote - also je statistisch unwahrscheinlicher - , desto größer die Auszahlung!

EinsatzvarianteEreignisGewinnquote
Die Einfache Chance“Rot” oder “Schwarz”, “Ungerade” oder “Gerade”, “Niedrig” oder “Hoch”1:1
Douzaines (Dutzend)12 aufeinanderfolgende Zahlen (1-12 / 13-24 / 25-36)2:1
Colonnes (Kolonne)Kolonne 34, Kolonne 35, Kolonne 362:1
Transversale Simple (Große Straße)6 Zahlen in zwei Querreihen untereinander5:1
Transversale Pleine (Straße)3 Zahlen in einer Querreihe11:1
Les Trois PremiersDie ersten 3 Zahlen (0-2)11:1
Les Quatre PremiersDie ersten 4 Zahlen (0-3)8:1
CarréSchnittpunkt zwischen vier Zahlen (z.B. 2-3-4-5)8:1
ChevalWette auf zwei angrenzende Zahlen17:1
PlainWette auf eine einzelne Zahl35:1

Der Wetttisch beim französischen Roulette sieht folgendermaßen aus:

Beispiel zur Verwendung von Funktionen

Im Folgenden bekommst du ein kleines Beispiel zur Verwendung von den Funktionen if, else, for und while. Stell dir vor, du spielst mit ein paar Freund:innen Monopoly und sitzt im Gefängnis fest. Um aus dem Gefängnis zu kommen, ist es notwendig, einen Pasch zu würfeln (zwei Würfel - zwei gleiche Augenzahlen). Als erstes möchten wir schauen, bei wie vielen von 50 Würfen ein günstiges Ergebnis - also ein Pasch - herauskommt.

Ergebnis1 <- NULL
Ergebnis2 <- NULL
Bedeutung <- NULL
Konsequenz <- NULL

Zuerst erstellt man dazu die Objekte, in denen man im Folgenden die Werte aus der Schleife speichern möchte. Ergebnis1 sehen wir dafür vor, jeweils die Augenzahl des ersten Würfels zu speichern; Ergebnis2 soll das gleiche für den zweiten Würfel tun. Die beiden Objekte Bedeutung und Konsequenz sollen jeweils die beiden Augenzahlen kombinieren und zum einen die Bedeutung ( “Pasch” oder “kein Pasch”) und zum anderen die daraus folgende Implikation für das Spiel “Du bist frei!” oder “Bleib im Gefängnis!” ausgeben. Die Funktion, die das umsetzt, sieht folgendermaßen aus:

for (i in 1:50) {         # Wie lang soll die Schleife sein? - 50 Wiederholungen
  wuerfel1 <- sample(1:6, 1)  # Zufallsziehung von Würfel 1
  Ergebnis1[i] <- wuerfel1    # Das Ergebnis von Würfel 1 wird jeweils in einem neuen Eintrag (Eintrag "i" für die i-te Runde/den i-ten Durchlauf) im Objekt "Ergebnis1" gespeichert.
  wuerfel2 <- sample(1:6, 1)  # Zufallsziehung von Würfel 2
  Ergebnis2[i] <- wuerfel2    # Abspeicherung des Ergebnisses von Würfel 2
  if (wuerfel1 == wuerfel2) {     # Wenn die beiden Würfel die gleiche Augenzahl haben, dann soll in dem Objekt "Bedeutung" abgespeichert werden, dass ein Pasch gewürfelt wurde. Ebenso soll in dem Objekt "Konsequenz" die Anweisung "Du bist frei!" ausgegeben werden.
    Bedeutung[i] <- "Pasch"
    Konsequenz[i] <- "Du bist frei!"
  } else {                # Ansonsten soll im Objekt "Bedeutung" abgespeichert werden, dass kein Pasch gewürfelt wurde und im Objekt "Konsequenz" die Anweisung "Bleib im Gefängnis!"
    Bedeutung[i] <- "kein Pasch"
    Konsequenz[i] <- "Bleib im Gefängnis!"
  }
}
Monopoly_Gefaengnis <- data.frame(Ergebnis1, Ergebnis2, Bedeutung, Konsequenz) # Datensatz aus den drei Objekten erstellen
View(Monopoly_Gefaengnis)     # Datensatz anschauen

Mit diesem Code “würfelt” man also 50 Mal, speichert die Augenzahlen jeweils ab und fügt Bedeutung und die daraus folgende Konsequenz für das Spiel hinzu. Am Ende liegen in allen 4 Variablen (Ergebnis1, Ergebnis2, Bedeutung und Konsequenz) 50 zusammengehörige Ausprägungen vor. Diese kann man dann in einen Datensatz zusammenfügen und erhält folgende Tabelle:

Ergebnis1Ergebnis2BedeutungKonsequenz
34kein PaschBleib im Gefängnis!
51kein PaschBleib im Gefängnis!
61kein PaschBleib im Gefängnis!
22PaschDu bist frei!
63kein PaschBleib im Gefängnis!
56kein PaschBleib im Gefängnis!
63kein PaschBleib im Gefängnis!
32kein PaschBleib im Gefängnis!
15kein PaschBleib im Gefängnis!
32kein PaschBleib im Gefängnis!

Desweiteren kann man überprüfen, wie lange es dauert, bis man einen Pasch würfelt. Dazu benutzt man folgenden Code:

wuerfel1 <- 0    # Würfel 1
wuerfel2 <- 1    # Würfel 2
m <- 0       # Anzahl Würfe

Zunächst muss man wiederum 3 Objekte erstellen, die man im Folgenden benutzen möchte. wuerfel1 und wuerfel2 sollen jeweils die Augenzahl eines Würfels abspeichern. Das wichtige dabei ist, dass man diesen beiden Objekten am Anfang ungleiche Zahlen zuordnet, denn ansonsten ist die Bedingung der Funktion direkt erfüllt.

m soll dann die Anzahl der Durchgänge zählen, die man bis zum Erfolg (“Pasch”) benötigt. Diese Variable sollte (logischerweise) bei Null beginnen. Warum das so ist, wird in der folgenden Funktion deutlich:

while (wuerfel1 != wuerfel2) {      # Bedingung
  m <- m + 1                # zählt die Durchgänge - pro Durchlauf +1
  wuerfel1 <- sample(1:6, 1)    # Würfel 1
  wuerfel2 <- sample(1:6, 1)    # Würfel 2
  print(c(wuerfel1, wuerfel2))      # Die beiden Augenzahlen werden pro Wurf ausgegeben, um die Ergebnisse nachvollziehen zu können.
}
## [1] 4 2
## [1] 3 6
## [1] 6 3
## [1] 3 2
## [1] 3 1
## [1] 1 4
## [1] 1 1

Jetzt kann man an der Variable m ablesen, wie viele Versuche man bis zu einem Pasch gebraucht hat. Denn angefangen bei 0 wurde m in jedem Durchlauf um 1 erhöht. In diesem Fall hat es erst im siebten Versuch geklappt.

m
## [1] 7

Das war es erst einmal mit der Einführung. Viel Spaß bei diesem Projekt!

Robin Mehler
Projekte