Wahrscheinlichkeitsrechnung beim Blackjack?

Aufrufe: 872     Aktiv: 09.07.2021 um 20:37

1

Hallo,

Erst mal kurz wie Blackjack funktioniert (meines Verständnisses nach, ausgehend von mir als einzigem Spieler):

Ich erhalte 2 karten und der "Dealer" erhält eine Karte, gezogen aus einem Kartendeck.

Jede Karte hat einen zahlwert.

Es gibt die Karten 2-9 (die auch jenen Wert haben), Bube, dame könig haben jeweils Wert 10.

Und das Ass hat je nach Situation den Wert 1 oder 11.

 

ich will mir an und für sich ein Programm schreiben, daNun bekomme wie gesagt ich 2 karten und der Dealer 1 karte zu beginn, die auch offen liegen.

Dies nenne ich mal die Startkonfiguration, die vorgegeben ist mehr oder minder.

Der Dealer hat zwar verdeckt auch noch eine 2. Karte, da ich aber nicht weiß was für eine das ist, kann ich sie nicht als "gegeben" annehmen.

 

Nun geht man als nächstes hin und der Spieler hat nun Wahlmöglichkeiten:

Entweder "hält" er seine aktuellen karten, sprich er tut gar nix weiter.

Oder er lässt sich eine beliebig gewählte anzahl an Karten geben, wie viel (oder eben ob gar keine) ist in der freien Entscheidung des Spielers.

 

Wenn sozusagen der zug des Spielers dann zu Ende ist, deckt der Dealer seine 2. karte auf und je nach der Summe der Werte der 2 karten wird noch eine 3. karte dem Dealer gegeben.

Kurzum, der Dealer erhält in seiner Runde 1-2 Karten dazu.

 

Am Ende vom lied werden beim Spieler die zahklenwerte zusammengezählt und beim dealer die zahlenwerte zusammengezählt und wer den größeren wert hat, hat gewonnen.

 

nun gibts noch ein paar sonderfälle was passieren kann zwischenzeitlich.

bspw. kann sich der spieler eine dritte karte geben lassen. wenn er mit der karte drei mal ne 7er karte da liegen hat, hat er automatishc gewonnen.

 

wenn er, egal wann, karten da hat die zusammen genau 21 sind, hat er gewonnen. ausser der dealer später kommt mit seinen 2-3 karten auch auf 21, in dem Fall wäre es ein unentshcieden sozusagen.

 

und wer über 21 geht, verliert direkt.

 

 

So in etwa sind die regeln, eine standardvorgehensweise und so "along the way" kommen immer mal wieder bestimmte sachen, die geprüft werden müssen und einen direkten gewinn oder verlsut bedeuten.

 

 

Viel vorgerede aber nun zum eigentlichen:

Ich will mir ein programm schreiben das, gegbeen die anfängliche startkonfiguration aus 3 karten (die 2 karten des spielers und die eine offenene karte des dealers) die ideale strategie bestimmt.

Wie entscheide ich welche handlung optimal wäre?

Indem ich die möglichen entscheidungen der reihe nach austeste:

wenn ich bspw. die hand halte, also sich beim spieler gar nichts mehr ändert.

dann gucke ich welche 1-2 karten kann der dealer noch erhalten (einach alle möglichkeiten durchgehen),

in wie vielen fällen gewinnt der spieler, in wie vielen verliert er.

und bestimme mir dadurch für die entscheidung "halten" sowas wie eine gewinnwahrshceinlichkeit.

Falls der spieler die entscheidung halten wählt, wie wahrshceinlich ist es dann dass er gewinnt?

 

gleiches will ich ebenso tun für den fall mit dem karten ziehen.

mein hauptproblem dabei ist die sache dass ja nicht vorgegeben sit wie viele karten der spieler zieht.

Er kann eine ziehen. oder auch 20.

 

Wobei es rein rechnerisch eine maximale anzahl karten gibt, die er ziehen kann, wo er mit nur einer karte mehr in jedem fall auf eine summe von mehr als 21 kommt.

Da es ovon der startkonfiguration aus schwierig ist zu sagen wie wahrscheinlich ein gewinn ist wenn er eine unbestimmte anzahl karten ist, will ich so gedanklich das ganze von hinten lösen.

 

sagen wir mal, wie eben erwähnt, er kann maximal 20 karten haben.

hätte er 21 , wäre er definitiv über 21 und würde garantiert verlieren (die 20 karten habe ich jetzt gerade mal so vorgegeben, müsste man mal nahcdenken drüber wo da der Trennwert ist).

