Ein kleines Matheproblem (Details unten)

Ja man kann dann nur noch zwei ziehen in dem Beispiel aber wie gesagt das ändert nicht die Wahrscheinlichkeit des Ziehens beider Karten UND sie addieren sich nicht zu 1 auf.
die Kombi 0.2 0.2 0.2 ist also auch möglich. Das urnenbeispiel trifft es also nicht ganz.

Es wäre auch viel zu komplex es mit entsprechenden Auswirkungen zu modellieren die Wahrscheinlichkeiten der Karten würden sich kontinuierlich ändern und die sind auch so schon komplex genug.
Ergänzung ()

Bevor ich schlafen gehe noch ein kleines Addendum:
Ich baue wie gesagt eine KI. Ich bewerte dazu die Mindestzeit die für die möglichen Yaku erforderlich ist sowie die Wahrscheinlichkeit ihn überhaupt einzusammeln um es am Ende zu einer Funktion zur bewertung eines Zustandes zusammenzubasteln.

Auf mich kommt noch einiges zu, im 2. modus der KI nehme ich z.B. an dass die gegnerischen Karten tatsächlich unbekannt sind um es fairer zu machen.

Aber zurück zum Thema: Die Einzelwahrscheinlichkeit der Karten sagt aus, wie wahrscheinlich es ist sie überhaupt einsammeln zu können. Also z.B. ob es sinnvoll ist anzunehmen dass der gegner eine seiner Karten aufs Feld legt, die Wahrscheinlichkeit dass sie auf dem Feld liegen bleibt und nicht vom Gegner anvisiert wird, die Wahrscheinlichkeit dass dasselbe beim Ziehen passiert etc... Da kommt also noch etwas auf mich zu.

Am Ende will ich erreichen dass Yaku nicht sowas dummes einbeziehen wie Yaku die sich primär aus den Karten der Hand des Gegners auseinander setzen. Will das aber auch nicht ausschließen denn wenn der gegner keine Karten mit dem Feld paaren kann muss er was aufs Feld legen.

Wenn irgendjemandem ein besserer Ansatz zur Berechnung der endgültigen Wahrscheinlichkeiten einfällt dann nur raus damit ^^
 
Zuletzt bearbeitet:
Kokujou schrieb:
Ich bin nicht sicher wie man das Szenario hätte so verstehen können dass ein Mehraches Ziehen von Karten möglich ist.
"P(c1) [...] P(c1&c2&c3)"
Du nennst P(1) und P(1,2,3). D.h. man muss 3 mal ziehen können. Um bei dreimal ziehen nur die 1 zu haben, muss man die 1 dreimal ziehen.
Weiterhin
Kokujou schrieb:
Ja man kann dann nur noch zwei ziehen in dem Beispiel aber wie gesagt das ändert nicht die Wahrscheinlichkeit des Ziehens beider Karten UND sie addieren sich nicht zu 1 auf.
die Kombi 0.2 0.2 0.2 ist also auch möglich.
Nope, 0.2, 0.2, 0.2 ist nicht möglich. Wahrscheinlichkeiten addieren sich immer zu 1 auf.
Wenn man dann nur noch zwei Karten ziehen kann, sind die Ereignisse abhängig von einander und du musst über den kompletten Baum (außer die erste Ebene) mit abhängigen statistischen Verteilungen arbeiten: P(y)P(x|y)P(z|y,x)
Und ein Zweig aus dem Baum sieht dann so aus: P(1,2,3)=P(1)P(2|1)P(3|2,1)
Und die Wahrscheinlichkeit für das Ziehen von drei unterschiedlichen Karten wäre dann: P(1,2,3)+P(1,3,2)+ P(3,2,1)+P(2,3,1)+P(3,1,2)+P(2,1,3) (3! mögliche Reihenfolgen).

Wie aber soll man nur Karte 1 ziehen können? Wenn du die Karten weg nimmst, ziehst du immer alle drei Karten, wenn du dreimal ziehst…
Kokujou schrieb:
Es wäre auch viel zu komplex es mit entsprechenden Auswirkungen zu modellieren die Wahrscheinlichkeiten der Karten würden sich kontinuierlich ändern und die sind auch so schon komplex genug.
Und du denkst es ist zielführend einfach das statistische Modell zu ändern als Approximation? ;)
Mit Wahrscheinlichkeiten hat das dann nichts mehr auf dem Hut.

