sql >> データベース >  >> NoSQL >> MongoDB

Networkxは、2milノードのBetweenness中心性の計算を終了しません。

    TL / DR:中間中心性の計算は非常に遅いため、mykのサブセットを考慮して概算を使用することをお勧めします。 mykがあるノード はネットワーク内のノードの数よりもはるかに少ない数ですが、統計的に意味のある大きさです(NetworkXにはこのオプションがあります:betweenness_centrality(G, k=myk)

    時間がかかるのも驚きではありません。中間中心性は計算が遅いです。 networkxで使用されるアルゴリズムはO(VE)です。 ここで、V は頂点の数であり、E エッジの数。あなたの場合、VE = 10^13 。グラフのインポートにはO(V+E)が必要です。 時間なので、それが瞬間的ではないとわかるほど時間がかかる場合は、O(VE) 苦痛になりそうです。

    ノードの1%とエッジの1%(つまり、20,000ノードと50,000エッジ)の縮小されたネットワークに時間Xがかかる場合、目的の計算には10000Xがかかります。 Xが1秒の場合、新しい計算は3時間に近くなります。これは、非常に楽観的だと思います(以下の私のテストを参照)。したがって、コードに問題があると判断する前に、いくつかの小規模なネットワークでコードを実行し、ネットワークの実行時間の見積もりを取得してください。

    良い代替策は、おおよその尺度を使用することです。標準の中間性測定では、ノードのすべてのペアとそれらの間のパスが考慮されます。 Networkxは、kのランダムサンプルを使用する代替手段を提供します ノードを検索し、それらのk間の最短パスを見つけます ネットワーク内のノードおよび他のすべてのノード。これにより、O(kE)での実行が高速化されるはずです。 時間

    つまり、使用するのは

    betweenness_centrality(G, k=k)
    

    結果の精度を制限したい場合は、kの小さい値で複数の呼び出しを行うことができます。 、それらが比較的近いことを確認してから、平均的な結果を取得します。

    (V、E)=(20,50);のランダムグラフを使用した、実行時間の簡単なテストの一部を次に示します。 (200,500);および(2000,5000)

    import time
    for n in [20,200,2000]:
        G=nx.fast_gnp_random_graph(n, 5./n)
        current_time = time.time()
        a=nx.betweenness_centrality(G)
        print time.time()-current_time
    
    >0.00247192382812
    >0.133368968964
    >15.5196769238
    

    したがって、私のコンピューターでは、自分のサイズの0.1%のネットワークを処理するのに15秒かかります。同じサイズのネットワークを作成するには、約1,500万秒かかります。これは1.5*10 ^ 7秒で、pi * 10^7秒の半分弱です。 pi * 10 ^ 7秒は、1年の秒数の非常に良い概算であるため、これには約6か月かかります。

    したがって、近似アルゴリズムを使用して実行する必要があります。




    1. 運用データベース管理

    2. フィールド''のオブジェクト'target'のフィールドエラー:拒否された値[];コード[typeMismatch.target。、typeMismatch。、typeMismatch.java.util.Date、typeMismatch]

    3. .quit()を使用してノードredisクライアントインスタンスを終了する必要がありますか?

    4. マングーススキーマを使用してCSVをインポートする