Also vorgegeben eine konfiguration aus 20+1 karten.

was kann der spieler tun?

er kann halten. lässt sich durchspielen und die gewinnfälle durch die anzahl aller möglichen fälle teilen.

 

er könnte rein rechnerisch eine weitere karte ziehen. da würde er aber garantiert verlieren, denn da käme er ja per definition über den 21 wert.

 

Also ist es offensichtlicherweise die beste strategie , bei 20+1 gegebenen karten, zu halten.

denn karte ziehen=0% geiwnnwahrshceinlichkeit, halten=irgendwas>0.

daher ist hier halten die richtige strategie.

 

nun gehe ich rekursiv sozusagen einen schritt zurück und sage:

vorgegeben bestimmte 19+1 karten.

den haltenfall zu bestimmen ist trivial.

was wenn er eine weitere karte zieht?

Alle fälle durchspielen, unter de annahme dass er mit den dann gegebenen 20+1 fällen ideal weiterspielt, die jeweiligen gewinnwahrscheinlichkeiten aus dem 20+1 fall einbeziehen.

und wieder gucken wie oft er im mittel gewinnt.

und je nachdem ob das nun größer oder kleiner der halten wahrshceinlichkeit ist, haben wir die beste strategie für den 19+1 fall bestimmt.

so kann man das mit immer einer karte weniger rekursiv machen bis man im "basisfall" mit "1 karte ziehen oder halten"´?" angekommen ist.

so, rein meine theoretische überlegung, sollte man sich für jede situation eine perfekte vorgehensweise erarbeiten können, wobei eben schritt für schritt vorgegangen wird.

 

es gibt im übrigen neben "halten" und "eine weitere karte ziehen" auch noch andere Entscheidungsmöglichkeiten wie splitten doer so, aber die will ich nun mal ignorieren weils so eh schon kompliziert genug ist.

 

ich kann nun also am Ende vom lied auch angeben, gegbene die 3 karten startkonfiguration, was ist der beste erste schritt.

 

Nur was ich geistig, und auch aufgrund fehlender stochastikübung, nun nicht mehr hinkriege, ist die frage zu beantworten:

Angenommen man verhält sich immer optimal an jedem "Entscheidungspunkt" und wir beobachten alle möglichen spielverläufe die real vorkommen können, was ist das endresultat wie oft wir gewinnen vs wie oft wir verlieren.

heißt im mittel (Erwartungswert und sowas) gewinnen wir da öfter oder verlieren wir öfter wenn wir uns beim spiel stets optimal verhalten?

 

Das check ich nicht, wie ich das berechne.

 

Hat Jemand irgendeine idee zu dem Ganzen?

 

 

 

 

 

 

 

Diese Frage melden
gefragt

Student, Punkte: 304

 
Kommentar schreiben
1 Antwort
0

Moin,

eine rekursive Lösung ist hier wohl definitiv die sinnvollste Lösung.


Da das Spiel natürlich maßgeblich dadurch bestimmt wird, welche Karten du bereits zu Beginn hast und welche Karten du dazu bekommst, sollte man nicht für jeden "theoretisch möglichen Spielzug" bis 21 Karten alles im Voraus berechnen, weil es für das reelle Spiel ja gar nichts bringt.

Per se brauchst du eigentlich ein Programm, was deine und die offenen Karten des Dealers als Input bekommt und dann für die beiden Möglichkeiten "halten" und "ziehen" die jeweilige Wahrscheinlichkeit bestimmt.
Das sollte ja soweit möglich sein, dass du anhand der offenen Karten errechnest, welche Karten noch gezogen werden können und von denen schaust, welche davon würden dich "automatisch verlieren" lassen.

Und diese Rechnung muss eben dann für jede neu gezogene Karte gemacht werden.

Diese Antwort melden
geantwortet

Student, Punkte: 1.12K

 

hallo,
ja, so in die richtung hatte ich ja auch gedacht.

Eine funktion die sozusagen die aktuelle situation als input hat (also welche karte hat der dealer und welche karten hat der spieler)
sowie auch als input die geplante entscheidung hat (halten oder weitere karte ziehen. splitting und so ignoriere ich mal vorerst).
und der output sozusagen ist dann, wenn eben die situation ist und jene entscheidung getroffen wird, dann wird das spiel zu X% Wahrscheinlichkeit gewonnen.
dadrauf aufbauend lässt sich wiederum für eine gegebene situation die beste entshceidung finden. nämlich die für die, wenn man sie mit der situation zusammen eingibt in die funktion, die höchste wahrscheinlichkeit gibt.
Als output müssen wir uns also 2 sachen merken:
für eine gegebene situation, was ist die beste strategie und was ist bei gehung bdieses schrittes die gewinnwahrscheinlichkeit.

