Proceso de decisión del modelo de Markov en Java

Estoy escribiendo un algoritmo de aprendizaje asistido en Java.

Me he encontrado con un problema matemático que probablemente pueda resolver, pero debido a que el procesamiento será pesado, necesito una solución óptima.

Dicho esto, si alguien conoce una biblioteca optimizada que será totalmente increíble, pero el lenguaje es Java, por lo que será necesario tenerlo en cuenta.

La idea es bastante simple:

Los objetos almacenarán la combinación de variables como ABDC, ACDE, DE, AE.

El número máximo de combinación se basará en cuántos puedo ejecutar sin ralentizar el programa, por lo que teóricamente 100 digamos.

El proceso de decisión generará una variable aleatoria por iteración. Si la variable generada es parte de una de las combinaciones, por ejemplo. 'A', que forma parte de ABDC y ACDE, aumentará la propensión a C y B (o cualquier letra siguiente en una combinación almacenada).

Para aclarar un poco las cosas, supongamos que 'A', 'B', 'C', 'D' y 'E' son las únicas variables posibles. La verdad es que habrá más como 12 o 14, pero ese máximo también dependerá de cuántos pueda procesar sin retraso.

Dado que hay cinco posibles variables, generará un rollo aleatorio ponderado de 1/5 para la primera iteración. Si ese resultado resulta ser 'A', entonces en la próxima iteración 'B' y 'C' ahora tendrán una propensión de 2/5 en lugar de 1/5.

Si la siguiente iteración generara 'B', la propensión 'D' aumentaría a 3/5. Nota: la relación es exponencial; de manera realista, no será 1/5 sino un ligero aumento como 10%, que se disparará para decir 50% si alcanza la cuarta variable en una secuencia.

Ahora, en Java, probablemente pueda lograr esta funcionalidad rastreando todas las combinaciones almacenadas para cada objeto. Estaba pensando que al distribuir el proceso de seguimiento en pequeños pasos en cada iteración, no debería ser demasiado lento.

Otra solución sería mapear todas las combinaciones posibles y sus posibles tendencias. Por supuesto, esto simplemente requerirá una función de búsqueda, pero también presenta problemas para calcular todas las posibilidades y almacenarlas en algún lugar, probablemente en un archivo.

Se ha sugerido que debería usar un modelo y / o biblioteca de Markov, aunque no estoy demasiado familiarizado con este tipo de matemáticas.

¿Cómo puedo calcular este proceso rápidamente en Java?
.

Ejemplo >>>

Solo una secuencia ABC.

Para tres números, las posibilidades comienzan igual, por lo que se vería algo así como rand (1,3)

Si A es el resultado, aumentamos la probabilidad de B, porque es la siguiente letra de la secuencia. Digamos que lo duplicamos.

Así que ahora las posibilidades son: A = 1/4, C = 1/4, B = 2/4

La función ahora se verá como rand (1,4) donde los resultados de 3 y 4 representan la opción B.

Si el siguiente resultado es B, queremos aumentar la probabilidad de C porque es el siguiente carácter de la secuencia, pero el doble que la última vez (exponencialmente).

Las posibilidades son ahora algo así como: A = 1/6, C = 1/6, B = 4/6

La función ahora es rand (1/6) donde los valores 3, 4, 5, 6 representan C.

Respuestas a la pregunta(1)

Su respuesta a la pregunta