Afaik kann man Abhängigkeiten im Sinne einer Approximation nur weglassen, wenn man auch die Wahrscheinlichkeiten der Ereignisse abändert. Ich kenne keine händische Methode, die man hier sinnvoll anwenden kann.
Wenn du schon die zu approximierende Verteilung hättest (was ja nicht der Fall ist) oder eine Statistik dazu aufstellen würdest, könntest du die Verteilung mit Variational Inference oder vergleichbaren Verfahren approximieren. Ist aber, im Falle von variational Inference schon ein beträchtlicher mathematischer Aufwand ;)
So viel dazu, wenn du wirklich Wahrscheinlichkeiten ausrechnen wollen würdest.

Vielleicht doch mal in einem Mathematik-Forum nachfragen. Wär toll wenn du berichten würdest, wenn du eine interessante Lösung entdeckt hast.

Wenn du nur die "beste" Karte berechnen möchtest, gibts ggf. noch andere Methoden (darunter der Vorschlag von @simpsonsfan , Reinforcement Learning und andere Machine Learning Methoden ), aber um das zu überprüfen, müsste man sich erstmal über das Szenario klar werden.
Was fest steht ist nämlich, dass wenn man 3 Karten ohne zurücklegen zieht (können unterschiedliche Wahrscheinlichkeiten haben), ist die Wahrscheinlichkeit 3 verschiedene Karten zu ziehen 1, und die Wahrscheinlichkeit aller anderen Szenarien 0.
 
Ich sagte doch in meinem Modell zieht man alles auf einmal...
Und ich sagte das ses eben doch so ist dass die Wahrscheinlichkeiten sich nicht zu 1 aufsummieren. Wir reden hier von nicht zusammenhängenden Ereignissen die gleichzeitig und unabhängig voneinander stattfinden aber selbst wenn das als Begründung noch nicht reicht, dann aber mindestens dass diese Ereignisse nur ein Teil des gesamten sind.

Wir betrachten doch nur die für den Yaku wichtigen Karten. Es gibt aber insgesamt 48 Karten die man im Spiel ziehen kann oder zumindest die im Spiel existieren. Also nix aufsummieren zu 1 das kannst du mir ruhig glauben denn das einzige was sich wirklich zu 1 bei mir aufsummiert ist die Wahrscheinlichkeit die Karte zu ziehen + die Wahrscheinlichkeit sie nicht zu ziehen. Denn ich entwickle die Einzelkartenwahrscheinlichkeiten doch selbst....

Wenn ich schon höre "ohne zurücklegen". Du scheinst dich mit meinem Modell nicht anzufreunden zu können. Wir reden hier nicht vom Urnen Modell. Das Ziehen einer Karte ist ein Ereigniss mit einer bestimmten Wahrscheinlichkeit. Begriffe wie Zurücklegen oder nicht zurücklegen existieren in diesem Zusammenhang nichtmal. Es gibt nur eine Sache die gegeben ist: Die Basiswahrscheinlichkeit.

Aber keine Sorge ich habes elbst eine Überlegung getätigt.
Ergänzung ()

Da liege ich gerade im Bett und will schlafen plötzlich kommt die Erleuchtung.
Mein Ursprünglicher Ansatz war wohl richtig. Aber er muss erweitert werden. Die Anzahl der zu addierenden Terme beläuft sich auf:
[mögliche Karten] über [Mindestgröße] (Binomialkoeffizient)
Wir reden hier von der Struktur eines Terms die so aussieht:
x_1*x_2*...x_(minSize-1)(x_minSize+x_(minSize+1)+...x_(mögliche Karten))

In Worten multipliziert man so viele Wahrscheinlichkeiten auf bis zur Mindestgröße des Yaku - 1 als basiswahrscheinlichkeit und addiert den Rest der verbleibenden Wahrscheinlichkeiten um es mit der Basiswahrscheinlichkeit zu multiplizieren.

Allerdings reicht das noch nicht, denn sie sind nicht gleich. Also muss man diese Terme so oft neuordnen wie es der Binomialkoeffizient oben angibt.

