0
我正在我的網絡x上工作。問題是: 考慮圖19.27中描述的網絡;假設每個節點以行爲B開始,並且每個節點具有用於切換到行爲A的q = 1/2的閾值。(a):現在,令e和f形成初始採納者的雙節點集合S的行爲A.如果其他節點遵循閾值規則選擇行爲,哪個節點最終將切換到A?我沒有得到正確的節點與我的網絡x代碼
這是網絡的地方是所有關於:
現在,我知道這個問題的答案是{ 'C', 'E', 'F', '我' ,'k'} 但是從我的代碼中,我只能得到{'c','e','f','i'},怎麼了?
# Network, dit is de figuur 19.27 van chapter 19 voor vraag 19.8
def create_network():
H = nx.Graph()
H.add_edge('e', 'i')
H.add_edge('e', 'c')
H.add_edge('c', 'f')
H.add_edge('i', 'f')
H.add_edge('f', 'g')
H.add_edge('i', 'k')
H.add_edge('k', 'j')
H.add_edge('g', 'j')
H.add_edge('g', 'd')
H.add_edge('j', 'h')
# Voegt de edges toe zoals die in figuur 19.27 van Chapter 19 afgebeeld is.
H.add_edge('d', 'h')
for n in {'e', 'f'}: # Initial adaptors
# True betekent dat de node the nieuwe Behavior heeft geadopt
H.node[n]['new'] = True
for n in set(H.nodes()) - {'e', 'f'}: # initial adaptors
# False betekent dat de node de nieuwe Behavior Reject, dus de node
# blijft bij de oorspronkelijke behavior
H.node[n]['new'] = False
nx.draw(H, with_labels=True) # De output
return H
H = create_network()
# Het netwerk dat na een ronde adaption testen een update uitvoert of de
# eventueel toegevoegde nodes na de adaption
def adapted_network(G, a=1, b=1):
ts = b/(float(b) + a) # threshold formule van b/(a+b)
# https://networkx.github.io/documentation/networkx-1.10/reference/generated/networkx.classes.function.get_node_attributes
getatt = nx.get_node_attributes(G, 'new')
nodes = [node for node in G.nodes(True) if node[1]['new'] == False]
for node, attribute in nodes:
readyforadopt = len([neighbor for neighbor in G.neighbors(
node) if getatt[neighbor] == True])/float(len(G.neighbors(node)))
# Node zal een behavior adopten als de gegeven ts de ts van de node
# overstijgt of gelijk is
if readyforadopt >= ts:
G.node[node]['new'] = True
return [node for node in G.nodes(True) if node[1]['new'] == True]
H = create_network()
print [node for node in H.nodes(True) if node[1]['new'] == True]
print adapted_network(H)
附註:使用'H.add_edges_from()'會使您的代碼更短,更具可讀性。 – DyZ