matlab实现随机攻击网络边+蓄意攻击网络连边(3)

其实在前面已经介绍过随机进攻节点和蓄意进攻节点的原理,今天和大家说一下边攻击。其实原理都是类似的,只要改动之前的一些代码就可以完成这个操作的。如果没有看过前两篇文章,那么建议你先看一下,有助于理解原理。

前两篇地址:

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
2
3
4
5
6
7
8
9
10
for i = 1:numDelete
A( Name_Struct.Node_Key_Degree(i),: ) = 0; %% 删除节点 Node_Key_Degree(i),用 0 占位,不能置空
A( :,Name_Struct.Node_Key_Degree(i) ) = 0;
AA = A;
AA( sum(A)==0,: ) = [];
AA( :,sum(A)==0 ) = [];
Con_Index_NetEff = testEglob( AA );

Eglob(i) = Con_Index_NetEff.Net_Eff_Mymod;
end

边攻击需要的数据准备:

邻接表:也就是网络中的所有连边关系 也就是下面的代码片段中的 biao(2*edge_number的矩阵)
边的排序关系:(可以是随机排序,可以是按某种参数进行的排序)下面的代码片段中的Node_edge_bet(1*edge_number的矩阵),就是根据边介数参数得到的边的排序

那么改动后的边攻击代码片段为:

1
2
3
4
5
6
7
8
9
10
11
A = A_Init;          %% 网络邻接矩阵 A
% numDelete:删除连边的数量
for i = 1:numDelete
%把要删除的边置为0
A( biao(1,Node_edge_bet(i)),biao(2,Node_edge_bet(i)) ) = 0;
%把对称位置的边也置为0
A( biao(2,Node_edge_bet(i)),biao(1,Node_edge_bet(i)) ) = 0;
AA = A;
Con_Index_NetEff = testEglob( AA );
Eglob_edge_bet(i) = Con_Index_NetEff.Net_Eff;
end

经过分析之后,我们可以得到一个推测或者说是结论:那就是边攻击每次只攻击一个边,对网络的影响较小(相对于节点攻击来说)。

感谢大家的时间,并希望以上的内容会对大家有所帮助。

© 2021 XuXing's blog All Rights Reserved. 本站访客数人次 本站总访问量
Theme by hiero