【发布时间】:2022-08-20 05:03:27
【问题描述】:
我正在尝试计算不完整签名的组织网络中平衡和不平衡三元组的数量。但问题是我的代码只适用于完整的网络。组织 5 处于三元组中,但由于未完全连接,因此输出会抛出错误。考虑到某些节点可能未完全连接,我该如何运行分析?我的代码如下:
G = nx.Graph()
G.add_edge(\'Organization 1\',\'Organization 2\',color=\'g\', sign=\'+\')
G.add_edge(\'Organization 2\',\'Organization 3\',color=\'r\', sign=\'-\')
G.add_edge(\'Organization 3\',\'Organization 4\',color=\'r\', sign=\'-\')
G.add_edge(\'Organization 4\',\'Organization 1\',color=\'r\', sign=\'-\')
G.add_edge(\'Organization 2\',\'Organization 4\',color=\'r\', sign=\'-\')
G.add_edge(\'Organization 1\',\'Organization 3\',color=\'g\', sign=\'+\')
G.add_edge(\'Organization 5\',\'Organization 4\',color=\'g\', sign=\'+\')
G.add_edge(\'Organization 2\',\'Organization 4\',color=\'g\', sign=\'+\')
G.add_edge(\'Organization 5\',\'Organization 3\',color=\'r\', sign=\'-\')
plt.figure(figsize=(12, 6), dpi=300)
pos = nx.circular_layout(G)
edges = G.edges()
colors = [G[u][v][\'color\'] for u,v in edges]
nx.draw(G, pos, edge_color=colors, width=5, node_size=1500, with_labels=True)
plt.savefig(\'simulated_conflicts\')
This is the resulting network. Green edges are positive relations and red edges are negative
为了进行结构平衡分析,我运行了以下代码:
G.nodes()
triangular_relations2009 = [list(each_tri_combination) for each_tri_combination in itertools.combinations(nodes,3)]
#Let\'s visualize these triangular relationships
#I will create a function to get all the signs of triangles defined in the list
def get_signs_of_triangles_list(triangles_list,graph):
all_signs = []
for each_node_in_triangle_list in range(len(triangles_list)):
temp_storage_list = []
temp_storage_list.append(G[triangles_list[each_node_in_triangle_list][0]][triangles_list[each_node_in_triangle_list][1]][\'sign\'])
temp_storage_list.append(G[triangles_list[each_node_in_triangle_list][0]][triangles_list[each_node_in_triangle_list][2]][\'sign\'])
temp_storage_list.append(G[triangles_list[each_node_in_triangle_list][1]][triangles_list[each_node_in_triangle_list][2]][\'sign\'])
all_signs.append(temp_storage_list)
return all_signs
#storing all the signs in the list
all_signs_in_network = get_signs_of_triangles_list(triangular_relations2009,G)
len(all_signs_in_network)
count_unstable_triangles(all_signs_in_network)
我得到的关键错误是:
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
Input In [60], in <cell line: 2>()
1 #storing all the signs in the list
----> 2 all_signs_in_network = get_signs_of_triangles_list(triangular_relations2009,G)
4 len(all_signs_in_network)
6 count_unstable_triangles(all_signs_in_network)
Input In [58], in get_signs_of_triangles_list(triangles_list, graph)
6 temp_storage_list = []
7 temp_storage_list.append(G[triangles_list[each_node_in_triangle_list][0]][triangles_list[each_node_in_triangle_list][1]][\'sign\'])
----> 8 temp_storage_list.append(G[triangles_list[each_node_in_triangle_list][0]][triangles_list[each_node_in_triangle_list][2]][\'sign\'])
9 temp_storage_list.append(G[triangles_list[each_node_in_triangle_list][1]][triangles_list[each_node_in_triangle_list][2]][\'sign\'])
10 all_signs.append(temp_storage_list)
File ~/opt/anaconda3/lib/python3.9/site-packages/networkx/classes/coreviews.py:54, in AtlasView.__getitem__(self, key)
53 def __getitem__(self, key):
---> 54 return self._atlas[key]
KeyError: \'Organization 5\'
我认为问题在于它不能将组织 5 包括在分析中,因为它没有完全连接,我该怎么做?我想要的是能够将所有标志存储在列表中,以便接下来运行此代码:
def count_unstable_triangles(all_signs):
number_of_stable_triangles = 0
number_of_unstable_triangles = 0
for each_sign in range(len(all_signs)):
if all_signs[each_sign].count(\'+\') == 3 or all_signs[each_sign].count(\'+\') == 1:
number_of_stable_triangles = number_of_stable_triangles+1
else:
number_of_unstable_triangles = number_of_unstable_triangles+1
print(f\"number of stable_triangles out of {number_of_stable_triangles+number_of_unstable_triangles} are {number_of_stable_triangles}\")
print(f\"number of unstable_triangles out of {number_of_stable_triangles+number_of_unstable_triangles} are {number_of_unstable_triangles}\")
return number_of_unstable_triangles,number_of_stable_triangles
count_unstable_triangles(all_signs_in_network)
此代码将为我提供网络中平衡和不平衡三角形的数量。我用多个完整的网络运行了这段代码,它运行平稳。