Как генератор случайных графов работает в сети? - PullRequest
0 голосов
/ 15 июля 2011

Я использовал исходный код Networkx для генерации случайного графа с распределением Пуассона.

Я изменяю некоторые части кода, которые мне нужны, следующим образом:

import random
import networkx
import math
from networkx.generators.classic import empty_graph

def gnp_random_graph(n, p, seed=None):
    """Return a random graph G_{n,p}.

    Parameters
    ----------
    n : int
        The number of nodes.
    p : float
        Probability for edge creation.
        possible edges: n[n-1]/2
    seed : int, optional
        Seed for random number generator (default=None). 

    """
    #My sample  
    z = 4 #mean degree
    n = 10 #Number of nodes
    p = math.exp**(-z)*z**(k)/(math.factorial(k)) ##I add this myself #k is missing   

    #This part is from the source 
    G=empty_graph(n)

    if not seed is None:
        random.seed(seed)

    for u in xrange(n):
        for v in xrange(u+1,n):
            if random.random() < p:
                G.add_edge(u,v)
return G

В последней части для генерации ребер, я не понимаю, как это считать степень и сравнивать с p (Распределение вероятностей степени (k))?Для меня это выглядит как генерация случайного числа btw (0,1).Но как использовать домен для p и сравнить случайное число с p (k)?

Ответы [ 2 ]

3 голосов
/ 22 сентября 2011

Если количество узлов / ребер не велико, это дает распределение Бернулли. Вы можете получить networkx, чтобы легко получить распределение степеней Пуассона.

import numpy as np
from scipy.stats import poisson

def poissongraph(n,mu):
    z= np.zeros(n) #n is number of nodes
    for i in range(n):
        z[i]=poisson.rvs(mu) #mu is the expected value
    G=expected_degree_graph(z)
    return G
1 голос
/ 15 июля 2011

Это работает, потому что генерация графа таким способом (с использованием выборки Бренулли) приведет к графу с распределением Пуассона по степеням (подробно объяснено здесь (pdf) ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...