Hallo,
ich würde just for fun gerne die Gewinnwahrscheinlichkeit bei Blackjack ausrechnen.
Ich will mich für den Anfang auf den Fall spezialisieren, bei dem nur eine Person (man selbst) gegen den Dealer spielt.
Ich will Diese Berechnung verwirklichen indem ich zu Beginn eine "Startkonfiguration" vorgebe,
das heißt ich gebe die 2 Karten, die der Spieler zu Beginn hat und die 2 Karten die der Dealer hat, vor
(wie viel Karten wer anfangs kriegt, müsste ich nachgucken. kann auch anders sein)
Und dann gehe ich von einer Konfiguration zur nächsten indem ich gucke:
Ich gucke was bei jeder der möglichen Aktionen passsiert die der Spieler machen kann.
Wobei ich mich hier nur auf die Aktionen halten (also gar nix tun) oder Karte ziehen beschränke.
Ich gucke also bspw. beim Halten, wenn der Spieler eine Karte zieht, wie ist dann die neue Situation.
Der Spieler hat sprichwörtlich nix getan, der Dealer zieht seine 3. karte bzw. deckt Diese auf (ich müsste ehct nochmal die genauen Regeln nachlesen).
Wir befinden uns also in einer neuen Konfiguration (konfiguration gibt an welche (offen liegenden) Karten der Spieler sowie der Dealer zu einem zeitpunkt, nahc einer und vor der nächsten Aktion, haben).
Nun gibt es ja Konfigurationen, bei denen das Spiel direkt rum ist.
bspw. weil man selbst weniger als 21 hat und der Dealer ist über 21 gekommen.
dann hat man gewonnen.
oder umgekehrt, man selbst ist zuerst über 21 gekommen, dann hat man verloren.
Nun will ich gewissermassen rekursiv rükwärts das Ganze anpacken.
sagen wir ich habe eine Konfiguration und entscheide mich für Karte ziehen. Sagen wir, die Situation ist so dass ich je nachzu ziehender Karte entweder verliere oder das Spiel weitergeht.
Dann kann ich ja mit simpler Mathematik sagen:
Mit Wahrshcienlichkeit X wird die Karte Ass gezogen und in dem Fall würde ich das Spiel verlieren/weiter gehen.
Ob Gewinn oder verlust durch die Karte Ass lässt sich ja bestimmen indem ich vond ern Folgekonfiguration aus Weiterspinne wie das Spiel weitergeht, was am Wahrshceinlichsten passiert und was das Endergebnis ist wenn ich stets die beste Aktion wähle.
Um das mit der besten Aktion mal zu verdeutlichen:
Sagen wir ich bin genau 2 Punkte von 21 entfernt.
Heißt, wenn ich eine Karte dazubekäme und Alles ausser eine 1 kommt, verliere ich.
Kommt eine 1, würde ich je nach Dealerlage dann verlieren oder gewinnen.
Heißt, ich kann gucken:
Fall Halten:
heißt, ich mahce gar nix und bin bei 19 punkten.
dealer zieht eine Karte. mit Wahrshceinlichkeitsrechnung, Pfaddiagramm und Co. kann ich easy bestimmen mit welcher wahrshceinlichkeit es eine karte ist
die mir das Genick brehcen würde. bzw. umgekehrt wie wahrshceinlich ein Sieg ist (denn die aktionen des Dealers passieren ja zufällig und ich habe keinen Einfluss darauf. Lediglih wann der Dealer etwas tut oder nicht hängt von meinen Aktionen ab.)
das heißt, ich knnn bei der aktion "halten" bestimmen, wie wahrscheinlich es ist eine folgekonfiguration 8dealer hat eine karte mehr) zu erwischen bei der ich verliere.
diese wahrshceinlichkeit ist dann , ausgehend von meiner aktuellen konfiguration, die wahrshceinlich das Spiel noch zugewinnen, wenn ich in dieser runde halte.
gleichermassen kann ich aber auch hingehen und eine Karte ziehen.
Also der Fall wo der Spieler eine Karte dazu bekommt.
Hier lässt sich mit wahrshceinlichkeit auch bestimmen wie wahrshceinlich ich diese odr jene Karte erhalte.
dann mit Baumdiagramm kann man dann gucken wie wahrshceinlich der delaer diese oder jene karte hat.
und auswerten wie hoch die wahrshceinlichkeit für die gewinnfälle ist.
damit ergibt sich dann eine gewinnwahrshceinlichkeit für den Fall "KArte ziehen".
Nun habe ich also meine aktuelle Konfiguration und weiß, beim Tun welcher meiner beiden mmöglichen Aktionen wie wahrshcienlich ich gewinne.
Die "beste "Aktion in der Aktuellen Situation/Konfiguration ist dann natürlich die, mit der ich eine höhere Gewinnwahrshceinlichkeit habe.
Womit wir wieder zum Grundproblem zurückkommen:
Gegeben eine Startkonfiguration, wenn ich in jeder Runde die optimale Aktion tätige, wie wahrshceinlich ist es dann dass ich das Spiel gewinne?
Gleichermassen ist es natürlich auch zu wissen, falls ich mich inmitten einer fortgescrittenen Konfiguration befinde, wie wahrshceinlich ich das Spiel noch rumreißen kann?
Für das Ganze muss ich sicherlich sehr viel rekursiv programmieren und letztlich Alles Mögliche durchsimulieren und Angaben über Gewinn/erlust und Gewinnwahrshceinlichkeit an die Vorgängerkonfiguration zurückgeben.
Das Ganze ist für michg erade shcon eextrem schwer zu durchschauen was ich da Schritt für Schritt tun muss, geschweigedenn das zu simulieren.
Dass die Anzahl der Karten, die ein Spieler haben kann, nicht fest ist, macht es natürlich auch nicht besser.
Schließlich kann ein Spieler nur 2 Karten haben und wäre schon knapp an den 21 Punkten.
Oder er kann 15 Mal eine "1" ziehen und ist immer noch nicht annähernd an den kritischen 21 Punkten dran.
Insofern kann ich für die Konfiguration nicht einfach ein 2d-Array benutzen, weil ein Array ja feste Länge haben muss.
Habe auch shcon überlegt, irgendwie Objekt der Klasse "Konfiguration" zu benutzen die eben intenr die aktuellen karten als Arrays gespeichert hat und über eine Methode schlicht bestimmt ob man schon verloren hat.
Aber ich weiß nicht ob das zielführend wäre oder nicht.
Ich weiß auch nicht recht wie ich beim Rekursiven Durchgehen die Information über Gewinn/Verlust und deren Eintrittswahrscheinlichkeit am besten weitergebe bis zum Anfang durch :-/
ich würde just for fun gerne die Gewinnwahrscheinlichkeit bei Blackjack ausrechnen.
Ich will mich für den Anfang auf den Fall spezialisieren, bei dem nur eine Person (man selbst) gegen den Dealer spielt.
Ich will Diese Berechnung verwirklichen indem ich zu Beginn eine "Startkonfiguration" vorgebe,
das heißt ich gebe die 2 Karten, die der Spieler zu Beginn hat und die 2 Karten die der Dealer hat, vor
(wie viel Karten wer anfangs kriegt, müsste ich nachgucken. kann auch anders sein)
Und dann gehe ich von einer Konfiguration zur nächsten indem ich gucke:
Ich gucke was bei jeder der möglichen Aktionen passsiert die der Spieler machen kann.
Wobei ich mich hier nur auf die Aktionen halten (also gar nix tun) oder Karte ziehen beschränke.
Ich gucke also bspw. beim Halten, wenn der Spieler eine Karte zieht, wie ist dann die neue Situation.
Der Spieler hat sprichwörtlich nix getan, der Dealer zieht seine 3. karte bzw. deckt Diese auf (ich müsste ehct nochmal die genauen Regeln nachlesen).
Wir befinden uns also in einer neuen Konfiguration (konfiguration gibt an welche (offen liegenden) Karten der Spieler sowie der Dealer zu einem zeitpunkt, nahc einer und vor der nächsten Aktion, haben).
Nun gibt es ja Konfigurationen, bei denen das Spiel direkt rum ist.
bspw. weil man selbst weniger als 21 hat und der Dealer ist über 21 gekommen.
dann hat man gewonnen.
oder umgekehrt, man selbst ist zuerst über 21 gekommen, dann hat man verloren.
Nun will ich gewissermassen rekursiv rükwärts das Ganze anpacken.
sagen wir ich habe eine Konfiguration und entscheide mich für Karte ziehen. Sagen wir, die Situation ist so dass ich je nachzu ziehender Karte entweder verliere oder das Spiel weitergeht.
Dann kann ich ja mit simpler Mathematik sagen:
Mit Wahrshcienlichkeit X wird die Karte Ass gezogen und in dem Fall würde ich das Spiel verlieren/weiter gehen.
Ob Gewinn oder verlust durch die Karte Ass lässt sich ja bestimmen indem ich vond ern Folgekonfiguration aus Weiterspinne wie das Spiel weitergeht, was am Wahrshceinlichsten passiert und was das Endergebnis ist wenn ich stets die beste Aktion wähle.
Um das mit der besten Aktion mal zu verdeutlichen:
Sagen wir ich bin genau 2 Punkte von 21 entfernt.
Heißt, wenn ich eine Karte dazubekäme und Alles ausser eine 1 kommt, verliere ich.
Kommt eine 1, würde ich je nach Dealerlage dann verlieren oder gewinnen.
Heißt, ich kann gucken:
Fall Halten:
heißt, ich mahce gar nix und bin bei 19 punkten.
dealer zieht eine Karte. mit Wahrshceinlichkeitsrechnung, Pfaddiagramm und Co. kann ich easy bestimmen mit welcher wahrshceinlichkeit es eine karte ist
die mir das Genick brehcen würde. bzw. umgekehrt wie wahrshceinlich ein Sieg ist (denn die aktionen des Dealers passieren ja zufällig und ich habe keinen Einfluss darauf. Lediglih wann der Dealer etwas tut oder nicht hängt von meinen Aktionen ab.)
das heißt, ich knnn bei der aktion "halten" bestimmen, wie wahrscheinlich es ist eine folgekonfiguration 8dealer hat eine karte mehr) zu erwischen bei der ich verliere.
diese wahrshceinlichkeit ist dann , ausgehend von meiner aktuellen konfiguration, die wahrshceinlich das Spiel noch zugewinnen, wenn ich in dieser runde halte.
gleichermassen kann ich aber auch hingehen und eine Karte ziehen.
Also der Fall wo der Spieler eine Karte dazu bekommt.
Hier lässt sich mit wahrshceinlichkeit auch bestimmen wie wahrshceinlich ich diese odr jene Karte erhalte.
dann mit Baumdiagramm kann man dann gucken wie wahrshceinlich der delaer diese oder jene karte hat.
und auswerten wie hoch die wahrshceinlichkeit für die gewinnfälle ist.
damit ergibt sich dann eine gewinnwahrshceinlichkeit für den Fall "KArte ziehen".
Nun habe ich also meine aktuelle Konfiguration und weiß, beim Tun welcher meiner beiden mmöglichen Aktionen wie wahrshcienlich ich gewinne.
Die "beste "Aktion in der Aktuellen Situation/Konfiguration ist dann natürlich die, mit der ich eine höhere Gewinnwahrshceinlichkeit habe.
Womit wir wieder zum Grundproblem zurückkommen:
Gegeben eine Startkonfiguration, wenn ich in jeder Runde die optimale Aktion tätige, wie wahrshceinlich ist es dann dass ich das Spiel gewinne?
Gleichermassen ist es natürlich auch zu wissen, falls ich mich inmitten einer fortgescrittenen Konfiguration befinde, wie wahrshceinlich ich das Spiel noch rumreißen kann?
Für das Ganze muss ich sicherlich sehr viel rekursiv programmieren und letztlich Alles Mögliche durchsimulieren und Angaben über Gewinn/erlust und Gewinnwahrshceinlichkeit an die Vorgängerkonfiguration zurückgeben.
Das Ganze ist für michg erade shcon eextrem schwer zu durchschauen was ich da Schritt für Schritt tun muss, geschweigedenn das zu simulieren.
Dass die Anzahl der Karten, die ein Spieler haben kann, nicht fest ist, macht es natürlich auch nicht besser.
Schließlich kann ein Spieler nur 2 Karten haben und wäre schon knapp an den 21 Punkten.
Oder er kann 15 Mal eine "1" ziehen und ist immer noch nicht annähernd an den kritischen 21 Punkten dran.
Insofern kann ich für die Konfiguration nicht einfach ein 2d-Array benutzen, weil ein Array ja feste Länge haben muss.
Habe auch shcon überlegt, irgendwie Objekt der Klasse "Konfiguration" zu benutzen die eben intenr die aktuellen karten als Arrays gespeichert hat und über eine Methode schlicht bestimmt ob man schon verloren hat.
Aber ich weiß nicht ob das zielführend wäre oder nicht.
Ich weiß auch nicht recht wie ich beim Rekursiven Durchgehen die Information über Gewinn/Verlust und deren Eintrittswahrscheinlichkeit am besten weitergebe bis zum Anfang durch :-/