0

私はpygraphでハイパーグラフを使用して頭を悩ませようとしています.以下は私が挿入した簡単な例です:

hgr = hypergraph()
hgr.add_nodes(["A1", "B1", "C1", "D1"]) 
hgr.add_nodes(["A2", "B2", "C2", "D2"])
hgr.add_nodes(["A3", "B3", "C3", "D3"])
hgr.add_nodes(["A4", "B4", "C4", "D4"])

hgr.add_hyperedge(("A1", "A2", "A3", "A4"))
hgr.add_hyperedge(("B1", "B2", "B3", "B4"))
hgr.add_hyperedge(("C1", "C2", "C3", "C4"))
hgr.add_hyperedge(("D1", "D2", "D3", "D4"))

h_dot = write(hgr)
h_gvv = gv.readstring(h_dot)
gv.layout(h_gvv,'dot')
gv.render(h_gvv, 'png', 'hypergraph.png')

私が取得している画像は次のとおりです(フルサイズのバージョンを表示するにはクリックしてください): 上記のハイパーグラフ構築の出力

これが pygraph を使用してハイパーグラフを作成する正しい方法であることを確認してください。

とても有難い!

4

1 に答える 1

2

各ハイパーエッジはノードのコレクションではなく、ノードとして表されるため、ノードの場合と同様に、ハイパーエッジに一意の(単純な)識別子を使用して、ノードにリンクする必要があります。

ハイパーグラフに関するウィキペディアの記事のグラフの例を考えてみましょう。

ウィキペディアのハイパーグラフ

でこのグラフを作成するにpygraphは、次のようにします。

from pygraph.classes.hypergraph import hypergraph
from pygraph.readwrite.dot import write_hypergraph

h = hypergraph()

h.add_nodes(['v1', 'v2', 'v3', 'v4', 'v5', 'v6', 'v7'])
h.add_hyperedges(['e1', 'e2', 'e3', 'e4'])

h.link('v1', 'e1')
h.link('v2', 'e1')
h.link('v3', 'e1')
h.link('v2', 'e2')
h.link('v3', 'e2')
h.link('v3', 'e3')
h.link('v5', 'e3')
h.link('v6', 'e3')
h.link('v4', 'e4')

with open('hypergraph.dot', 'w') as f:
    f.write(write_hypergraph(h))

これにより、この画像出力が次のように生成されますdot

ドットハイパーグラフ

これは私が推測する正しい表現ですが、ウィキペディアの画像ほど視覚的ではありません。ハイパーグラフの視覚化を追求している場合は、この質問を確認する必要があります。

于 2012-05-05T11:25:10.543 に答える