Ein kleines Matheproblem (Details unten)

Ja aber ich wette dann kommen die nächsten Algorithmusfantatiker und faseln was von "schlechtem Stil" :p
 
Kokujou schrieb:
vielleicht fällt uns ja noch ne Formel dazu ein die die annäherung bringt
Wenn du tatsächlich allen für einen bestimmten Yaku fehlenden Karten die gleiche Wahrscheinlichkeit gezogen zu werden zuordnen kannst, dann hast du ja im Grunde einen Bernoulli-Prozess der Länge y. Und du suchst die Wahrscheinlichkeit für mindestens x Erfolge. Das ist dann einfach die Summe der Wahrscheinlichkeiten genau x, x+1, ... y, Erfolge zu haben. Das rechnet dir der Computer auch ziemlich schnell aus.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: BeBur
Naja aktuell geht allein in die Berechnung der Einzelwahrscheinlichkeiten der Karten ja schon viel rein... Ich umreiße das mal:

Zuerstmal werden alle Karten rausgeschmissen die bereits eingesammelt sind,
Aktuell sind die Whkt. für die Karten auf der Hand und die vom Deck gezogen werden = 1, aber da suche ich noch ne gute Näherung.

Wichtig sind die Werte für die Karten auf dem feld und die gegnerische Hand sowie das gegnerische Feld:
Für das Feld wird ne Art wettbewerb fortgeführt. Zuerst werden alle Matches aufgelistet sowohl von der Hand als auch vom deck. Dann wird die Anzahl der Matches wo die Karte mit drin ist durch die gesamtanzahl geteilt, standard.
Das ist die Wahrscheinlichkeit dass der Gegner die Karte zieht. Also noch 1 - x rechnen, also die Wahrscheinlichkeit dass der gegner diese Karte nicht paaren kann.
Dann wird das nochmal mit demselben beim Spieler multipliziert, denn nur weil er sie nicht einsammeln kann heißt es ja nicht dass die KI es kann, dafür braucht auch sie einen gewissen anspruch. Und den Anspruch des Gegners wichte ich, zwecks Vorhersage, eventuell noch mit einem vorübergehenden Kartenwert der z.B. aussagt an wievielen Yaku diese Karte beteiligt ist. z.B. gehört die Sake-Schale zum Hanamizake, Tsukimizake und ich glaub noch zu Sankou, Shikou, Ameshikou und Gokou. also eine sehr geile Karte ;) Das gilt aber nur für die feldkarten!

Die Whkt gegnerische Karten zu bekommen ist meistens 0, es sei denn der Gegner hat keinerlei Matches die er einbringen kann. warum auch sonst sollte man auf eine seiner Karten verzichten. Höchstens noch man wäre extrem sicher dass man sie im nächsten Zug so wieder einsammeln kann und dass der Gegner sie dir nicht wegschnappt aber auch dann wäre der Zug recht sinnlos.
Wenn der Gegner also keine Matches hat ist die Wahrscheinlichkeit der Karten grundsätzlich identisch, eventuell wieder noch gewichtet mit einem Kartenwert.

Die allwissende KI ist ja in der positiven Lage so zu spielen dass alle Deckkarten theoretisch zu 100% eingesammelt werden können. Und natürlich auch so dass man immer jede Handkarte einsammelt, auch unter zu Hilfe name der sonst unbekannten Karten des Decks, die gezogen werden. Also hab ich das erstmal mit 1 approximiert, werde aber noch eine bessere Näherungslösung bestimmen.

Außerdem gibt es einen Fakt bei jedem Zustand: Der Gegner ist dran. Und das bedeutet er zieht zu 100% wahrscheinlichkeit immer dieselbe Karte vom Deck. Und da die Modifikationen am Spielfeld eher minimal sind kann ich diesbezüglich die Wahrscheinlichkeit aller an diesem Zug beteiligten Karten überschreiben. Gibt es also Matches, ist die wahrscheinlichkeit diese Deckkarte einzusammeln = 0, denn der Gegner hat sie.
Dasselbe gilt für die Karten die mit sicherheit eingesammelt werden. Wenn aber 2 gleiche auf dem Deck liegen reduziert sich die Wahrscheinlichkeit folglich zu 50%, auch das kann man noch über den Kartenwert wichten.

