KI für Kartenspiel?
-
Hallo,
ich wollte schon länger mal ein Kartenspiel in C++ programmieren. Bald hab ich mehr Zeit und werde mich daran mal wagen. Allerdings steht ich noch ziehmlich auf dem Schlauch, was eine KI angeht. Vielleicht könnt ihr mir Helfen, wie ich folgendes angehen müsste:
Es soll eine Art BlackJack Variante werden. 52 Karten, die alle nur einmal gesehen werden können. Es gibt 3 Ablagestapel. Nicht jede Karte muss genutzt werden. Jeder Stapel kann bei einer Punktezahl von 21 aufgelöst werden. Man soll einen Stapel auch abbrechen können (gibt aber Minuspunkte). Auch würde ich noch gerne eigene Ereignisse für Extrapunkte definieren (zB mit möglichst wenig oder vielen Karten auflösen gibt Extrapunkte, oder alles eine Farbe etc).
Und dafür möchte ich mir dann eine KI programmieren. Aber diese soll nicht nur einfach erkennen, wo 21 Punkte möglich sind, sondern für jede Karte den optimalen Spielzug wählen.
Und da fehlen mir echt die Ideen. Alle möglichen Zustände und weitere noch mögliche Kombinationen kann ich ja schlecht live berechnen lassen.
Oder fragen wir mal anders: ist es überhaupt möglich, dafür eine perfekt spielende KI zu entwickeln?Danke
-
Kody schrieb:
Und dafür möchte ich mir dann eine KI programmieren. Aber diese soll nicht nur einfach erkennen, wo 21 Punkte möglich sind, sondern für jede Karte den optimalen Spielzug wählen.
Und da fehlen mir echt die Ideen. Alle möglichen Zustände und weitere noch mögliche Kombinationen kann ich ja schlecht live berechnen lassen.Was willst du denn sonst machen? Du musst die KI halt entscheiden lassen, ob noch ein Spielzug geht oder nicht. Ich würde es so machen
Kartenwert unter 16: Karte nehmen
Kartenwert 16,17,18: Risikoentscheidung nach Kontostand und ein wenig Zufall, evrtl sogar die KI die Karten zählen lassen (schwerer Modus oder so) und nach mögl. Karten die kommen können entscheiden. Sprich, wenn keine 2 oder 3 mehr im Stapel sind, nix mehr nehmen, ansonsten nach Chance entscheiden.Das ist schon relativ aufwendig glaube ich für ein simples BlackJack.
rya.
-
Du kannst auf jeden Fall anhand der bereits bekannten Karten ausrechnen, wie hoch die Wahrscheinlichkeit ist mit dem nächsten Zug die 21 Punkte zu überschreiten/zu erreichen/nocht nicht zu erreichen.
Genauso kann die KI berechnen wie hoch die Wahrscheinlihckeit ist, dass der Gegner mit seinem Blatt gewinnt/verliert, falls er noch eine Karte zieht oder eben nicht.
Die möglichen Zustände und Kombinationen lassen sich sehr wohl meist live berechnen, allerdings natürlich nicht indem man brute force alle Permutationen durchprobiert und auswertet sondern indem man vorher die entsprechende Stochastik betreibt und die KI mit der nötigen Formel versorgt.
Was deine KI per se NICHT kann ist zu erraten wie die Gegenspieler sich entscheiden (Karte nehmen oder sein lassen) und damit die tatsächliche Wahrscheinlichkeit, zu gewinnen oder zu verlieren.
-
Na ich weiß nicht ob das vielleicht zu aufwendig wird für nur nebenbei coden...
Ich würde zu gerne einen Lösungsalgorithmus für das Windows Solitär Spiel einsehen. Ich habe schon viel im www leider ohne Erfolg gesucht.
Vielleicht kennt von euch jemand eine Seite? Der Algorithmus müsste zu einer Art 'bestmöglicher Zug' führen. Ich denk, daraus könnte ich viel lernen und adaptieren.Hoffe jemand kann mir da weiterhelfen?
Danke in jeden Fall
-
Kartenspiele und KI ... wie Pumuckl schon meinte wirst du nicht umhin kommen, Wahrscheinlichkeitsrechnung zu integrieren. Dein Spiel, dessen Regeln ich nicht verstanden habe, ist ja ein Spiel mit unvollständigen Informationen (bitte geißelt mich nicht wenn das der falsche Ausdruck sein sollte) und somit gibt es den "perfekten" Zug nur im Sinne von Wahrscheinlichkeiten. Da ich nicht weiß, welches die nächste Karte sein wird, die ich ziehe, kann ich nur von den bisher erhaltenden Information ausgehend Schlüsse auf wahrscheinliche nächste Karten ziehen und damit auf Siegchancen. Und hier sind wir im Bereich der Wahrscheinlichkeit. Also keine perfekten Informationen. Macht deine KI aber den der Wahrscheinlichkeit nach besten Zug, so sollte er - auf lange Sicht gesehen - gewinnen. Ähnlich wie beim Poker. Die Profis gewinnen nicht jede Hand, aber auf lange Sicht gesehen, gewinnen sie mehr Hände als andere und machen dabei weniger Fehler und dadurch machen sie Geld. Das ist das Beste denke ich, was du deinem Programm beibringen könntest, solange der Computer nicht schummelt und sich die unaufgedeckten Karten anschauen kann. Also Wahrscheinlichkeit und Spieltheorie wären 2 Sachen die dich hier weiterbringen könnten.
PS: soweit ich mich erinnere benutzen Kasinos beim BlackJack einen ganz einfachen Algorithmus: ist der Wert der Karten <= 16 -> ziehe eine neue Karte und da bei einem unentschieden das Kasino gewinnt, reicht dieser einfache Algorithmus aus, um Knete zu machen.