2017-06-12 18 views
0

Relabel_node機能のマッピングを使用して、スイッチクラスの環境変数(env)を渡すにはどうすればよいですか? 環境変数を渡す

は実際に私が試した:

H = nx.relabel_nodes(G, mapping=switch(env) ,copy=True 

しかし、それは私にエラーを与えて、動作しませんでした。 シミュレーションのためにenv変数を渡すことは必須です。あなたのスイッチクラスコードを1として

**class switch(object): 
    def __init__(self, id): 
     self.id = id 
     self.env = env 
     self.store = simpy.Store(env) 
     self.rate = 100 
     self.out = None 
     self.packets_rec = 0 
     self.packets_drop = 0 
     self.qlimit = None 
     self.byte_size = 0 # Current size of the queue in bytes 
     self.debug = False 
     self.interfaces = [] 
     self.numinterfaces = 16 
     self.busy = 0 
     for i in range(self.numinterfaces): 
      self.interfaces.append(SwitchPort(env, self.rate)) 

    def __repr__(self): 
     return self.id 

def edges_(): 
    """ Return the lanl internet view graph from lanl.edges 
    """ 

    try: 
     fh = open('edges.list', 'r') 
    except IOError: 
     print("File not found") 
     raise 

    G = nx.Graph() 

    for line in fh.readlines(): 
     (node1, node2) = line.split() 
     G.add_edge(str(node1), str(node2)) 

    # get largest component and assign ping times to G0time dictionary 

    return G 

if __name__ == '__main__': 
    import networkx as nx 

    env = simpy.Environment() 
    G = edges_() 
    H = nx.relabel_nodes(G, mapping=switch ,copy=True) 
    print("The graph has %d nodes with %d edges" \ 
      % (nx.number_of_nodes(H), nx.number_of_edges(H)))** 
+0

[relabel_nodes' 'のドキュメント](https://networkx.github.io/documentation/development/reference/generatedを読みます/networkx.relabel.relabel_nodes.html)。あなたは 'switch'オブジェクトを渡しています(またはあなたの例の終わりでは、' switch'クラス自体)。しかし、あなたは 'dict'を渡す必要があります。 –

答えて

0

、オブジェクトを切り替えるために渡される引数がidなくenvする必要がありますので、2つの変数IDを受け入れ、このようenvのためにスイッチのクラスを変更します。

class switch(object): 
    def __init__(self, id, env): 
     self.id = id 
     self.env = env 

次にために呼び出しますスイッチのオブジェクトの作成は次のようになります。

H = nx.relabel_nodes(G, mapping=switch(id, env) ,copy=True) 
+0

試してみた AttributeError:スイッチインスタンスに__call__メソッドがありません –