网络的鲁棒性

一、渗流理论

为了量化这个相变的性质,专注于三个量:

簇的规模的平均值:\left \langle s \right \rangle

根据渗流理论,全体有限规模的簇的规模的平均值遵循:\left \langle s \right \rangle \sim \left | p-p_{c} \right |^{-r_{p}} 

换句话说,在接近p_{c} 时,簇的规模的平均值是发散的。

序参量:p_{\circ \circ }

随机选择一个石子,序参量p_{\circ \circ }是这个石子属于最大簇的概率,它遵循:p_{\circ \circ }\sim (p - p_{c})^{\beta _{p}}

因此,当p逐渐减小到p_{c}时,一个石子属于最大簇的概率降为零。

关联长度:\xi

属于同一簇的两颗石子之间的平均距离,它遵循:\xi \sim \left | p - p_{c} \right |^{-v} 

 总结,随机移除节点对网络造成的破坏并不是一个渐进的过程。相反,移除一小部分节点对网络完整性的影响非常有限。但一旦被移除节点的比例达到一个临界阙值,网络就会迅速地分解为不相连的连通分支。

二、经典方法

初始网络的最大度(HD):

网络的鲁棒性:也称健壮性,是指网络在受到外界攻击的情况下,是否能够保持其功能的正常运转,如果能,就称网络是鲁棒的。复杂系统的鲁棒性是许多领域的一个重要问题。

当前网络的最大度(HDA):

当前网络的最大介数(HBA):

网络的k-核(k-core):

设置一个阈值ks = 1,把网络中所有度小于等于1 的节点全部删除。

集体影响度量(CI):

 三、编程实践

# 蓄意攻击:
import numpy as np
import networkx as nx
import matplotlib.pyplot as plt
plt.rc('font', family='SimHei')
# 创建一个1000个节点的无标度网络
n, m = 1000, 3
G = nx.barabasi_albert_graph(n, m)
# 计算原始网络的巨连通分支大小
largest_cc = max(nx.connected_components(G), key=len)
initial_size = len(largest_cc) / n
# 静态攻击:始终在初始网络上攻击,按照节点度值大小将占比为f的节点移除,并计算剩余网络的巨连通分支相对大小
# 获取初始网络节点度值排序后的列表
degrees = dict(G.degree())
sorted_degrees = sorted(degrees.items(), key=lambda x: x[1], reverse=True)
nums = 51
f_values = np.linspace(0, 1, num=nums)
relative_sizes = np.zeros(nums)
relative_sizes[0] = initial_size
for i in range(1, nums):
    # 计算要移除的节点列表
    num_removed = int(f_values[i] * n)
    removed_nodes = [x[0] for x in sorted_degrees[:num_removed]]
    # 移除节点并计算剩余网络的巨连通分支大小
    G_removed = G.copy()
    G_removed.remove_nodes_from(removed_nodes)
    if len(G_removed)==0:
        break
    largest_cc_removed = max(nx.connected_components(G_removed), key=len)
    relative_sizes[i] = len(largest_cc_removed) / n
# 绘制相对大小随着占比f的变化图
plt.plot(f_values, relative_sizes, 'ro-', linewidth=2)
plt.xlabel('占比 f')
plt.ylabel('巨连通分支相对大小')
plt.title('蓄意攻击')
plt.show()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

几两春秋梦_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值