Das blöde ist ich würde in den Kartenwert gerne die "relevanz" der Yaku einsortieren. Also z.B. ob der Gegner sie überhaupt einsammeln kann, wie nahe er dem Yaku ist etc. Aber um das zu berechnen brauche ich ja die grundlegenden Eigenschaften der Karten und um die zu berechnen.. etc ^^
 
Deine allwissende KI kennt also nicht nur die Karten des Gegners, sondern weis auch, in welcher Reihenfolge neue Karten gezogen werden?
 
Jup sie kennt das ganze Deck. Das ist quasi der einfache Ansatz ^^ aber keine Sorge ich hab noch einen bei dem sie das alles nicht weiß und noch einen Wo ich nen kompletten Suchbaum aufbaue. Das wird ein Gaud.
Mein Ziel ist es quasi auf Basis der allwissenden KI die Gewichte anzupassen, die ich dann für die nächste KI verwende.
Und ich passe die Gewichte händisch an weil ich nie wirklich gelernt hab wie ich dieses ganze Gewichtanpassen durch maschinelles Lernen hinkriege. Meine Professoren haben zwar sehr viel Theorie vermittelt aber für mich war das ohne den richtigen Praxisbezug wie spanisch Rückwärts XD
 
Mal was anderes das mit den Iterationen kann ich höchstens bei 1.000 Iterationen machen.
Bedenke bitte dass ich 13 yaku pro Zug bei mindestens 64 Zügen berechnen muss. Das dauert jetzt schon ein paar Sekunden zumindest aufm handy.
aber der Näherungswert ist hoffentlich auch bei 1.000 OK
 
Also 10000 Iterationen, von der Art wie besprochen, dauern auf halbwegs aktuellen CPUs vielleicht ein paar hundert Mikrosekunden.

Außerdem kannst du ja einfach ausprobieren, ob bei 1000 Iterationen auch schon vernünftige Werte rauskommen. Und du musst sowieso nur einmal für alle Yaku iterieren und nicht für jeden Yaku neu.
 
Nicht wirklich. Die Kartenwahrscheinlickeiten Ändern sich ja je nach zustand. Und darauf basierend natürlich auch die Wahrscheinlichkeiten der betreffenden Yaku... man könnte das abdocken aber joa...

also ich glaub nicht dass ich bei nem 5zeiler was falsch gemacht hab. ich hab ne Funktion geschrieben, die ein Array und die Mindestgröße als Ganzzahl aufnimmt, das Array durchläuft und für jedes Element ne Zufallszahl zwischen 0 und 1 generiert. Ist die kleiner als der Wert im Array wird erhöht.

Wenn am Ende die Zahl der Erfolge größer als die Mindestgröße war wird wahr zurückgegeben. Sonst... naja nicht xD Auf Handy dauert mein code jetzt aber trotzdem 3-4 Sekunden. Bei 1.000 Iterationen....
Naja egal hauptsache erstmal ne Näherungslösung.
 
Mich würde interessieren, wie die Spielstärke am Ende ist. Wäre schön, wenn du das irgendwann nachreichen könntest.
 
Die Basis steht ja inzwischen. Wenn ich die Gewichte anpasse...

Die Evaluation ist natürlich immer ein großes Thema... vermutlich muss ich die KI Abdocken und gegen sich selbst spielen lassen.

Der Anspruch meiner letzten und größten KI ist es übrigens an ein beliebiges Hanafuda-Spiel angedockt werden zu können. Also dass man quasi händisch immer wieder alle bekannten Karten eingibt.

Darum werd ich da auch mal ein paar Demospiele starten mit der Steam Koi Koi Version :3
 
Zurück
Oben