其实在前面已经介绍过随机进攻节点和蓄意进攻节点的原理,今天和大家说一下边攻击。其实原理都是类似的,只要改动之前的一些代码就可以完成这个操作的。如果没有看过前两篇文章,那么建议你先看一下,有助于理解原理。
前两篇地址:
matlab实现随机攻击网络节点+蓄意攻击网络节点(1)附github完整工程地址
matlab实现随机攻击网络节点+蓄意攻击网络节点(2)
我们首先应该了解删除连边和删除的节点的区别:
删除节点:删除该节点及与该节点所有相连的边。
删除连边:只删除该连边,而不改变节点的状态。
如果结合维度为N*N邻接矩阵A来说:
删除节点a:要删除A(a,:)和A(:,a)这一列一行,矩阵A变为(N-1)*(N-1)维度
删除节点a和节点b的连边:A(a,b) = 0;A(b,a) = 0;(邻接矩阵的对称性),矩阵A还是N*N维度。
知道了具体逻辑,那么下面就是代码实现了:
之前我们删除节点的代码片段为:
1 | for i = 1:numDelete |
边攻击需要的数据准备:
邻接表:也就是网络中的所有连边关系 也就是下面的代码片段中的 biao(2*edge_number的矩阵)
边的排序关系:(可以是随机排序,可以是按某种参数进行的排序)下面的代码片段中的Node_edge_bet(1*edge_number的矩阵),就是根据边介数参数得到的边的排序
那么改动后的边攻击代码片段为:
1 | A = A_Init; %% 网络邻接矩阵 A |
经过分析之后,我们可以得到一个推测或者说是结论:那就是边攻击每次只攻击一个边,对网络的影响较小(相对于节点攻击来说)。
感谢大家的时间,并希望以上的内容会对大家有所帮助。