В случайном графе: какова вероятность того, что узел имеет ссылку на любой узел в списке x определенных специальных узлов?

У меня есть эта проблема для расчета, который я делаю в наблюдаемой сети.

Представим себе случайный граф G(N,p), где N — количество узлов, а p — вероятность образования ребра между любой узел ni и nj. Граф неориентированный.

Давайте тогда отметим количество узлов x, скажем, 5, как особое. Какова тогда вероятность (ps) узла иметь преимущество перед любым из этих специальных узлов.

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

Во-первых, потому что я представляю, что мне придется учитывать все возможные графы из N узлов, чтобы создать события для моего расчета вероятности. Я думаю, что может быть S(S-1)/2 возможных графиков, если S=N(N-1)/2, но они не равновероятны, поэтому я я в растерянности. Во-вторых, я понимаю, что вероятность ссылок на особые узлы должна приближаться к 1 по мере того, как количество особых узлов (x) приближается к N, и что ps =p, если x=1.

Благодарен за любые подсказки. Спасибо


person nJGL    schedule 05.04.2016    source источник


Ответы (1)


Для неспециального узла существует x потенциальных ребер от этого узла к особому узлу. Для любого такого потенциального ребра вероятность того, что ребро не находится в графе, равна 1-p. Предполагая независимость, вероятность того, что он избегает всех специальных узлов, равна (1-p)^x. Дополнительная вероятность — это то, что вы ищете, это

1 - (1-p)^x

Для специальных узлов вероятность того, что данный специальный узел соединен с одним из других специальных узлов, равна

1 - (1-p)^(x-1)

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

x/N + (N-x)/N * [1-(1-p)^x]

вероятность того, что у него есть ребро, соединяющее специальный узел, равна:

x/N * [1 - (1-p)^(x-1)] + (N-x)/N * [1 - (1-p)^x]

во всех случаях - они стремятся к 1, когда x стремится к N.

Поскольку это переполнение стека, нужно немного попрограммировать. Вот симуляция Монте-Карло Python 3, которая, кажется, предполагает точность формулы для вероятности того, что случайно выбранный узел является либо особенным, либо смежным с особым:

import random

#The following function returns a random graph on nodes
#0,1,...,N-1 where edges are chosen with probability p
#The graph is returned as a dictionary keyed by the 
#The corresponding values are sorted lists of adjacent nodes

def randGraph(N,p):

    #initialize G:
    G = {}
    for i in range(N):
        G[i] = []

    #iterate through potential edges:
    for i in range(N-1):
        for j in range(i+1,N):
            if random.random() < p:
                G[i].append(j)
                G[j].append(i)

    #sort adjacency lists before returning:
    for i in G:
        G[i].sort()
    return G

#A function to determine the number of nodes
#in a graph that are either
#special or connected to a special,
#where special means: 0,1,2,...,x

def specialsAndFriends(G,x):
    count = 0
    for i in G:
        if (i<x) or (len(G[i]) > 0 and G[i][0] < x):
            count +=1
    return count

#now -- a Monte Carlo simulation:

def estimateProb(N,p,x,trials = 1000):
    estimates = []
    for i in range(trials):
        G = randGraph(N,p)
        estimates.append(specialsAndFriends(G,x)/N)
    return sum(estimates)/trials

#compare with:

def exactProb(N,p,x):
    return x/N + (N-x)/N * (1 - (1-p)**x)

(Python 2 необходимо будет настроить, например, x/N на float(x)/N).

Пример вывода:

>>> estimateProb(100,0.25,10)
0.9496800000000086
>>> 
>>> exactProb(100,0.25,10)
0.9493178367614746
person John Coleman    schedule 05.04.2016
comment
Абсолютно отличный ответ. Это те вероятности, которые я ищу, и действительно, они могут быть подтверждены моделированием Монте-Карло, как это сделали вы. Для тех, кто, как и я, не так хорошо говорит на Python, я написал аналогичный тест на R, который имеет вид здесь и моделирует вероятность того, что специальный узел будет иметь ссылки на другой специальный узел. Код показывает эту конвергенцию: !Оценка оценок - person nJGL; 18.04.2016
comment
Прохладно. Недавно я пытался изучить R, и просмотр вашего кода должен быть хорошим опытом обучения. Всегда приятно, когда моделирование и теория согласуются. Какова ваша докторская степень? исследования в? (Вы упомянули, что являетесь кандидатом наук в своем профиле.) - person John Coleman; 18.04.2016
comment
История бизнеса, но в ней есть и доля сетевого анализа. Мой проект посвящен различным формам сотрудничества между шведскими страховщиками недвижимости в период индустриализации. Однако R-код, который я разместил, не очень аккуратен. Однако он использует igraph, и с этим пакетом можно провести массу забавных исследований теории графов. . Судя по всему, есть и Python-пакет igraph. Спасибо еще раз. - person nJGL; 19.04.2016
comment
Вуаля. R-script теперь подробно прокомментирован... - person nJGL; 19.04.2016