边介数(Edge Betweenness)
# ”
边介数(Edge Betweenness)
1
边介数(Edge Betweenness)
Summer IS HERE
边介数(Edge Betweenness)是一种度量边在网络中重要性的指标。它定义为通过某条边的最短路径的数量与网络中所有最短路径数量的比值。具体来说,边介数表示在所有节点对之间的最短路径中,有多少条路径通过该边。边介数越高,表示该边在网络中越关键。
边介数的定义公式如下:
设 是一个图,其中 是节点集合, 是边集合。对于图中的每一条边 ,其边介数 定义为:
其中:
-
表示节点 到节点 的所有最短路径的数量。
-
表示节点 到节点 的所有最短路径中通过边 的路径数量。
边介数的计算步骤通常如下:
-
对于图中的每一对节点,找到它们之间的所有最短路径。
-
统计每条边在这些最短路径中出现的次数。
-
对每条边的出现次数进行归一化处理,以得到边介数值。
这种方法可以有效地识别网络中对信息流动或连通性至关重要的边。
2
边介数的计算步骤:
-
对于图中的每一对节点,找到它们之间的所有最短路径。
-
统计每条边在这些最短路径中出现的次数。
-
对每条边的出现次数进行归一化处理,以得到边介数值。
这种方法可以有效地识别网络中对信息流动或连通性至关重要的边。
针对网络中的边进行蓄意和随机攻击是研究网络韧性和稳定性的重要方法。边介数(Edge Betweenness)在这种分析中扮演了关键角色,因为它可以帮助识别网络中的关键边和潜在的脆弱点。以下是对边介数进行蓄意和随机攻击的意义:
蓄意攻击
蓄意攻击(Intentional Attack)是指有针对性地攻击网络中具有高边介数的边。这样做的目的是最大化对网络连通性的破坏。以下是蓄意攻击的意义:
-
识别关键边:通过移除具有高边介数的边,可以识别网络中对连通性和信息流动至关重要的边。
-
评估网络韧性:观察网络在蓄意攻击下的反应,可以评估网络的韧性和容错能力。如果移除少量高介数边就能导致网络分裂,说明网络韧性较差。
-
提高网络设计:通过识别和保护这些关键边,可以设计更健壮的网络结构,增强网络的抗攻击能力。
Summer
随机攻
随机攻击(Random Attack)是指随机选择网络中的边进行移除,而不考虑它们的边介数。随机攻击的意义包括:
01
测试网络的随机容错性:通过随机移除边,测试网络在面对非针对性攻击时的表现,评估网络的随机容错性。
02
对比蓄意攻击的影响:通过对比随机攻击和蓄意攻击的结果,可以更清晰地了解高介数边在网络中的重要性。
03
模拟现实场景:在实际应用中,网络可能会遭受随机故障或非恶意的边断裂。模拟这种情况可以帮助预测网络在实际运行中的表现。
Summer
实验步骤
-
计算边介数:首先计算网络中每条边的边介数。
-
蓄意攻击:
-
按边介数从高到低的顺序移除边。
-
观察每次移除后的网络连通性变化,如巨量连通分量的大小和数量变化。
-
-
随机攻击:
-
随机选择并移除边。
-
观察每次移除后的网络连通性变化,进行统计分析。
-
-
比较分析:
-
对比两种攻击方式下网络连通性的变化。
-
评估网络的韧性和脆弱性。
-
3
实现
Summer IS HERE
求网络的边介数代码
Summer
代码
import pandas as pd
import networkx as nx
# 文件名列表
file_names = ['11.xlsx', '22.xlsx', '33.xlsx', '44.xlsx', '55.xlsx', '66.xlsx', '77.xlsx', '88.xlsx']
# 定义处理函数
def process_file(file_name):
# 读取 Excel 文件
file_path = f'{file_name}'
df = pd.read_excel(file_path)
# 从 DataFrame 构建无向图
G = nx.from_pandas_edgelist(df, 'from', 'to')
# 计算边介数中心性
edge_betweenness = nx.edge_betweenness_centrality(G)
# 将边作为无序对处理,以确保可以处理无向图的边
df['edge_betweenness'] = df.apply(lambda row: edge_betweenness.get((row['from'], row['to']), edge_betweenness.get((row['to'], row['from']))), axis=1)
# 保存修改后的 DataFrame 到新的 Excel 文件
output_path = f'{file_name.split(".")[0]}_with_edge_betweenness.xlsx'
df.to_excel(output_path, index=False)
return output_path
# 处理所有文件
output_files = [process_file(file_name) for file_name in file_names]
# 输出处理后的文件路径列表
output_files
['11_with_edge_betweenness.xlsx',
'22_with_edge_betweenness.xlsx',
'33_with_edge_betweenness.xlsx',
'44_with_edge_betweenness.xlsx',
'55_with_edge_betweenness.xlsx',
'66_with_edge_betweenness.xlsx',
'77_with_edge_betweenness.xlsx',
'88_with_edge_betweenness.xlsx']
Summer
网络格式
| from | to |
| ---- | ---- |
| 1 | 2 |
| 1 | 4 |
| 1 | 5 |
| 1 | 7 |
| 2 | 4 |
| 2 | 7 |
| 2 | 12 |
| 2 | 16 |
| 3 | 61 |
输出的结果
| from | to | edge_betweenness |
| ---- | ---- | ---------------- |
| 1 | 2 | 0.001700281 |
| 1 | 4 | 0.026619318 |
| 1 | 5 | 0.008927579 |
| 1 | 7 | 0.011732577 |
| 2 | 4 | 0.01920632 |
| 2 | 7 | 0.011669551 |
| 2 | 12 | 0.005642587 |
| 2 | 16 | 0.005974664 |
| 3 | 61 | 0.011695906 |
| 4 | 6 | 0.000565324 |
| 4 | 9 | 0.059238643 |
社会网络、生态网络、复杂网络指定节点蓄意攻击客户端
社会网络、生态网络、复杂网络脆弱性分析(随机、蓄意攻击)工具-指标公式
社会网络、生态网络、复杂网络脆弱性分析(随机、蓄意攻击)工具(增加了边攻击策略)