Марковская модель процесса принятия решений в Java

Я пишу вспомогательный алгоритм обучения на Java.

Я столкнулся с математической проблемой, которую я, вероятно, могу решить, но поскольку обработка будет тяжелой, мне нужно оптимальное решение.

Это, как говорится, если кто-то знает оптимизированную библиотеку, которая будет совершенно потрясающей, но язык Java, так что это должно быть принято во внимание.

Идея довольно проста:

Объекты будут хранить комбинацию переменных, таких как ABDC, ACDE, DE, AE.

Максимальное количество комбинаций будет основано на том, сколько я могу запустить без замедления программы, так что теоретически 100 скажем так.

Процесс принятия решения будет генерировать одну случайную переменную на одну итерацию. Если сгенерированная переменная является частью одной из комбинаций, например. «A», который является частью ABDC и ACDE, тогда склонность к C и B (или любая следующая буква в сохраненной комбинации) увеличится.

Чтобы сделать вещи немного более понятными, давайте предположим, что «A», «B», «C», «D» и «E», являются единственно возможными переменными. По правде говоря, их будет больше 12 или 14, но этот максимум будет зависеть от того, сколько я смогу обработать без задержки.

Поскольку существует пять возможных переменных, он сгенерирует взвешенный 1/5 случайного броска для первой итерации. Если этот бросок окажется «A», то на следующей итерации «B» и «C» теперь будут иметь склонность 2/5 вместо 1/5.

Если на следующей итерации будет генерироваться «B», склонность «D» увеличится до 3/5. Примечание: отношение является экспоненциальным; На самом деле, это будет не 1/5, а небольшое повышение, например, 10%, что приведет к тому, что 50% увеличатся, если он достигнет 4-й переменной в последовательности.

Теперь, в Java, я, вероятно, могу достичь этой функциональности, отслеживая все сохраненные комбинации для каждого объекта. Я думал, что, распределяя процесс отслеживания небольшими шагами по каждой итерации, он не должен быть слишком медленным.

Другое решение будет отображать все возможные комбинации и их потенциальные склонности. Это, конечно, просто потребует функцию поиска, но также создает проблемы при вычислении всех возможностей и хранении где-то, возможно, в файле.

Было предложено использовать марковскую модель и / или библиотеку, хотя я не слишком знаком с математикой этого типа.

Как я могу быстро вычислить этот процесс в Java?
.

Пример >>>

Только одна последовательность ABC.

Для трех чисел шансы начинаются равными, поэтому это будет выглядеть примерно так: rand (1,3)

Если A является результатом, мы увеличиваем вероятность B, потому что это следующая буква в последовательности. Допустим, мы удвоили это.

Так что теперь шансы: A = 1/4, C = 1/4, B = 2/4

Функция теперь будет выглядеть как rand (1,4), где результаты 3 и 4 представляют вариант B.

Если следующий результат - B, мы хотим увеличить вероятность C, потому что это следующий символ в последовательности, но в два раза больше, чем было увеличено в прошлый раз (экспоненциально).

Скорее всего, что-то вроде: A = 1/6, C = 1/6, B = 4/6

Функция теперь является rand (1/6), где значения 3, 4, 5, 6 представляют C.

Ответы на вопрос(1)

Ваш ответ на вопрос