sodass also nicht nur da steht x_1 * x_2 * ... * (x_m + x_(m+1) + ... + x_n)
sondern auch sowas wie x_n * x_(n-1) * ... * x_(n-(minsize - 1)) * (x_1 + ... + x_(minSize - 1))

Leider habenw ir es nicht mit aufeinanderfolgenden ganzen Zahlen zutun, höchstens bei den IDs und das bringt mir nix.

Also werde ich wohl oder übel händisch mit gefühlten 50 For-Schleifen diese Formel integrieren müssen.

Aber sagt mir wenigstens ob dieser Ansatz jetzt sinnvoler klingt oder ob ihr euch zumindest an Hand dieses Ansatzes vorstellen könnt was ich meine XD

Ich weiß nur: Wir reden hier von Kombination also keine Wiederholungen und ohne Berücksichtigung der reihenfolge.
 
Also du hast 48 Karten und 3 Wunschkarten und willst von den 48 Karten am liebsten deine 3 Wunschkarten ziehen, und die Wahrscheinlichkeit ausrechnen, dass mind 2 von den Wunschkarten gezogen werden?
Ergänzung ()

Kokujou schrieb:
ob ihr euch zumindest an Hand dieses Ansatzes vorstellen könnt was ich meine XD
Nein, weil anscheinend niemand versteht was genau dein Szenario überhaupt sein soll.
 
Zuletzt bearbeitet:
och Leute ich sprech doch kein Mandarin XD so schwer ist das nicht.

Ich hab ein abgespecktes Szenario gebaut. Es gibt 48 Karten. Zu jedem Yaku gehören x Karten. Und er erfordert mindestens y Karten.

Also suche ich die Wahrscheinlichkeit mindestens y von x Karten einzusammeln. Und das ist zumindest theoretisch der ANsatz den ich beschrieben habe. und das halbwegs komprimiert.

Denn meine "Formel" enthält so das Produkt der Wahrscheinlichkeiten jeder konstellation die dafür in Frage kommt und zwar ohne Wiederholungen und unter Vernachlässigung der Reihenfolge.

Also klingt das wie ein guter Ansatz. Das ist quasi dasselbe wie du mal gemacht hattest nur hattest du Wiederholungen drinne.
 
Ich kenne das Spiel nicht 48 ist also die Gesamtzahl aus allen inclusiv der 8 Karten auf der Hand Pro Spieler?
Ich glaube um das zu verstehen muss man das Spiel können ich habe jetzt etwa 45Min Lang viele warscheinlichkeiten Ausgerechnet aber ich kann sie nicht zusammen bringen weil es zu viele Variablen gibt die immer Tiefer gehen^^.

Wie es aussieht kann diese Karte/n die du "benötigst" Überall sein im Spiel ist das Richtig?

Denn ich weiß zum Beispiel nicht ober der Gegner von seinen 8 die für Dich nötigen Karten ablegt oder ob er sie generell auch dringen benötigt oder es aber auf sein Vorgehen ankommt und er eventuell andere sammeln kann um auch zum Ziel zu kommen. Das ist eine der Warscheinlichkeiten die ich nicht einbringen kann weil ich sie in ihrem Spielablauf-Verhalten nicht einschätzen kann.
Dafür müsste ich wissen wie viele Mögliche Gewinn-Konstelationen im Spiel sind um die Warscheinlichkleit SEINER Wahl zu errechen. Und ober durch deine Spielzüge nicht sieht was Dein Vorgehen ist und dieses noch zusätzlich unterbinden kann. Das würde Die Warscheinlichkeit weiter Minimieren.
Darüber könnte man alledings auch die Schwierigkeit einstellen^^

Mathematisch ist es von Außen betrachtet erstmal nur ne ziemlich einfache Rechnung. Nur wie Komplex soll es sein? je genauer es wird je Mehr Warscheinlickeiten wären zu berechnen und zu Kombinieren.

Mathe ist toll:love::love::love::love:
 