Und da denke ich eben an Rekursion, denn vom anfang (spieler hat 2 karten) aus vorauszusagen wie die wahrshceinlichkeit bei "ziehe eine weitere karte" ist, ist schwer. schließlich kann er insgesamt gesehen noch 1,2,3, etc. weitere karten ziehen.

daher würde ich es rekursiv machen:
sagen wir wir haben die 1-2 situation (dealer 1 karte, spieler 2 karten).
halten lässt sich shcnell durchspielen, muss man nicht drüber reden.

nun zu "weitere karte ziehen":
zusätzlich zu den schon liegenden 2 karten kommt nun also eine dritte karte hinzu.
diese kann 2,3,4,5,6,7,8,9,b,d,k,a sein.
haben wir also eine falluntershceidung mit 12 fällen zu betrachten.
erster fall:
es wird eine 2 gezogen.
dieser fall tritt mit wahrscheinlichkeit 1/12 ein, denn wir haben ja 12 karten, von denen eine gezogen wird.

Frage nun:
wenn wir die neue situation mit 2 karten, wobei die 3. karte ne 2 ist, haben, was ist bei perfektem verhalten die gewinnwahrscheinlichkeit?
das sagt uns wieder unsere funktion.

so bestimmen wir für jeden der 12 fälle die gewinnwahrshceinlichkeit, wenn eben jene karte die 3. des spielers ist.
und bilden sowas wie dene rwartungswert oder so indem wir
1/12*wahrshcienlichkeit wenn 2 die neue karte ist
+1/12*wahrshceinlichkeit wenn 3 die neue karte ist
+....

(hier kann man noch ausnutzen dass für b,d,k als wahrscheinlichkeit dasselbe rauskommt, man also 3*1/12*wahrshceinlichkeit wenn b die neue karte ist; nehmen kann statt der 3 einzelfälle. spart etwas zeit da man das ergebnis der einen rechnung 2 mal wiederverwenden kann)
was rauskommt, ist dann ausgehend von der vorgegebenen 2 karten situation die gewinnwahrshceinlichkeit für die aktion "neue karte ziehen".
dann haben wir noch unser gewinnwahrscheinlichkeit bezogen auf die aktion halten.
und was von beiden eine höhere wahrshceinlichkeit leifert, ist die perfekte strategie für die gegebene 2 karten situation.

so in etwas rekursiv.
letztlich baut die wahrshceinlichkeit des 2 kartenfall auf den wahrshceinlichkeiten der 12 3-kartenfälle auf.

so wird der n fall über die 12 n+1-fälle berechnet.

was ist die abbruchbedingung?
dann wenn man mit "neue karte ziehen" garantiert verliert.
bei wie viel karten das definitiv der fall ist, ist schwierig zu sagen, nach erster schätzung würde ich bei 10 ansetzen.
einfach weil 2 die kleinste karte ist 8wenn man den sonderfall igniert wo ein ass als 1 gewertet wird).
und 2*10=20 ist.
haben also bereits die maximale kartenzahl gezogen oder beim ziehen einer neuen karte enden alle fälle eindeutig in einem gewinn oder verlsut ohne dass man rekursion braucht.

die mehrfacheeutung des asses macht das ganze etwas lästig, aber dürfte auch kein problem darstellen.

so sollte man jedenfalls rausfinden können was bei einer gegebenen situation die perfekte strategie ist und wie wharshceinlich man gewinnt wenn man sie tut.

denke da an eine funktion
A(situation):= halten, falls B(situation, halten)>B(situation,karte ziehen);
karte ziehen, sonst

und B(situation, entshceidung) ist eben definiert wie oben, wo man den haltenfall durchgeht.
sowie den karte ziehen fall rausfindet indem man A(situation mit 2 neu), A(situation mit 3 neu), etc. bestimmen lässt,
also für jede situation mit ner neuen karte den besten move sowie guckt wie wahrshceinlich man damit gewinnt.


Wobei es glaube ich vermutlich sinnvoller ist generell sachen in einem tupel ( situation, entscheidung, zugehörige gewinnwahrscheinlichkeit) zu speichern oder so.
  ─   densch 09.07.2021 um 20:37

Kommentar schreiben