Алгоритм получения вероятности достижения цели - PullRequest
6 голосов
/ 16 июня 2011

Хорошо, я буду здесь как можно подробнее.

Представьте, что пользователь проходит набор «опций», которые он может выбрать. Каждый раз, когда он выбирает, он получает, скажем, 4 разных варианта. В этих 4 «слотах» может появиться много других опций. Каждый из них имеет определенную определенную и известную вероятность появления. Не все параметры одинаково вероятны для появления, а некоторые параметры требуют, чтобы другие уже были выбраны ранее - в сложном дереве взаимозависимости. (это я уже определил)

Когда пользователь выбирает один из 4, ему предоставляется еще один выбор из 4 вариантов. Пул опций определяется снова и может зависеть от того, что пользователь выбрал ранее.

Среди всех возможных «опций», которые могут когда-либо появиться, есть несколько избранных, которые являются особыми, назовите их КЛЮЧЕВЫМИ опциями.

При запуске программы пользователю предоставляются первые 4 варианта. Для каждого из этих 4 программе необходимо вычислить общую вероятность того, что пользователь «достигнет» всех опций KEY за период из (переменных) N вариантов.

например. если всего имеется 4 варианта, вероятность достижения любого из них равна 1, поскольку все они появляются в самом начале.

Если кто-нибудь может посоветовать мне, с какой логики мне начинать, я был бы очень благодарен. Я думал о подсчете всех возможных последовательностей выбора и подсчете тех, которые приводят к тому, что KEY-параметры выбираются в течение N 'шагов', но проблема в том, что вероятность появления всех из них не одинакова, а также изменяется пул опций по мере пользователь выбирает и накапливает свои параметры.

У меня возникают трудности с реализацией четко определенных вероятностей и зависимостей опций в алгоритм, который может дать разумную общую вероятность. Таким образом, пользователь знает каждый раз, какой из 4 ставит его в наилучшее положение, чтобы в конечном итоге получить опции KEY.

Есть идеи?

EDIT: Вот пример:

скажем, есть 7 вариантов в пуле. вариант1, ..., вариант7 option7 требует option6; опция6 требует опции 4 и опции 5; Варианты с 1 по 5 ничего не требуют и могут появиться немедленно, с соответствующими вероятностями option1.p, ..., option5.p; опция KEY - это, скажем, option7; пользователь получает 4 случайно (но взвешенных) выбранных варианта из 1-5, и программа должна сказать что-то вроде: «если вы выберете (сначала), у вас будет ##% шанс получить option7 не более чем за N попыток». аналогично для остальных 3 вариантов.

естественно, для некоторого низкого N невозможно получить option7, а для некоторого большого N это определенно. Можно выбрать N, но оно является фиксированным.

РЕДАКТИРОВАТЬ: Таким образом, точка здесь не пользователь выбирает случайно. Суть в том, что программа предлагает какой вариант выбрать, чтобы максимально увеличить вероятность того, что в конечном итоге после N шагов пользователю будут предложены все ключевые параметры.

Для приведенного выше примера; скажем, мы выбираем N = 4. поэтому программа должна сообщить нам, какие из первых 4 появившихся опций (любые 4 среди 1-5), какая из них при выборе дает наилучшие шансы на получение опции7. поскольку для опции 7 вам нужен вариант 6, а для этого вам нужны вариант 4 и вариант 5, ясно, что вы ДОЛЖНЫ выбрать либо вариант 4, либо вариант 5 в первом наборе вариантов. один из них обязательно появится, конечно. Допустим, мы получаем это для первого выбора {option3, option5, option2, option4}. Затем программа говорит: если вы выбрали вариант 3, вы никогда не получите вариант 7 в 4 этапа. р = 0; если вы выбрали option5, вы можете получить option7, p = ....; ... option2, p = 0; ... option4, p = ...;

Независимо от того, что мы выберем, для следующих 4 опций, p пересчитываются. Понятно, что если мы выбрали вариант 3 или вариант 2, каждый последующий выбор имеет ровно 0 вероятностей того, что мы попадем в вариант 7 Но для option4 и option5 p> 0;

Теперь понятнее? Я не знаю, как получить эти вероятности с.

Ответы [ 2 ]

2 голосов
/ 17 июня 2011

Это звучит как умеренно сложная проблема типа цепи Маркова.Создать узел для каждого состояния;состояние не имеет истории и просто зависит от возможных путей выхода из него (каждое взвешено с некоторой вероятностью).Вы устанавливаете вероятность для каждого узла, вероятность того, что пользователь находится в этом состоянии, поэтому на первом шаге будет 1 его начальный узел, 0 везде в другом месте.Затем, в зависимости от того, какие узлы являются смежными и вероятность их получения, вы переходите к следующему шагу, обновляя вероятности для каждой вершины.Таким образом, вы можете легко рассчитать, в каких состояниях может приземлиться пользователь, скажем, за 15 шагов, и связанные с ними вероятности.Если вас интересует асимптотическое поведение (что могло бы произойти, если бы он мог играть вечно), вы составляете большую кучу линейных одновременных уравнений и просто решаете их напрямую или с помощью некоторых трюков, если ваше дерево или график имеют аккуратную форму.Вы часто получаете циклические решения, в которых пользователь может застрять в цикле и т. Д.

1 голос
/ 17 июня 2011

Если вы думаете, что пользователь выбирает параметры случайным образом, и ему всегда представляется одинаковое распределение параметров в узле, вы моделируете это как случайное блуждание по графику.Недавно в блоге mathematica была опубликована хорошая публикация о вычислении вероятностей завершения конкретных случайных блужданий.

...