Genau. Und weil es so komplex ist berechne ich ja nur näherungswerte. Die Wahrscheinlichkeit dass die Karte zu einer bestimmten Zeit an einem bestimmten Ort ist und eingesammelt werden kann wäre zu viel. Zu viele Variablen. Also berechne ich irgendeine Wahrscheinlichkeit die dem wenigstens ein bischen Nahe kommt. Man muss ja nicht gleich die Weltformel erfinden, wichtig ist nur dass gewisse Karten wahrscheinlicher sind als Andere und der Fakt dass sie eben nicht mit Sicherheit eingesammelt werden können sondern eine gewisse Unsicherheit besteht. Das sind die Gedanken die meinem KI-Algorithmus zu Grunde liegen.

Die Komplexität soll so sein dass eine Verbesserung erzieht wird als wenn ich alle Karten mit einer Wahrscheinlichkeit von 1 einsammeln kann. Darum habe ich ja die Formel vorgeschlagen die bis jetzt noch keiner Kommentiert hat ;)

Aber wenn ihr andere und bessere Näherungswerte kennt dann nur raus damit.

Vielleicht noch ein kleiner Exkurs über die Funktionsweise meiner KI. Ich baue in jedem Zug neue Zustände auf. Virtuelle Zustände die ich dann einzeln bewerte. Also anders gesagt ziehe ich jede Karte von der Hand + die erste Karte vom Deck. Daraus ergeben sich möglicherweise Entscheidungen wie z.B. wenn 2 Karten mit demselben Monat auf dem Feld liegen, welche davon ich einsammle. Dasselbe beim Deck.

Ich bewerte nun jeden dieser Folgezustände und zwar nach zwei Kriterien: Das globale Minimum, also wie viele Züge noch bis zum ersten Yaku verbleiben und zum Zweiten alle Yaku die durch die in diesem Zug eingesammelten Karten verfolgt werden. Also ihre Wahrscheinlichkeit, ihre Mindestzeit bis zur Erfüllung.

Dann baue ich für jeden Zug auch die Gegnerzüge auf, bewerte sie ebenfalls auf diese Weise und kombiniere das alles dann in einer gewichteten vermutlich linearen Funktion. So hab ich es schon bei meinem Schachspiel gemacht und dadurch sehr gute Ergebnisse erzielt obwohl das doch ein recht simpler Ansatz ist. Blöd nur dass ich die Gewichte händisch anpassen muss^^

Und in dieses Konstrukt müssen jetzt noch die Warhscheinlichkeiten integriert werden. Also wie wahrscheinlich es ist einen Yaku einzusammeln. Dabei ist ein möglichst präzieser Wert gar nicht mal so wichtig. Wichtig ist nur, dass es halt nicht gleich 1 ist. Sagen wir wir haben einen Yaku der sich gänzlich aus den Karten des Gegners auseinandersetzt. Die Wahrscheinlichkeit dass er die all die karten gibt ist wohl astronomisch klein und damit kann er getrost in die Tonne getreten werden^^ solche Züge sind also sinnlos. Ein Zug der jedoch komplett auf den eigenen Karten und den gezogenen Deckkarten basiert ist wiederum am Besten in der allwissenden KI. Denn dort weiß ich, welche Karte vom Deck als nächstes gezogen wird und kann sie gezielt einsammeln. die Hand und die in meiner Runde gezogenen Deck-Karten unterliegen, zumindest im ersten moment, allein meiner Kontrolle. Der Gegner hat keinen Zugriff auf sie es sei denn ich gestatte es oder es ist unmöglich es zu verhindern. Auf dem feld sieht das anders aus. Hier haben beide Spieler Zugriff und wenn ich auch im direkten Nachfolger jede Karte auswählen kann, kann der gegner danachd asselbe und es ist unklar welche Karte vom Deck der Gegner zieht und es ist auch hochkomplex das ist einer KI zu verbauen.

Übrigens bewerte ich natürlich nur die x besten Züge des Gegners. Denn ich will ja die gesamtzugqualität des Gegners verringern, aber irgendwelche sowieso sinnlosen Züge zu verbauen ist schwachsinn, denn die hätte er eh nicht gewählt. Allerdings nur den besten Zustand zu verbauen ist auch unsinn, denn den kennt der Gegner ja nicht zwangsläufig. Also betrachte ich x>1 Zug und diese Zahl muss ich entsprechend so setzen, dass keine unsinnigen Züge verbaut werden aber auch die Unsicherheit bezüglich der Zugwahl des Gegners zum Tragen kommt, besonders dass er dann halt den zweitbesten Zug zieht und der genauso gefährlich für mich ist.
 
