Markov Model Entscheidungsprozess in Java

Ich schreibe einen Assisted Learning-Algorithmus in Java.

Ich bin auf ein mathematisches Problem gestoßen, das ich wahrscheinlich lösen kann, aber da die Verarbeitung sehr schwer sein wird, brauche ich eine optimale Lösung.

Das heißt, wenn jemand eine optimierte Bibliothek kennt, die absolut fantastisch ist, aber die Sprache ist Java, so dass dies berücksichtigt werden muss.

Die Idee ist ziemlich einfach:

Objects speichert Kombinationen von Variablen wie ABDC, ACDE, DE, AE.

Die maximale Anzahl der Kombinationen hängt davon ab, wie viele ich ausführen kann, ohne das Programm zu verlangsamen. Theoretisch sind es also 100.

Der Entscheidungsprozess generiert eine Zufallsvariable pro Iteration. Wenn die erzeugte Variable Teil einer der Kombinationen ist, z. 'A', das Teil von ABDC und ACDE ist, erhöht die Neigung für C und B (oder jeden folgenden Buchstaben in einer gespeicherten Kombination).

Um die Dinge etwas klarer zu machen, nehmen wir an, dass "A", "B", "C", "D" und "E" die einzig möglichen Variablen sind. Die Wahrheit ist, dass es eher 12 oder 14 geben wird, aber dieses Maximum wird auch davon abhängen, wie viele ich ohne Verzögerung verarbeiten kann.

Da es fünf mögliche Variablen gibt, wird für die erste Iteration eine gewichtete 1/5 Zufallsrolle generiert. Wenn sich herausstellt, dass dieser Wurf 'A' ist, haben 'B' und 'C' in der nächsten Iteration jetzt eine Neigung von 2/5 anstelle von 1 / 5.

Wenn die nächste Iteration 'B' erzeugt, steigt die 'D'-Neigung auf 3/5. Hinweis: Die Beziehung ist exponentiell. Realistisch gesehen wird es nicht 1/5 sein, sondern ein leichter Anstieg von 10%, der einen Schneeballeffekt von 50% zur Folge hat, wenn er die vierte Variable in einer Sequenz erreicht.

Nun, in Java kann ich diese Funktionalität wahrscheinlich erreichen, indem ich alle gespeicherten Kombinationen für jedes Objekt verfolge. Ich war der Meinung, dass es nicht zu langsam sein sollte, wenn der Verfolgungsprozess in kleinen Schritten über jede Iteration verteilt wird.

Eine andere Lösung wäre, alle möglichen Kombinationen und ihre potenziellen Neigungen abzubilden. Dies erfordert natürlich nur eine Suchfunktion, bringt aber auch Probleme mit sich, alle Möglichkeiten zu berechnen und irgendwo zu speichern, wahrscheinlich in einer Datei.

s wurde vorgeschlagen, ein Markov-Modell und / oder eine Bibliothek zu verwenden, obwohl ich mit dieser Art von Mathematik nicht allzu vertraut bi

Wie kann ich diesen Prozess in Java schnell berechnen?
.

Beispiel >>>

Nur eine Sequenz ABC.

Für drei Zahlen beginnen die Chancen gleich, so dass es ungefähr so aussieht wie rand (1,3)

Wenn A das Ergebnis ist, erhöhen wir die Wahrscheinlichkeit von B, da es der nächste Buchstabe in der Folge ist. Sagen wir, wir verdoppeln es.

Nun sind die Chancen: A = 1/4, C = 1/4, B = 2/4

Die Funktion sieht nun aus wie rand (1,4), wobei die Ergebnisse von 3 und 4 beide die Option B darstellen.

Wenn das nächste Ergebnis B ist, wollen wir die Wahrscheinlichkeit von C erhöhen, weil es das nächste Zeichen in der Sequenz ist, aber doppelt so viel wie beim letzten Mal (exponentiell)

Chancen sind jetzt so etwas wie: A = 1/6, C = 1/6, B = 4/6

Die Funktion lautet jetzt rand (1/6), wobei die Werte 3, 4, 5, 6 für C stehen.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage