其实在前面已经介绍过随机进攻节点和蓄意进攻节点的原理,今天和大家说一下边攻击。其实原理都是类似的,只要改动之前的一些代码就可以完成这个操作的。如果没有看过前两篇文章,那么建议你先看一下,有助于理解原理。
前两篇地址:
复杂网络函数分享
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维度。
知道了具体逻辑,那么下面就是代码实现了:
之前我们删除节点的代码片段为:
for i = 1:numDelete
Con_Index_NetEff = testEglob( AA );
Eglob(i) = Con_Index_NetEff.Net_Eff_Mymod;
end
边攻击需要的数据准备:
邻接表:也就是网络中的所有连边关系 也就是下面的代码片段中的 biao(2*edge_number的矩阵)
边的排序关系:(可以是随机排序,可以是按某种参数进行的排序)下面的代码片段中的Node_edge_bet(1*edge_number的矩阵),就是根据边介数参数得到的边的排序
欢迎大家加入我的交流群交流群
同时也欢迎大家加入复杂网络交流群,大家一起交流,一起学习。