ich sprech doch kein Mandarin
Ein wenig kommt es mit so vor. Ich bin da bei new Account(), dass ich das Szenario, noch nicht wirklich verstanden habe. Also weder das volle, noch, was dein abgespecktes 3-Karten-Szenario genau darstellen soll.
Momentan bin ich der Ansicht, dass mir so langsam dämmert, was du mit den drei Karten meinst.
Ich fasse es nun folgendermaßen auf:
Du definierst dir (über den Daumen gepeilte) Wahrscheinlichkeiten für die drei Eregnisse:
A - Karte A wird im Verlauf des Zugs/Spiels gezogen
B - Karte B wird im Verlauf des Zugs/Spiels gezogen
C - Karte C wird im Verlauf des Zugs/Spiels gezogen

Diese Ereignisse definierst du als stochastisch unabhängig. Nun suchst du die Wahrscheinlichkeit für Eregnis X:
X = {(A ∩ B) ∪ (A ∩ C) ∪ (B ∩ C)} - Mindestens zwei der Ereignisse A,B,C treten ein.

P(X) ergibt sich (unter diesen Voraussetzungen) dann als
P(X) = P(A)*P(B) + P(A)*P(C) + P(B)*P(C)
Mit deinen (3 über 2) = 3 Termen für die Summe.
P(A ∩ B ∩ C) hat hier dann nichts zu suchen, da dieses auch bei unterstellter stochastischer Unabhängigkeit der Ergeignisse A,B, und C nicht mehr unabhängig von den vorherigen Schnittmengen ist. (Oder anders formuliert:
{(A ∩ B) ∪ (A ∩ C) ∪ (B ∩ C) ∪ (A ∩ B ∩ C)} = {(A ∩ B) ∪ (A ∩ C) ∪ (B ∩ C)}
Eine zusätzliche Division durch irgendwas ist auch nicht erforderlich, wenn P(A), P(B) und P(C) ja jeweils für sich die Wahrscheinlichkeit darstellen, dass diese Karten im restlichen Zug gezogen werden.
 
{(A ∩ B) ∪ (A ∩ C) ∪ (B ∩ C) ∪ (A ∩ B ∩ C)} = {(A ∩ B) ∪ (A ∩ C) ∪ (B ∩ C)}
Also das hab ich jetzt nicht so recht kapiert. Die Wahrscheinlichkeit dass gleich drei Karten gezogen werden ist doch dabei oder nicht?

Wenn das was du sagst stimmt was wäre bei 2/4 Karten? Heiß das, die Wahrscheinlichkeit MINDESTENS zwei von vier karten zu ziehen ist gleich der Wahrscheinlichkeit aller 2er-Verkettungen? Also
A&B | A&C | A&D | B&C | B&D | C&D ?
Das würde die Formel die ich mir ausgedacht habe natülich drastsic verkürzen.
 
Kokujou schrieb:
Also das hab ich jetzt nicht so recht kapiert. Die Wahrscheinlichkeit dass gleich drei Karten gezogen werden ist doch dabei oder nicht?
770863
 
Ah okay das versteh ich natürlich... Mengentheoretisch macht es Sinn. Aussagenlogisch nicht aber nehmen wir mal an das passt so...

Dann bräuchte man tatsächlich nur die minimalen Verkettungen und das bedeutet:

Das Ergebnis für mein Problem ist die Permutation aller Produkte bestehend aus x Faktoren wobei x die mindeste Anzahl von Karten für den Yaku ist.

Und das wäre dann zumindeest die simpelste Approximation für mein Problem und damit ein guter ausgangswert. IBM würde das sicher besser hinkriegen aber für ne KI eines einzelnen Menschen bin ich denke ich ganz gut dabei ^_^

liege ich soweit richtig?
 
Ob diese Modellierung ein guter Ausgangswert ist, möchte ich nicht bewerten. Es ist halt irgend ein Ausgangswert. Kann schon sein, dass du damit eine Bewertung deiner Züge realisieren kannst, vielleicht aber auch nicht. Dazu fehlt mir der Einblick.
Außerdem sehe ich grade, dass ich da oben offensichtlich einen Fehler gemacht habe. In dem Venn Diagramm sieht man ja sehr gut, dass in dem Fall die mittlere Fläche dreimal gezählt wird, also eigentlich noch zweimal P(A)*P(B)*P(C) abgezogen werden muss.

Mein Fehler lag darin, dass ich mich wohl durch die Unterstellung der Unabhängigkeit der Ereignisse A,B,C (welche so nicht korrekt ist) verwirren lassen hab (bzw. selbst verwirrt hab) und nicht beachtet habe, dass die drei Schnittmengen
(A ∩ B), (A ∩ C) und (B ∩ C) natürlich nicht disjunkt sind, auch wenn A, B und C unabhängig voneinander sind.

Grundsätzlich gilt für beliebige Ereignisse A, B:
P(A ∪ B) = P(A) + P(B) – P(A ∩ B)

Wenn man das erweitert auf drei beliebige Ereignisse A,B,C kriegt man (nach längerem Einstetzen und rumrechnen, oder über die Siebformel):
P(A ∪ B ∪ C)=P(A) + P(B) + P(C) − P(A∩B) − P(A∩C) − P(B∩C) + P(A∩B∩C)

Bei steigender Anzahl an Einzelereignissen wird das natürlich schnell kompliziert. Falls deine Einzelwahrscheinlichkeiten klein sind, machen sich aber bspw. Dreifachverkettungen sowieso sehr viel weniger bemerkbar als Zweifachverkettungen, da ja ein zusätzlicher kleiner Faktor multipliziert wird. Ob das für die Wahrscheinlichkeit hier im Kartenspiel greift, ist aber wieder eher ungewiss.
 
Okay jetzt steig ich komplett aus und weiß echt nicht mehr weiter.
Bei meiner Formel die die Permutation der Multiplikation und die anschließende Addition des "Rests" einbezieht hätte ich es ja noch konstruieren können.

aber wie soll ich das denn bitte dynamisch erweitern?

Am ende muss ich ja irgendeine Formel konstruieren in der ich lediglich die Einzelwahrscheinlichkeiten der Ereignisse, die Mindestgröße des Yaku und die Einzelwahrscheinlichkeiten bzw. die Anzahl aller möglichen Yaku habe.

Und was ist jetzt die Lösung? Ich Summiere alle Einzelwahrscheinlichkeiten auf (wobei man ganz nebenbei theoretisch auf einen Wert größer 1 kommen kann, das nur nebenbei) soweit komm ich noch mit.

Dann substrahiere ich alle 2er konstellationen, dann addiere ich plötzlich wieder alle dreier auf und alle vierer muss ich dann wieder abziehen oder was?

Ich meine bedenken wir mal bitte den Worst case: Den Yaku Kasu. Er hat eine mindestgröße von 10 und etwa 20 Karten die dafür in Frage kommen. Nein es sind sogar 24.
 
also immer abwechselnd + und - oder wie... na super..
Aber wo würde sich in dieser Gleichung die minSize des Yaku finden?
Ich meine wenn wir stumpf die Wahrscheinlichkeit aller Karten aufsummieren und dann nach und nach alle Schnitte abziehen, bedeutet dass dann überhaupt "Whkt. von mindestens x Karten"?

denn ich sehe in dieser Formel nicht dass da steht "Whkt. von mindestens 2 Karten" ich sehe eigentlich gar nicht was diese Forel dann noch assagt.
Ergänzung ()

Stimmt dieses Venn-Diagramm überhaupt? Ich meine bei der vorherigen Formel war es sinnvoll da ich hier quasi alle Kombinationen ohne Wiederholung und ohne beachtung der Reihenfolge aufmultipliziert habe und diese Produkte aufsummiert haben.

Dass ich dann alles was >minSize ist abziehe versteh ich auch nicht aber jetzt komm ich ja wirklich gar nicht mehr mit.

Haben meine Ereignisse überhaupt eine "Schnittmenge"?
 
Zuletzt bearbeitet:
Okay ich habe einen Einwurf gefunden:
Der Additionssatz den ich gerade gegoogelt habe sagt für konjunkte Ereignisse aus, dass man die Schnittmenge abziehen muss. Aber bei disjunkten Ereignissen reicht die Addition! Also nix mit Schnittmenge abziehen

Da das Ziehen von Karte 1 nicht ausschließt oder beeinflusst Karte 2 zu ziehen, so nehmen wir es zumindest an denn die Auswirkungen könnten kaum berechnet werden, heißt das ich muss mir über Schnittmengen und Venn-Diagramme keine Sorgen machen!

Und das wiederum würde bedeuten, man korrigiere mich falls ich falsch liege, dass ich bei meiner Theorie bleibe.

Zur Erinnerung, meine Theorie war:
Basisfaktor pro Term besteht aus (minSize-1) Faktoren, Zusätzlicher Faktor ist die Summe aller übrigen Wahrscheinlichkeiten von minSize bis possibleCards
und das ganze n über k mal aufaddieren sodass jede Konstellation mal dran war, zu beachten: Ohne Wiederholung und ohne Berücksichtigung der Reihenfolge.

Es wäre einfacher wenn ich das irgendwie in Mathe schreiben könnte aber ich find hier keinen Formeleditor
 
So ihr lieben, ich könnte noch ein klein wenig konstruktive Kritik gebrauchen. Ich hab "mal schnell" nen Algorithmus aufgebaut der mir alle Kombinationen ohne Wiederholung ohne Beachtung der Reihenfolge ausgibt. Er funktioniert auf jeden Fall würde ich sagen. Aber ich mach mir natürlcih ein bischen sorgen über die Laufzeit. Besonders weil ich ein paar LINQ-Funktionen verwende und nicht weiß ob die sinnvoll gut oder Laufzeiteffizient sind. Vielleicht sagt ihr mal ein paar Worte dazu:

C#:
List<int[]> baseTermIDs = new List<int[]>() { Enumerable.Range(0, outputLength).ToArray() };
                int[] last = baseTermIDs[0].ToArray();
                for (int factorID = last.Length - 1; factorID >= 0; factorID--)
                {
                    while (true)
                    {
                        if (last[factorID] >= numberRange) break;
                        else if (factorID + 1 < last.Length && last[factorID] + 1 == last[factorID + 1]) break;
                        else
                        {
                            last[factorID]++;
                            int newID;
                            for (newID = factorID; newID < outputLength; newID++)
                                if (newID >= factorID)
                                    last[newID] = last[factorID] + (newID - factorID);

                            baseTermIDs.Add(last.ToArray());
                            if (newID != factorID) factorID = last.Length - 1;
                        }
                    }
                }
                return baseTermIDs;

outputLength ist die "Fenstergröße", numberRange die maximal erlaubte Zahl. Zu beachten ist dass ich am durchwandern von IDs interessiert bin es handelt sich hier also um 0basierte Starts :)

