Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
|
![]() |
#1 |
初级会员
注册日期: 2020-03-22
帖子: 1
声望力: 0 ![]() |
![]()
%%级联失效
A=load('szdt.mat') A=A.sz; B=betweenness_node(A); [m n]=sort(B,'descend'); %p 就是将B进行由大到小排序,n就是排序后的位置变化 %比如A=[8 9 3],p=[9 8 3],n=[2 1 3] d1=[]; n=n(1:10);%B中按大小排在前10的位置,n就是节点编号 N=size(n,2); %%参数 aerfa=0.1;%容量可调系数 P1=[];%用来装可以进行负载分配的相邻节点 P2=[];%用来装失效节点 averD=[]; %%进行失效 j=1; while j<=N G=graph(A);%为下一步运用neighbors函数做基础 P=neighbors(G,n(j));%找与其相邻的节点 P=P'; s=size(P,2);%看p有多少列 A(n(j), ![]() A(:,n(j))=0;%把第n列全部元素变成0 P2(end+1)=n(j); c=1; while c<=s D=Degree(A); if D(P(c))==0%判断相邻节点是否为孤立点 P2(end+1)=P(c); else P1(end+1)=P(c); end c=c+1; end%得到P1,P2 s1=size(P1,2);%有多少个要进行负载分配的节点 e=1; while e<=s1 f=B(P1(e))+B(n(j))*(B(P1(e))/sum(P));%更新负载矩阵,邻接节点的负载等于它本身加上失效节点按比例分配给它的 if f>(1+aerfa)*B(P1(e))如果大于负载,将该点进行失效 end B(n(j))=0; e=e+1; end for i=1:N D(i)=sum(A(i, ![]() end%计算度大小 averD(end+1)=mean(D); j=j+1; end %%算最后得到的矩阵A中度为0的节点位置 d=Degree(A); s3=size(A,2); for k=1:s3 if d(k)==0 d1(end+1)=k; end end %%输出结果 P1 P2 d1 n x=1:N; y=averD; plot(x,y) hold on |
![]() |
![]() |