利用网络全局效率与网络连通率(极大连通子图节点数÷总结点数)衡量蓄意攻击下网络性能
1 全局效率计算:
clc;clear
A = xlsread('C:\Users\12345\Desktop\adj.xlsx',1); %导入邻接矩阵
B = A; %copy矩阵,防止原数据被破坏
C=[154,132,167,99,19,39,53,120,102,122,137,164,112,67,162,...
215,255,110,214,292,243,252,296,270,237,316,277]; %节点攻击顺序
Eglob=[]; %定义全局效率矩阵
Eglob_0=0.4716; %可利用下面代码先计算网络未被攻击时的初始效率
for i=1:318
B(C(i),:)=0;
B(:,C(i))=0;
B=sparse(B); %转换为稀疏矩阵
minpath=1./graphallshortestpaths(B);
minpath(minpath==inf)=0;
Eglob(i) =(1/(length(B)*(length(B)-1)))*sum(sum(minpath)); %全局效率
end
Eglob=[Eglob_0,Eglob];
Eglob'
node=0:318;
plot(node,Eglob,'-bs','MarkerFaceColor','b','linewidth',1,'markersize',4,'MarkerIndices',1:10:length(Eglob))
hold on
ylim([0 0.5]);
xlabel('失效节点数n');
ylabel('网络全局效率E_g');
legend('图例名');
2 连通率计算
clc;clear
A = xlsread('C:\Users\12345\Desktop\adj.xlsx',1);
B = A; %copy矩阵,防止原数据被破坏
C=[5,91,189,166,21,113,29,79,185,38,40,163,133,105,5,...
269,203,267,295,245,43,286,279,278,298,303,288]; %节点攻击顺序
f=[]; %定义网络连通率空矩阵
f_0=1; %初始连通率为1
zt=[]; %用于存储每次攻击后最大连通子图内节点数量
for i=1:318
B(C(i),:)=0;
B(:,C(i))=0;
B=sparse(B);
[a mZt]= components(B) %a为索引,mZt为连通子图内节点数
zt(i)=max(max(mZt)) %寻求最大连通子图内节点数
f(i)=max(max(mZt))/318;
end
xlswrite('C:\Users\12345\Desktop\连通子图.xlsx',zt')
f=[f_0,f];
f'
node=0:318;
plot(node,f,'-bs','MarkerFaceColor','b','linewidth',1,'markersize',4,'MarkerIndices',1:10:length(f))
% plot(node,f,'-ro','MarkerFaceColor','r','linewidth',1,'markersize',4,'MarkerIndices',1:10:length(f))
hold on
ylim([0 1]);
xlabel('失效节点数n');
ylabel('网络连通率f');
legend('图例');