PS: Computerbase... bitte löscht die Leerzeichen bei Visual Studio Codeausschnitten seufz
 
Kokujou schrieb:
Aber sagt mir wenigstens ob dieser Ansatz jetzt sinnvoler klingt oder ob ihr euch zumindest an Hand dieses Ansatzes vorstellen könnt was ich meine XD
Nicht so wirklich. Ordne mal deine Gedanken und geb die grundlegenden Ideen ohne Begriffe wie 'Basiswahrscheinlichkeit' an. Das was ich glaube zu verstehen klingt nicht so super sinnvoll.

Würde als ersten Schritt ignorieren, dass Karten offen liegen. Und den 'echten' Mitspieler gegen einen zufälligen Karten nehmenden Mitspieler ersetzen. Und dann also berechnen, wie Wahrscheinlich es ist, dass man die Mindestkarten zusammen kriegt in Runde X. Also jede Runde bekommt die KI eine Karte und eine Karte 'fliegt aus dem Spiel' = nimmt der Mitspieler. Ich würde da erstmal schauen den Ergebnisraum vollständig zu betrachten und dann direkt daraus die Wahrscheinlichkeit zu berechnen.
 
Nein die Runden fliegen in der Berechnung völlig raus. Das wäre auch sinnlos. Und den ganzen Ereignisbaum aufzubauen ist ein Problem für sich. Wir reden hier von 16!*4 Runden die ich aufzubauen hätte. das muss ich intensiv herunterbrechen. Ich hab schon ausgerechnet dass ich selbst mit MUltithreading bestenfalls 7 Runden aufbauen kann. Und mit Runde meine ich Züge. Also insgesamt 3,5, bestenfalls 4 Züge beider Seiten.

