![]() |
---|
Hallo liebe Community, ich möchte eine kleine KI für Black Jack entwickeln und brauche eine Art Formel oder Berwertungsfunktion um den nächstbesten Zug zu berechnen Ich erläutere das am Besten anhand eines Beispiels: Dealerhand Spielerhand=16 Mein Programm hat auf Basis der vorhanden Karten errechnet, dass es eine Wahrscheinlichkeit von gibt, dass der nächste Punktestand für den Spieler zwischen und beträgt. Die Wahrscheinlichkeit dass der Spieler bustet, also mehr als zieht beträgt dann . Beim Spieler handelt es sich um die Wahrscheinlichkeit des nächsten Zuges, beim Dealer allerdings um die Wahrscheinlichkeiten aller möglichen Kombinationen, die zu einem Punktestand zwischen und führen können. Wobei beide Spieler stehen bleiben sobald die oder größer erreicht ist. Das ist deshalb so, weil der Dealer prinzipiell immer bis mind. ziehen muss, der Spieler allerdings kann nach jedem Zug neu entscheiden. Für den Dealer habe ich berechnet, dass die Wahrscheinlichkeit einen Punktestand zwischen und zu erhalten beträgt und die Wahrscheinlichkeit zu busten (über beträgt . Es ist noch zu beachten, dass wenn der Spieler bustet, das Spiel automatisch als verloren gilt, . der Dealer spielt nicht mehr. Wie kann ich nun diese Werte sinnvoll in Zusammenhang bringen und daraus eine Entscheidung, ob eine Karte gezogen werden soll oder lieber keine weitere Karten gezogen werden soll mit der Hoffnung, dass der Dealer bustet, ableiten? Klar für den Spieler beträgt die Wahrscheinlichkeit zu busten deutlich höher als die Wahrscheinlichkeit eine Karte zwischen zu erhalten. Doch wenn dieser auf der stehen bleibt bedeutet das dann, dass der Dealer eine Wahrscheinlichkeit hat zu gewinnen (also noch höher). Ich muss die Werte also irgendwie in Zusammenhang bringen weiss aber nicht wie. Gemäß der Basic Strategie die für BlackJack gilt, sollte der Spieler bei einem zu 2 Punktestand stehen bleiben. Mein Programm sollte ebenfalls auf Basis einer Berechnung zu diesem Ergebnis kommen, und nicht hartcodiert. Ich mache noch ein Spiel Erläuterung: Spieler Score bedeutet Punktestand für den Spieler bei dem eine Entscheidung getroffen werden soll. (Karte ziehen oder stehen bleiben) Spieler Winrate bedeutet die Chance eine zu erreichen. Spiele Bustrate bedeutet die Chance zu busten also zu überziehen Analog dann die selben Bedeutung für den Dealer Situation1: Spieler Score: Dealer Score: 2 Spieler WinRate: Spieler BustRate: Dealer WinRate: Dealer BustRate: Basic Strategie Empfehlung: Stehen bleiben Situation2: Spieler Score: Dealer Score: Spieler WinRate: Spieler BustRate: Dealer WinRate: Dealer BustRate: Basic Strategie Empfehlung: Karte ziehen Situation3: Spieler Score: Dealer Score: 6 Spieler WinRate: Spieler BustRate: Dealer WinRate: Dealer BustRate: Basic Strategie Empfehlung: Stehen bleiben Situation4: Spieler Score: Dealer Score: Spieler WinRate: Spieler BustRate: Dealer WinRate: Dealer BustRate: Basic Strategie Empfehlung: Karte Ziehen Vielen Dank für Eure Unterstzüung! Volrath Für alle, die mir helfen möchten (automatisch von OnlineMathe generiert): "Ich möchte die Lösung in Zusammenarbeit mit anderen erstellen." |
![]() |
![]() |
Mein Programm sollte ebenfalls auf Basis einer Berechnung zu diesem Ergebnis kommen, Nicht unbedingt, wiewohl sehr wahrscheinlich bei einem Stand von . Dein Programm weiß ja offenbar genau, welche Karten noch im Schlitten sind und kann daher . auch zu einem anderen Ergebnis kommen als die Faustregel. Zur Bewertung der Situation müsstest du dann aber schon für jeden möglichen Ausgang die WKTen berechnen. Also nicht nur Spieler bustet oder bekommt sondern für jeden Fall. Denn die WKT, dass der Dealer bustet, hängt ja auch davon ab, ob der Spieler noch eine Karte nimmt oder nicht. Du müsstest also für jedes Szenario bis zum Spielende genau die WKTen berechnen und danach die bestmögliche Option wählen. Einfach nur die WKTen Spieler-bust, Dealer-bust zu betrachten, kann nicht die optimale Entscheidung liefern. |
![]() |
Dein Programm weiß ja offenbar genau, welche Karten noch im Schlitten sind und kann daher . auch zu einem anderen Ergebnis kommen als die Faustregel. Die genannten Wahrscheinlichkeiten stammen von einem frischem Deck, . es wurden noch keine Karten gezogen. An sich brauche ich nicht die Wahrscheinlichkeiten für jeden möglichen Ausgang, da bis einschließlich der Spieler immer eine Karte zieht. Erst ab gibt es überhaupt die Möglichkeit zu busten. Und ab wird definitiv keine weitere Karte mehr gezogen. Der Dealer spielt in jedem Fall bis mind. und hört auf sobald er die erreicht hat oder verloren hat. Wie kann ich deiner Meinung nach die obigem Wahrscheinlichkeit am Besten in Zusammenhang setzen um eine Entscheidung zu treffen? Prinzipiell siegt der Spieler immer in folgenden Situationen: 1. Stehen bleiben und Dealer bustet 2. Karte ziehen ohne zu busten und Dealer bustet oder hat weniger Punkte Verlieren tut man dann wenn: 1. Stehen bleiben und Dealer erreicht zwischen 2. Karte ziehen und busten VG Volrath |
![]() |
sry, Doppelpost |
![]() |
Vielleicht habe ich auch eine falsche Methode um die Wahrscheinlichkeiten auszurechnen. Weiss jemand wie man sowas "richtig" macht? Also die Wahrscheinlichkeit auszurechnen eine bis und darüber zu erhalten? Dafür muss ich dich die WaTen von allen möglichen Kombinationen zwischen und ausrechnen oder? Sprich die erste Reihe wäre dann: quasi die Wahrscheinlichkeit, dass 9 mal hintereinander die 2 gezogen wird, wobei natürlich mit jedem Zug die nächste Wahrscheinlichkeit eine 2 zu ziehen sinkt. Den Wert addiere ich dann auf die Wahrscheinlichkeit dass eine erreicht wird. nächstes Beispiel wäre dann Dies ergibt ebenfalls und wird mit der vorherigen WaTen addiert. Dies wiederhole ich dann im Grunde für jede Kombination. Ist das richtig? |
![]() |
Ich bin noch dabei das ganze zu Optimieren um die Beste Entscheidung zu treffen. Prinzipiell sind wir ja von einem "Sieg" ausgegangen wenn wir 17 bis 21 erreichen, was ja nicht ganz richtig ist. Denn eine 21 schlägt natürlich die anderen Zahlen. Deswegen habe ich nun die Wahrscheinlichkeiten für die einzelnen Augenzahlen zwischen 17 und 21 berechnet. Nehmen wir mal an das wären die konkreten Wahrscheinlichkeiten für die Augenzahlen 17 - 21 und darüber. Wie kann ich jetzt anhand dieser WaTen errechnen, ob die Augenzahl des Spielers höher sein wird als die des Dealers. Was natürlich auch noch ganz gut wäre, ist wenn ich auch wissen könnte um wie viel % es besser oder schlechter sein wird. Hat da jemand eine Idee zu? -------Player -- Dealer 17----21,88%-----22,92% 18----23,56%-----20,90% 19----27,96%-----18,01% 20----7,99%------14,40% 21----9,04%------11,40% >21---9,5%-------12,33% |
![]() |
Jetzt sollte es einfach sein. Wir gehen davon aus, dass deine angegebenen WKTen richtig sind (dass sie sich nicht genau zu jeweils addieren liegt vermutlich nur an den Rundungen). Wie hast du die WKTen den berechnet. Hast du bei den für das erreichen von auch den Fall inkludiert, dass er mit der nächsten Karte erreicht und dann noch eine riskiert und eine 2 erhält? Das müsstest du eigentlich. Nur dazu müsstest du bereits eine Regel implementiert haben, wann er bei Stand von noch eine Karte nimmt. Du müsstest also fiktiv die WKT beim Stand von durch Nehmen einer weiteren Karte zu gewinnen berechnen und wenn diese dann die WKT eine 2 zu erhalten in die WKT für die inkludieren. Nehmen wir also mal an, dass deine WKTen alle korrekt ermittelt sind. Man berechnet nun einfach die WKT des Spielers, zu gewinnen, wenn er eine Karte nimmt, und wenn diese WKT größer als ist, soll er eine nehmen. Einen tie (bust), wenn also Spieler und Dealer die gleiche Punktzahl haben, rechne ich zum Gewinn für den Spieler dazu, da er ja auch hier zumindest keinen Verlust einfährt und das somit kein Grund ist, keine Karte zu nehmen und sich damit die Chance auf einen Gewinn zu verderben. Gewinnen kann der Spieler nun auf 5 Arten: Er erreicht und der Dealer erreicht auch oder er bustet. Die WKT dafür ist Er erreicht und der Dealer erreicht oder bustet Die Wkt dafür ist . Er erreicht und was der Dealer erreicht is egal Die WKT dafür ist Zählst du nun diese 5 WKTen zusammen, erhältst du woraus folgt, dass der Spieler eine Karte nehmen sollte. Auch, wenn er tatsächlich nur mit WKT einen Gewinn einfährt und mit WKT nur pushed (Gleichstand). |
![]() |
Prinzipiell ziehe ich zunächst ein bis zwei Karten und multipliziere dann die Wahrscheinlichkeiten aller Karten hinzu bis ich mind. 17 erreicht habe, da nach der 17 nicht mehr gezogen wird. Nehmen wir also an, dass folgende Kartenreihenfolge bei einem vollen Deck (52 Karten) gezogen wird: (Jede Karte kommt 4mal im Deck vor, ausser die 10, die kommt 4*4=16 mal vor da B,Q und K auch als 10 zählen) 3, 6, 2, 5,3 Somit ergibt sich folgende Wahrscheinlichkeit 4/52 * 4/51 * 4/50 * 4/49 * 3/48 = Wkt (die 3 wurde zweimal gezogen) Nun addiere ich diese Wkt auf den Punktestand 19. Weiteres Beispiel: 5,3,10 5/47 * 2/46 * 16/45 = Wkt Diese Wahrscheinlichkeit addiere ich dann der 18 hinzu usw.. Als Bust addiere ich die Wkt jedes Punktestandes über 21. Das ist doch so richtig? Ich habe nur ein Problem mit dem Ass da diese 4 mal vorkommt und sowohl für eine 1 als auch eine 11 gelten kann. Nun weiss ich nicht wie ich diesen Umstand korrekt beachten muss, um die Wahrscheinlichkeiten richtig auszurechnen. Hast du eine Idee? Dein Ansatz klingt sehr interessant und vielversprechend. Ich werde das mal gleich implementieren und berichten wie sich die Quote geändert hat. |
![]() |
Ich hab das mal getestet. Leider ist die Gewinnquote wesentlich niedriger als die der BasicStrategy. Hier mal ein zwei Entscheidungen, die anhand des Scores gefallen sind und sich von der Empfehlung der Basic Strategie unterscheiden. In beiden Fällen hätte laut BasicStrategy eine Karte gezogen werden müssen. Es handelte sich stets um ein frisches Deck. Anmerkung: Vielleicht muss man beachten, dass der Spieler verliert sobald er bustet, d.h. der Dealer spielt dann nicht mehr. Muss man das evtl. noch mit in die Berechnung miteinbeziehen, weil es ja die Gewinnchancen des Spielers neg. beeinflusst. Stand On 7 vs 12 Score: 0.43021873622043694 PlayWin: 0.5163203899802444 PlayBust: 0.4836796100197557 DealWin: 0.7389263032138763 DealBust: 0.26107369678612397 Player erreicht: 17:0.1045421960305869 18:0.1043138867358868 19:0.10163596014604828 20:0.10441489226968245 21:0.10141345479803997 22>: 0.4836796100197557 Dealer erreicht: 17:0.36910593119821394 18:0.13856198503797787 19:0.0780479827766283 20:0.07903830055911451 21:0.07417210364194167 22>: 0.26107369678612397 Stand On 8 vs 14 Score: 0.34938046501151077 PlayWin: 0.4490234648789928 PlayBust: 0.5509765351210071 DealWin: 0.759243212285502 DealBust: 0.24075678771449827 Player erreicht: 17: 0.09052504626369352 18: 0.09030938404381593 19: 0.09056320188721032 20: 0.08731644864045707 21: 0.09030938404381592 22>: 0.5509765351210071 Dealer erreicht: 17: 0.1297439819117179 18: 0.3624591241246656 19: 0.12895291500796807 20: 0.06896267552675348 21: 0.06912451571439683 22>: 0.24075678771449827 |
![]() |
Deine WKTen scheinen nur für den Beginn zu gelten, also wenn noch keine Karten ausgespielt sind. Natürlich müssen nach jeder ausgespielten Karten alle WKTen neu berechnet werden unter Berücksichtigung der Tatsache, welche Karten nun nicht mehr im Spiel ist. Wenn eine Variante mit tw verdeckten Karten gespielt wird, muss auch das berücksichtigt werden (wird zieml. umfangreich). Auch die besondere Stellung des Asses muss Berücksichtigung finden (indem beide Möglichkeiten "durchgespielt" werden) und auch Splitting und eventuell das in Europa eher unübliche Surrender sollte eingearbeitet werden. Das Ganze wird dann ziemlich aufwändig werden, nehme ich an. Es ist ähnlich wie bei einem Brettspiel, bei dem der Computer möglichst viele Züge voraus"denken" muss um eine Stellung bewerten zu können. Bei dir muss das Spiel bis zum Ende durchgedacht werden mit allen Möglichkeiten und bei jeder Verzweigung die entsprechende WKT berücksichtig werden. da nach der nicht mehr gezogen wird. Ja, aber das gilt doch nur für den Dealer. Für den Spieler sollte sich eine solche Strategie bestenfalls automatisch durch deine Bewertungsfunktion ergeben. Wenn du anfängst, für den Spieler feste Verhaltensregeln einzubauen, dann kannst du doch gleich eine der vielen im Netz verfügbaren, teilweise recht umfangreichen, Tabellen implementieren, die angeben, bei welchem Spielstand wie zu optimal reagieren ist. Da haben andere schon die WKTen (hoffentlich richtig) durchgerechnet. Außerdem scheint dein Ansatz zu sein, dass es nur einen Spieler und den Dealer gibt, also keine weiteren Mitspieler (deren Karten natürlich auch Berücksichtigung finden müssten) - eine eher krasse Einschränkung. Single Deck Blackjack ist heute auch sehr selten anzutreffen und wenn, dann meist mit einer niedrigeren Blackjack Quote von anstelle der sonst üblichen . Üblicherweise werden mehrere Spiele, meist manchmal auch 8 oder vermischt und in den Schlitten eingelegt. Viele Casinos verwenden auch automatische Mischmaschinen, in die bereits nach wenigen Spielen die ausgespielten Karten wieder reinkommen und mit den dort noch vorhandenen so vermischt werden, dass sie . auch gleich wieder ausgespielt werden könnten - sie kommen also nicht einfach hinten dran. Das wird einerseits gemacht, um Kartenzählen zu unterbinden und andererseits, weil es schneller ist und mehr Spiele bedeutet mehr Geld fürs Casino. Wie Online-Casinos das simulieren weiß ich nicht. Logisch wäre es, so zu tun, als wären unendlich viele Spiele miteinander vermischt. Damit wäre, auch wenn bereits Asse ausgespielt wurden, die WKT, dass die nächste Karte ein Ass ist trotzdem noch immer . Die Ermittlung der Wahrscheinlichkeiten ist also nicht so einfach und straightforward wie man anfangs vielleicht glauben möchte und ohne dass man das sauber hinbekommt wird man auch keine sinvollen KI-Entscheidungen erwarten dürfen. |
![]() |
> Außerdem scheint dein Ansatz zu sein, dass es nur einen Spieler und den Dealer gibt, also keine weiteren Mitspieler (deren Karten natürlich auch Berücksichtigung finden müssten) - eine eher krasse Einschränkung. < Jeder Spieler hat nur den Dealer als Gegner, also muss diesen besiegen. Es gibt also keinen Grund noch weitere Spieler zu implementieren. Also mir ist bewusst, dass es auch noch Optimierungspotential bei den Einsätzen, ob Double oder Split gibt. Im ersten Schritt wollte ich es einfach halten und habe das ganze nur auf 2 Ereignisse beschränkt nämlich Karte ziehen oder keine Karte ziehen. Die WKT der einzelnen Karternkombinationen werden natürlich nach jedem Zug neu berechnet. Es ist aber so, dass bei einem frischen Deck die BasicStrategy die Beste ist d.h. die KI muss in solch einem Fall auf dieselben Entscheidungen kommen. Deswegen war das erste Ziel, dass die KI bei einem frischen Deck anhand der Bewertungen auf dieselbe Ergebnisse kommt. Klar ist natürlich, dass es im späteren Spielverlauf dann Unterscheidungen geben wird, weil unsere KI ja die Karten zählt und deren WKT kennt. Das Problem ist nur, dass sich die Entscheidungen der KI schon bei einem frischen Deck von der BasicStrategy unterscheiden. Darin ist wohl die negative Gewinnquote begründet und natürlich ziehen sich diese Fehlentscheidungen dann im späteren Verlauf durch. (Zwei dieser Fehlentscheidungen habe ich ja genannt) Das Problem ist also mit dem Wissen der Wkt die richtige Entscheidung zu treffen. Anbei hänge ich noch die Spielzüge der BasicStrategy an (Stands on Soft 17). Wobei wir nur die HardHands beachten. SoftHands und Splits beachten wir aktuell der Einfachheithalber nicht. wizardofodds.com/games/blackjack/strategy/4-decks > Die Ermittlung der Wahrscheinlichkeiten ist also nicht so einfach und straightforward wie man anfangs vielleicht glauben möchte und ohne dass man das sauber hinbekommt wird man auch keine sinvollen KI-Entscheidungen erwarten dürfen. < Hmm, ja das dachte ich auch. Deswegen habe ich die Berechnungen der WKT mehrfach geprüft und konnte keinen Fehler feststellen. Allerdings habe ich noch die Besonderheit der Asses nicht berücksichtigt. Also wie schon beschrieben multipliziere ich ja die WKTs der einzlenen Karten miteinander und addiere das Ergebnisse dann auf die 19, falls die gezogenen Karten 19 ergeben. So ergeben sich dann meine Wkts. Das ist doch richtig oder? |
![]() |
Jeder Spieler hat nur den Dealer als Gegner, also muss diesen besiegen. Es gibt also keinen Grund noch weitere Spieler zu implementieren. Gerade in deiner One Deck only Variante ist das aber wichtig, welche Karten die Mitspieler bekommen haben. Was meinst du eigentlich andauernd mit "frischem Deck"? Zu Beginn sinds also nur die kompletten Karten, aber ab dann ändern sich doch die WKTen je nachdem, welche Karten gezogen werden. Das Problem ist nur, dass sich die Entscheidungen der KI schon bei einem frischen Deck von der BasicStrategy unterscheiden. Darin ist wohl die negative Gewinnquote begründet Casinos bieten doch keine Spiele an, bei denen der Spieler einen positive Erwartungswert hat! Ganz zu Beginn muss doch der Spieler eine negative Gewinnerwartung haben. Das liegt doch in der Natur des Spiels und im Wesentlichen darin begründet, dass eben, wie du vorhin selbst geschrieben hast, der Spieler beginnt und der Dealer nicht mehr weiter spielen muss, wenn der Spieler gebustet hat. Durch Mitzählen kann man dann seine Chancen um 1 bis 2 Prozent erhöhen (hier hat man bei der single deck Variante natürlich Vorteile). |
![]() |
>Gerade in deiner One Deck only Variante ist das aber wichtig, welche Karten die Mitspieler bekommen haben. Was meinst du eigentlich andauernd mit "frischem Deck"? Zu Beginn sinds also nur die kompletten 52 Karten, aber ab dann ändern sich doch die WKTen je nachdem, welche Karten gezogen werden.< wie schon bereits beschrieben, zähle ich jede gezogene Karte mit und berechne nach jedem Zug die Wahrscheinlichkeiten neu. Mit frischem Deck meine ich, dass das Deck vor dem Match nochmal neu gemischt wird, d.h. gezogene Karten werden zurückgelegt. Das habe ich testweise mal ausprobiert in der Hoffnung, dass bei einem "frischem" Deck die Entscheidungen der KI mit der der BasicStrategy übereinstimmen. Das ist nämlich das erste Ziel, denn die Entscheidungen der BasicStrategy sind bei einem frischem Dekcn nun mal die Besten. Vielleicht können wir ja anhand der Tabelle der BasicStrategy ableiten, was die Rechenbasis ist? > Casinos bieten doch keine Spiele an, bei denen der Spieler einen positive Erwartungswert hat! < Ziel ist es nicht einen positive Gewinnquote zu erzielen, sondern nur eine bessere als die der BasicStrategy. Selbst die BasicStrategy hat nur eine Gewinnquote nahe der 50, weil das Casino selbstverständlich im Vorteil ist. Ich habe mit einem Simulator mehrere Millionen Matches gespielt. Splits und Doubles habe ich nicht berücksichtigt. Hierbei hat der Spieler der nach der Basic Strategie geht und die Karten nicht zählt eine Gewinnquote von 46,7% gehabt. Unsere KI die, die Karten zählt und basierend darauf eine Entscheidung trifft hatte eine Gewinnquote von 46,5%. Das was ich erwartet hätte, ist dass die KI leicht besser sein sollte als der BasicSpieler. |
![]() |
Ich weiß nicht, ob diese Abweichung von zwei Zehntel Prozentpunkten bei nur ein paar Millionen Spielen so signifikant ist. Beinhaltet "Gewinnquote" nur die Info, ob ein Spiel gewonnen gewonnen oder tie) wurde oder beinhaltet es den monetären Gewinn. Anders gefragt, ist dabei auch die höhere Auszahlungsquote oder bei einem BlackJack beinhaltet? Wie berechnest du eigentlich die WKT, dass der Dealer zB erreicht? Berücksichtigtst du dabei auch die fiktiven Karten, die der Spieler bekommt? Ich meine damit, dass du eigentlich keine fixe WKT dafür angeben kannst, dass nach einem bestimmten Spielverlauf der Dealer eine bestimmte Punktesumme erhält (für den Spieler ist das sehr wohl möglich). Du müsstest für jede fiktive Möglichkeit der zukünftigen Spieler-Karten die WKT, dass der Dealer gewinnt, extra berechnen. Denn ja nachdem, welche Karten der Spieler bekommen wird, ändert sich ja die WKT für das Erreichen einer bestimmten Punktzahl beim Dealer. Ich denke, dass das das Problem bei deinem Ansatz ist. Einfaches Bsp: Dealerstand ist Spielerstand ist . Die WKT, dass der Spieler eine gewisse Punkteanzahl erreicht lässt sich so wie du es skizziert hattest leicht ermitteln. Um die WKT zu bestimmen, dass der Spieler genau erreicht musst du die WKTen, dass oder 4 gezogen wird. Der Dealer verliert nun, wenn er nur erreicht oder über kommt. Die WKT, dass er erreicht kannst du an dieser Stelle aber nicht so einfach ermitteln, wie du es vermutlich getan hast. Was du berechnen kannst und musst ist die bedingte WKT dafür, dass der Dealer erreicht unter der Voraussetzung, dass der Spieler erreicht hat. Dazu musst du die WKT, dass der Spieler bekommen wird, multiplizieren mit der WKT, dass unter dieser Voraussetzung sind nun zusätzlich nicht mehr vorhanden) der Dealer eine 3 oder bekommt. Dazu musst du das Produkt aus WKT Spieler bekommt mit der unter dieser Voraussetzung berechneten WKT, dass der Dealer 3 oder bekommt addieren usw. Das meinte ich auch erst damit, dass du eigentlich alle Möglichkeiten voruasberechnen müsstest. |
![]() |
Beinhaltet "Gewinnquote" nur die Info, ob ein Spiel gewonnen gewonnen oder tie) wurde oder beinhaltet es den monetären Gewinn. Anders gefragt, ist dabei auch die höhere Auszahlungsquote oder bei einem BlackJack beinhaltet? Die Gewinnquote ist die Anzahl der Siege durch die Anzahl der Siege plus Anzahl der Niederlagen. Gleichstand wird somit rausgerechnet. Wenn also Spiele gespielt wurden, 3 davon waren ein Sieg und 5 davon eine Niederlage und 2 Pushes ergibt die Gewinnquote: . Die getätigten Einsätze und der Kontostand spielen erstmal keine Rolle, da wir das Ziel haben die Gewinnquote zu verbessern. Einsätze, Splits und Doubles würden hinzukommen, sobald wir mit der KI eine solide Basis erreicht haben und diese muss höher sein als die der BasicStrategie. Du müsstest für jede fiktive Möglichkeit der zukünftigen Spieler-Karten die WKT, dass der Dealer gewinnt, extra berechnen Du hast in diesem Punkt recht. Das habe ich tatsächlich nicht so gemacht. Ich rechne aktuell die Wahrscheinlichkeit auf Basis der aktuellen Kartensituation aus und nicht mit der Bedingung, dass der Spieler bereits gezogen. Dies werde ich noch ergänzen. Was ic aber bei der Ausführung nicht verstehe, sind die Karten die du ziehst. Es steht ja zu und wir wollen die WKT errechnen, dass der Spieler bekommt. Dann gibt es eigentlich nur noch die Kombination oder 2. Warum schreibst du dann folgendes? "..genau erreicht musst du die WKTen, dass 1−3,3−1,2−2 oder 4 gezogen wird?" . ergibt doch . Ich habe aber verstanden, dass ich für jede Kombination die den Spieler zwischen bringt die bedingte Wahrscheinlichkeit des Dealers errechnen muss. Dann habe ich die Wahrscheinlichkeiten des Dealers die AUgenzahlen zu erhalten in Abhängigkeit zu der Wahrscheinlichkeit , dass der Spieler erhält. Das wären dann (P17uD17 bedeutet = WKT dass erhält unter der Voraussetzung dass der Spieler eine hat) P17uD17 P17uD18 P17uD19 P17uD20 P17uD21 P17uD>22 P18uD17 P18uD18 . . . P21uD>21 Dann natürlich auch noch die Wahrscheinlichkeit, dass der Spieler bustet, wobei dann die Hand des Dealers egal ist. Das wären dann jetzt viel mehr Wahrscheinlichkeiten und die Frage ist nun wie die KI daraus eine Entscheidung ableiten kann. Funktioniert dann noch der Ansatz den du vorgeschlagen hast? |
![]() |
ergibt doch . Ähmm, ja, du hast Recht. Ist aber auch eine schwierige Rechnung :-D) Ich habe aber verstanden, dass ich für jede Kombination die den Spieler zwischen 17−21 bringt die bedingte Wahrscheinlichkeit des Dealers errechnen muss. Ich würde es, wenn man diesen Aufwand schon betreibt, gleich so machen, dass du für jede Situation, die für den Spieler eintreten kann, die (bedingte) WKT berechnest, dass der Dealer verliert. Oder noch besser, weil weniger Aufwand - Berechne die WKT, dass der Dealer gewinnt (oder verliert), wenn der Spieler keine Karte mehr nimmt. Es geht ja nur um die Entscheidung, ob noch eine Karte genommen werden soll, oder nicht. Allerdings würde die KI dann vermutlich intelligenterweise gleich Beginn empfehlen, die Finger vom Spiel zu lassen ;-) Jedenfalls dürfte man so nicht die 50%-Grenze zur Entscheidung heranziehen. Nein, ich denke, man wird doch nicht drum herumkommen, alle Varianten zu bewerten und dann die mit dem geringsten Verlust zu wählen. Das wird umso schwieriger, wenn du eine Variante mit mehr als nur einem Spieler andenkst, weil im Gegensatz zum Dealer und dir als Spieler, die beide einer festen Strategie folgen, die anderen Spieler in ihrem Verhalten ja unberechenbar sind und alle Möglichkeiten berücksichtigt werden müssen. Auch die, dass ein Spieler beim Stand von noch eine Karte nimmt - die fehlt dann, wenn es darum geht, die WKT des Dealers, dich zu schlagen, zu kalkulieren. Schätze du wirst die Entscheidungsfunktion der Einfachheit halber rekursiv ausführen. Denn um in einer bestimmten Situation zu entscheiden, ob noch eine Karte genommen werden soll, wirst du in einer Schleife mal die möglichen Fälle die es beim Nehmen eine Karte gibt (mit Ass oder sind es dann Fälle) durchgehen und für jeden Fall die Gewinnwahrscheinlichkeit ermitteln. Wenn du dann zB den Fall "Karte ist eine 5" behandelst, so ist der nächste Schritt, zu entscheiden, ob eine weitere Karte genommen wird oder nicht. Also muss die Entscheidungsfunktion sich nun mit geänderten Bedingungen selbst aufrufen. |
![]() |
Ich werde dies implementieren und das Ergebnis dann mitteilen. Danke für deine Hilfestellung :-) |
![]() |
Hier noch ein paar Links Habe sie allerdings nur kurz überflogen, aber vl ist was Brauchbares für dich dabei. Viel Erfolg! Maturaarbeiten www.ksasz.ch/images/PDF-Dokumente/Maturaarbeiten/2012/4A/4a_suter_david.pdf http//wmisargans.ch/html_css/2012/dario/index.html BJ Wahrscheinlichkietsrechner www.card-counting.com/CVDPC.htm Geogebra Applet www.geogebra.org/m/yMTuDhHj#material/fdf46PGu Vortrag Steven Wu www.youtube.com/watch?time_continue=30&v=BP0XrWciTew Sammlung von WKT-Tabellen http//de.casinopope.com/blackjack-tabelle.html Facharbeit www.grin.com/document/149576 Eine Modellierung der Basic Strategy www.epubli.de/shop/buch/Erwartungswerte-f%C3%BCr-Black-Jack-Yannis-Maronidis-9783745074314/70763#beschreibung |
![]() |
Danke für die Links. Die waren echt hilfreich. Ich hab den Algorithmus zur Berechnung der Wahrscheinlichkeit geändert und bin dabei auf ein Problem gestoßen. Wir wollten ja jetzt die Wahrscheinlichkeiten des Dealers unter der Bedingung ausrechnen, dass der Spieler bereits gezogen hat. Nehmen wir mal an es steht 9 zu 9 und es gibt im Deck nur noch die Karte 4 und die Karte 8. Dann ist die Wahrscheinlichkeit der ersten Runde, dass der Spieler eine zieht Jetzt rechne ich alle Wahrscheinlichkeiten des Dealers aus unter der Bedingung , dass der Spieler eine hat und berücksichtige die bereits gezogenen Karten, . dann: und noch zusätzlich Somit ergibt sich für den Dealer die Wahrscheinlichkeit von eine zu erreichen unter der Voraussetzung das der Spieler mit den Karten 4 und 4 eine erreicht. Jetzt spielen wir die nächste Runde für den Spieler mit der 8. Nun ist wieder der Dealer dran sowie Hier ergibt sich für den Dealer eine Wahrscheinlichkeit von eine zu erreichen unter der Voraussetzung das der Spieler mit der Karte 8 eine erreicht. Um die Gesamtwahrscheinlichkeit des Dealers eine zu erreichen unter der Voraussetzung dass der Spieler eine hat zu berechnen, muss ich doch wie folgt rechnen: S17uD17 Dann noch zusätzlich die Wahrscheinlichkeit, dass der Dealer eine erreicht unter den Voraussetzungen, dass der Spieler eine und hat analog wie oben aufgeführt. Ist das so richtig? |
![]() |
Zunächst mal schreibe bitte nicht wenn du . % meinst! Diesen Fehler hast du durchgehend gemacht. Also entweder oder . In deiner zusammenfassenden Rechnung sollte statt wohl eher stehen und das Ergebnis dann sein. Das ist allerdings die Wahrscheinlichkeit dafür, dass beide erreichen, also . Die bedingte WKT dafür, dass der Dealer erreicht unter der Vss, dass der Spieler erreicht hat, liegt bei . Mit der Ergänzung auf also mit WKT gewinnt der Dealer mit wenn der Spieler bis spielt und dann stoppt. Bei all dem hast du aber bereits vorausgesetzt, dass der Spieler bei noch eine Karte nimmt und bei passt. Das darfst du aber nicht fix als Regel vorgeben, sondern das müsste dein Algorithmus dem Spieler raten. Genau das meinte ich, als ich schrieb, dass deine Entscheidungsroutine sich selbst aufruft, also rekursiv zu implementieren sein müsste. Diese Funktion sollte auch keine Wahrscheinlichkeiten als Ergebnis retournieren, sondern nur die Entscheidung, ob in einer bestimmten Situation noch eine Karte genommen werden soll oder nicht. Ich denke auch, dass zur Entscheidungsfindung nicht die WKTen zu gewinnen herangezogen werden sollte, sondern der Erwartungswert des Gewinns, also (Einsatz) im Falle des Gewinns, im Falle von BJ (oder was immer die Tischregel da ist), 0 im Fall von Gleichstand und im Falle eines Verlusts. Die Strategie ist, den Gewinn zu maximieren, oder besser gesagt den Verlust zu minimieren, also jene Variante zu wählen, die den geringsten Verlust verspricht. Dann noch zusätzlich die Wahrscheinlichkeit, dass der Dealer eine erreicht unter den Voraussetzungen, dass der Spieler eine und hat analog wie oben aufgeführt. Wie kann der Spieler in der von dir dargelegten Situation denn oder erreichen?? Er kann doch nur auf 9 bleiben, oder erreichen, oder busten. Der Dealer hat nur die Optionen oder in dieser Situation, denn im Gegensatz zum Spieler MUSS er bei noch eine Karte nehmen und DARF bei keine mehr nehmen. |
Diese Frage wurde automatisch geschlossen, da der Fragesteller kein Interesse mehr an der Frage gezeigt hat.
|