Processo de decisão do Markov Model em Java

Estou escrevendo um algoritmo de aprendizado assistido em Java.

Encontrei um problema matemático que provavelmente posso resolver, mas como o processamento será pesado, preciso de uma solução ótima.

Dito isto, se alguém conhece uma biblioteca otimizada que será totalmente incrível, mas a linguagem é Java, e isso precisa ser levado em consideração.

A ideia é bastante simples:

Os objetos armazenam a combinação de variáveis como ABDC, ACDE, DE, AE.

O número máximo de combinações será baseado em quantas eu posso executar sem diminuir a velocidade do programa, então, teoricamente, 100 digamos.

O processo de decisão gerará uma variável aleatória por iteração. Se a variável gerada fizer parte de uma das combinações, por exemplo. 'A', que faz parte do ABDC e do ACDE, que a propensão para C e B (ou qualquer letra a seguir em uma combinação armazenada) aumentará.

Para tornar as coisas um pouco mais claras, vamos supor que 'A', 'B', 'C', 'D' e 'E' são as únicas variáveis possíveis. A verdade é que haverá mais ou menos 12 ou 14, mas esse máximo também dependerá de quantos eu puder processar sem atraso.

Como existem cinco variáveis possíveis, ele gerará um teste aleatório ponderado de 1/5 para a primeira iteração. Se esse teste for 'A', na próxima iteração 'B' e 'C' agora terão 2/5 de propensão em vez de 1/5.

Se a próxima iteração gerar 'B', a propensão 'D' aumentará para 3/5. Nota: o relacionamento é exponencial; realisticamente, não será 1/5, mas um ligeiro aumento de 10%, o que aumentará para 50% se atingir a quarta variável em uma sequência.

Agora, em Java, provavelmente posso alcançar essa funcionalidade rastreando todas as combinações armazenadas para cada objeto. Eu estava pensando que, distribuindo o processo de rastreamento em pequenas etapas em cada iteração, não deveria ser muito lento.

Outra solução seria mapear todas as combinações possíveis e suas possíveis propensões. Obviamente, isso simplesmente requer uma função de pesquisa, mas também apresenta problemas no cálculo de todas as possibilidades e armazenamento em algum lugar, provavelmente em um arquivo.

Foi sugerido que eu deveria usar um modelo de Markov e / ou biblioteca, embora não esteja muito familiarizado com esse tipo de matemática.

Como posso calcular esse processo rapidamente em Java?
.

Exemplo >>>

Apenas uma sequência ABC.

Para três números, as chances começam iguais, para que parecesse algo aleatório (1,3)

Se A for o resultado, aumentamos a probabilidade de B, porque é a próxima letra na sequência. Vamos dizer que dobramos.

Então agora as chances são: A = 1/4, C = 1/4, B = 2/4

A função agora parecerá rand (1,4), onde os resultados de 3 e 4 representam a opção B.

Se o próximo resultado for B, queremos aumentar a probabilidade de C, porque é o próximo caractere na sequência, mas o dobro do que foi aumentado na última vez (exponencialmente)

As chances são agora algo como: A = 1/6, C = 1/6, B = 4/6

A função agora é rand (1/6), onde os valores 3, 4, 5, 6 representam C.

questionAnswers(1)

yourAnswerToTheQuestion