1

各ノードが接続されている他のノードを決定するいくつかの属性を持つ接続グラフを作成しようとしています。ネットワークは、リンクの確立を容易にするための円形の空間です (1000 のノードがあります)。

このネットワークが機能する方法は、ノードが両方の隣接ノード (すぐ左/右のノード - つまり、ノード 3 には隣接ノード 1 と 2) とk 個の長距離リンクを持つことです。ノードが長距離リンクを選択する方法は、時計回りの方向からランダムにノードを選択することです (つまり、ノード 25 は、長距離リンクとして 15 ではなく 200 を持つ場合があります)。

これがどのように見えるかのサンプル画像です: http://i.imgur.com/PkYk5bz.png 与えられたのはシンフォニーネットワークですが、私の実装はそれを単純化したものです。

これをJavaで(配列リストを保持するリンクリストを介して)部分的に実装しましたが、NetworkXでこれを行う方法がわかりません。ノードはk個の長いリンクを見つけるが、k個を超えるとそれ以上のリンクを受け入れないと言う特定のノード属性を追加する方法について特に混乱しています。このモデルに適した networkx に特定の組み込みグラフはありますか、または正しいノード属性を持っている限り、グラフは受け入れられますか?

これは、ノードが離れることもエッジが消えることもない、より複雑なネットワークを単純化したものです。

これについて、ヘルプや例へのリンクをいただければ幸いです。

4

2 に答える 2

1

これはあなたの必要性に近似しています:

import networkx as nx
import matplotlib.pyplot as plt
import random

N = 20 # number of nodes
K = 3 # number of "long" edges

G = nx.cycle_graph(N)

for node in G.nodes():
    while len(G.neighbors(node)) < K+2:
        # Add K neighbors to each node
        # (each node already has two neighbors from the cycle)
        valid_target_found = False
        while not valid_target_found:
            # CAUTION
            # This loop will not terminate
            # if K is too high relative to N
            target = random.randint(0,N-1)
            # pick a random node
            if (not target in G.neighbors(node)
                and len(G.neighbors(target)) < K+2):
                # Accept the target if (a) it is not already
                # connected to source and (b) target itself
                # has less than K long edges
                valid_target_found = True
        G.add_edge(node, target)

nx.draw_circular(G)
plt.show()

以下のグラフを作成します。たとえば、長いエッジのターゲット ノードをより効率的に選択するなど、改善の余地がありますが、これで開始できることを願っています。

循環グラフ

于 2013-04-06T20:25:27.687 に答える
0

NetworkX では、ノードの接続に関するロジックがあれば、すべてをあなたに任せるべきです。

それにもかかわらず、Python でノードを反復処理する場合 (テストされていません):

for (nodeId, data) in yourGraph.nodes(data=True):
    // some logic here over data

    // to connect your node
    yourGraph.add_edge(nodeId, otherNodeId)

補足: Java にとどまりたい場合は、Jung と Gephi の使用を検討することもできます。

于 2013-04-06T18:40:24.877 に答える