Es wäre wohl einfacher es so zu sehen, dass die Anzahl der Runden fix auf 8 gesetzt ist, also quasi während des ganzen Spiels würde man dann in jeder Runde die Runden-ID von der 8 abziehen. Generell würde es vor allem mich nur verwirren. Bedenke dass das Spiel ja doch ein bischen komplexer ist als "Ich spiele jede runde eine Karte" denn man kann pro Zug bis zu 8 Karten einsammeln.

Es ist nur wichtig dass am Ende eine Endwahrscheinlichkeit des entsprechenden Yaku steht basierend auf den Karten die ich kenne und nix mit "Whkt. dass Karte x in Runde y gezogen wird + Whkt für dasselbe in Runde z ..."

Nochmal die "grundlegende Idee"

"Wie groß ist die Wahrscheinlichkeit aus einem Pool von x interessanten Karten deren Wahrscheinlichkeit fix aber unterschiedlich ist mindestens y Karten zu ziehen."

Und das hab ich ja jetzt rausgekriegt undzwar mit der Formel deren Algorithmus ich gerade gepostet hab ;) und ich hoffe dass der richtig ist. Ich fürchte wenn wir uns weiter über Diskussionen über meinen Ansatz verstricken hab ich die KI frühstens nächsten Monat fertig und da soll die ganze Arbeit schon stehen XD
 
