2011-07-15 30 views
0

ポアソン度分布のランダムグラフを生成するためにsource code of Networkxを使用しました。次のようにランダムグラフジェネレータは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)を比較すべきですか?

答えて

1

このようにグラフを生成する(Brenoulli-samplingを使用)ので、ポアソン度分布のグラフが得られます(詳細はhere (pdf)で説明されています)。

+0

私は良い説明しませんでした。 p(ポアソン分布)、私は手でそれを元のコードp(k)に加え、kは言及されず、混乱させました:( – masti

3

ノード/エッジの数が多い場合を除き、これはベルヌーイ分布を与えます。あなたは簡単にポアソン度の分布を与えるために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 
+0

これはあなたが主張していることをしません。ノードに期待される度合いが割り当てられたグラフ、次にエッジがランダムに配置されて、割り当てられた値が期待された度合いになるようにするには、すべてのノードを同じ期待度に設定し、 Renyiグラフ(ほぼポアソン度分布) – Joel

+0

代わりに使用するべきは 'nx.configuration_model(z)'です。これは、度が偶数の値に足し合わない場合に実行を拒否し、自己ループを作成する可能性があります繰り返しエッジ。 – Joel

関連する問題