Как найти вероятности в графе возможностей с циклами?

Допустим, у меня был такой график, где вес на каждом ребре был вероятностью прохождения вдоль этого ребра, выбранной случайным образом. Если бы я хотел выяснить вероятность попадания в данную вершину, начиная с 0, это было бы относительно просто. По сути, я бы просто нашел все возможные пути к каждой из вершин без каких-либо исходящих ребер, а затем умножил вероятности на каждом ребре в этом пути. В этом случае я получаю вероятность 1/2 для вершины 2 и 1/2 для вершины 3.

Но что произойдет, если у меня есть такой график? Сейчас существует бесконечно много возможных путей. Если бы я делал это на бумаге, было бы относительно легко просто сделать что-нибудь с бесконечными сериями или чем-то еще и посмотреть, к чему сходится каждое число, но это не совсем работает на компьютере, и я не знаю, как сделал бы это на более обобщенном графике, где я не могу видеть, как это выглядит заранее.

1 ответ

Для каждого пути между двумя узлами A -> B сделайте следующее: Для каждой пары узлов (Z,X) на пути A -> B рассчитайте вероятность пути как бесконечную геометрическую сумму для пары.

Пример: (Предположим, Z -> X -> C -> Z)

A
|
Z - +
|   C
X - +
|
B

P(A->B) = P(A->Z) . { P(Z ->X) + P(Z->X).P(X->C).P(C->Z).P(Z->X) + P(Z->X).P(X->C).P(C->Z).P(Z->X).P(X->C).P(C->Z).P(Z->X) + ... } . P(X -> B)
        = P(A->Z) . P(Z->X).{ 1 + m + m^2 + m^3 + ... } . P(X->B)
           (m = P(X->C).P(C->Z).P(Z->X) )
        = P(A->Z) . { P(Z->X)/(1-m) } . P(X->B)
        = P(A->Z) . { P(Z->X)/[1 - P(X->C).P(C->Z).P(Z->X) ] } . P(X->B)

И расширите это для каждого (Z,X) на пути A -> B. Это будет очень вычислительно для больших графов, но вы должны делать то, что должны.

Теперь обращаясь к вашему актуальному вопросу,

1. List all possible paths from A -> B assuming all edges have weight as 1.
2. for each path:
      for each edge pair {Z,X} (Z->X for which X->Z path exists and Z-X is not a bidirectional edge):
         do the above.
3. Compute the arithmetic mean over all the path probabilities, that is your answer.

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

Другие вопросы по тегам