Okay ich hoffe dass hier noch jemand mitliest denn ich krieg langsam Kopfschmerzen...
Offenbar ist die Laufzeit dieses Algorithmus so extrem dass ich den in keiner KI verbauen kann. Ich brauche für eine Iteration mehrere Sekunden. Und das rechne man mal auf 64 Zustände hoch. Mindestens.

Der Grund? Der Kasu-Yaku ist das worst case Szenario mit 24 möglichen Karten und 10 mindestens erforderlich. Also 1961256 Additionen. Das ist mein Algorithmus:

771138


Wie ihr seht berechne ich die Kombinationen der IDs, benutze die LINQ-Select-Funktion um die Liste zu durchlaufen und für jede ID die Multiplikationen durchzuführen und berechne dann aus ner vorgefertigten Liste von 0 bis x die umgekehrte Schnittmenge, sodass der letzte Faktor die Summe aller übrigen Kartenwahrscheinlichkeiten ist.

bei 1961256 Listen-Einträgen ist das allerdings ein bischen eklatant. Schön wärs wenn ich das ganze in eine Zeile komprimieren könnte.

Also machen wirs wie immer und bauen zum besseren Verständnis ein Minimalbeispiel: Ein Yaku mit 3 möglichen Karten und mindestens 2 müssen drin sein:

P(Karte1) * (P(Karte2)+P(Karte3)) +
P(Karte2) * (P(Karte1)+P(Karte3)) +
P(Karte3) * (P(Karte1)+P(Karte2))

Wie krieg ich das jetzt komprimiert?
Ergänzung ()

Nachtrag: es liegt wohl nicht an den LINQ-Funktionen. Ich hab jetzt alles auf die BuildCombinations Funktion verlagert sodass keine Zwischenspeicehrung in Listen mehr erfordert sondern direkt alles aufsummiert wird nachdem die Basis-Kombination erzeugt wurde.
also werden jetzt wirklich nur noch ein Array für die Multiplikation der k Elemente und für die Addition der n-k restlichen Elemente erstellt, beides zusammengefügt und der Rest sind primitive Mathematische Operationen. Aber ganz offensichtlich sind 125.520.384 Additionen trotzdem zu viel für den prozessor... und während ich mir so zulese merke ich wie bescheuert das klingt.
 
Zuletzt bearbeitet:

Ähnliche Themen

Zurück
Oben