精华内容
下载资源
问答
  • Matlab级联失效代码#此存储库是用于控制相互依赖网络中的级联故障的 MATLAB 代码。 我的恢复过程有两个阶段: 避免进一步级联 恢复计划 避免进一步级联:对于电力网络级联故障的案例研究,我们可以使用直流潮流模型 ...
  • 级联失效现象是一种节点失效的动态效应,会瞬间波及全网,造成全局网络瘫痪,成为无标度网络的规模化应用瓶颈.针对无标度网络的级联失效问题,提出一种可抵御任意单个节点失效引发的级联失效的缓解策略.在无标度网络中,...
  • Matlab级联失效代码电力系统级联故障的Matlab代码 级联故障直流潮流模型的matlab代码和基于JFNK方法的识别算法。
  • 物流运输网络上的级联失效分析方法,黄英艺,金淳,针对一般物流系统,构建运输网络上的级联失效模型,用以研究物流运输网络上的突发性事件的灾变传播规律问题,以期建立符合物流运
  • 针对加权复杂网络抵制级联失效的鲁棒性问题, 提出一种介数相关的节点加权方法, 并应用加权流局域重 新分配原则构建了带有可调权重参数的级联模型. 在典型模型网络和真实网络上探讨了级联行为. 数值模拟和理论 分析...
  • 考虑级联失效的有向WSNs节点重要度评估模型.pdf
  • 在分析网络化指挥信息系统结构功能基础上,构建带权重的双层相依网络,提出一种考虑节点过载和节点修复的级联失效模型,并在基于节点权重的负载重分配策略基础上构造基于节点相似、基于节点剩余容量和综合分配3种改进型...
  • 在考虑网络负载容量关系的情况下, 研究加权网络中的级联失效现象. 提出了负载容量非线性模型, 并 针对模型参数的多目标优化问题, 通过理论分析确定其影响因素. 以级联失效前后网络连通性测度的比值作为鲁 棒性...
  • 在分析级联失效原理以及理论模型的基础上,结合预期后悔理论对备选路径生成算法进行了改进,在给定算例的基础上,就传统方法与改进算法仿真了预期后悔、级联失效与生成备选路径之间的关系,仿真结果认为考虑交通参与...
  • 考虑网络发生级联失效前后,节点负载量和网络连通性的变化情况,提出一种基于级联失效的有向无标度网络节点重要度评价模型。首先建立有向网络级联失效模型,推导出节点失效前承担的负载量,然后结合节点负载与其在...
  • 首先利用典型BA无标度网络和WS小世界网络构建了非对称双层相依网络的级联失效模型,之后在随机攻击和蓄意攻击条件下分别研究构建的网络模型的相依程度、相依模式以及子网络的拓扑结构对网络故障的影响。仿真结果表明...
  • 通过分析战域保障网络的构造和特点,提出了基于级联失效的战域保障网络节点容量优化模型,进而研究了3种优化策略对级联失效抗毁性的影响:度升序优化策略、度降序优化策略、随机优化策略。结果表明按度降序策略优化...
  • 针对复杂网络级联失效现象,提出三种应对级联失效的动态增边策略,即随机增边策略、最大介数增边策略和最大剩余容量增边策略。基于级联失效的ML模型,从容忍参数、初始负荷参数和增边成本三方面对不同增边策略的效果...
  • 针对复杂网络级联失效现象,提出三种应对级联失效的动态增边策略,即随机增边策略、最大介数增边策略和最大剩余容量增边策略。基于级联失效的ML模型,从容忍参数、初始负荷参数和增边成本三方面对不同增边策略的效果...
  • Matlab级联失效代码DCSIMSEP 电力系统级联(分离)直流潮流模拟器,主要由佛蒙特大学的 Paul Hines 开发,Eduardo Cotilla-Sanchez、Pooya Rezaei 和 Maggie Eppstein 做出贡献。 此代码可免费用于研究目的,并可...
  • 在复杂分层网络结构模型基础上,提出了城际路网的级联失效可靠性仿真模型,对中国内地城际路网的可靠性进行了实例仿真研究。仿真数据表明:稳定配流状态下,长三角、环渤海、京津唐、珠三角地区OD负载聚集程度最高。...
  • 在复杂分层网络结构模型基础上,提出了城际路网的级联失效可靠性仿真模型,对中国内地城际路网的可靠性进行了实例仿真研究。仿真数据表明:稳定配流状态下,长三角、环渤海、京津唐、珠三角地区OD负载聚集程度最高。...
  • [2019-7-20]一种简单的级联失效模型

    千次阅读 多人点赞 2019-07-20 13:00:16
    复杂网络MATLAB工具箱,我在一个星期前就这个教程开始正式学习Matlab编程及数学建模,目的是为了研究复杂网络级联失效现象,网上很难找到研究级联失效的程序代码,所以得自力更生。 关于级联失效的具体定义和表现,...

    博主“时光荏苒心依旧”在一篇关于复杂网络MATLAB工具箱的博文中,曾介绍过一个生成随机无标度网络、随机攻击、有目的攻击的教程,复杂网络MATLAB工具箱,我在一个星期前就这个教程开始正式学习Matlab编程及数学建模,目的是为了研究复杂网络级联失效现象,网上很难找到研究级联失效的程序代码,所以得自力更生。

    关于级联失效的具体定义和表现,由于时间有限,在此不做阐释,有兴趣的有需要的自然知道。

    我花了一天时间百度各个Matlab函数的用法含义,虽然Matlab自带help函数,但是既看不太懂,即便翻译成中文理解起来也费劲,所以,我疯狂百度,编辑了一份属于自己的帮助文档“Matlab小贴士”,从刚开始连load、rand、round、plot这一类最简单的函数都看不懂,到逐渐能看懂简单的代码,上文的教程一中一段循环语句我就看了一整天,一句一句分析,像做英语精读似的,后面都用%标注了中文说明,刚开始我连%符号都不知道啥用法,后来知道“%8.6f\n”是啥意思。然后当了两天程序员,第一天在上文的教程一中直接修改,试图得到自己想要的功能,调试要人命,要人命啊,一直在报错和即将报错的道路上,郁闷;第二天自己尝试重新写个,考虑到能力问题,将难度标准(要实现的功能)一降再降,最终运行。最后花了一天,提高要求,重新又编写了一段程序,最终调试了几下,成功运行,基本能够实现随机攻击下,级联失效的最简单模拟。当然可能还有些小问题,可还不能让萌新小嘚瑟一下嘛。

    ps:看到有好几个童鞋说,Clustering_Coefficient这个报错,我可能忘了在底下加上这个自定义函数的代码了,不好意思,我在文章最后面加上了,不知道行不行。。。。。。

    %% 生成一个完全连通BA无标度网络
    [A,NumberOfNodes] = BA_net();
    %function [A,NumberOfNodes]=BA_net()
    %input未增长前的网络节点个数m0:
    %input每次引入的新节点时新生成的边数m:
    %input增长后的网络规模N:
    %input初始网络时m0个节点的连接情况:1表示都是孤立;2表示构成完全图;3表示随机连接一些边初始网络情况1,2或3:
    %output该随机图的平均路径长度为:
    %output该随机图的聚类系数为:
    %output该随机图的平均度为:
    
    
    [Custer,aver_Custer]=Clustering_Coefficient(A);%聚类系数;平均聚类系数
    fprintf('Average Clustering Coefficient: %3.4f%%\n',aver_Custer);
    [DeD,aver_DeD]=Degree_Distribution(A);%度;平均度
    fprintf('Average Node Degree: %2.4f\n',aver_DeD);
    [D,aver_D]=Aver_Path_Length(A);%路径长度;平均路径长度
    fprintf('Average Path Length: %2.4f\n',aver_D);
    
    负载重分配模型
    % 负载重分配模型
    %节点初始负载F
    %节点容量C
    %网络节点i的  初始负载F_i  与  节点本身的度k_i  相关:F_i = rho * k_i^tau
    %网络中的节点 容量C_i  与初始负载F_i  成正比:C_i=(1+alpha)*F_i
    %节点i失效后,失效节点的负载分配到完好节点j上,按一定比例
    %负载更新
    %剩余节点的更新后负载F_j;             if   F_j>C_j   节点j失效,否则end
    %网络中所有节点的负载不超过其本身容量,连锁故障过程结束
    
    %度量
    %度量连锁故障结束后网络中失效节点个数CF_i
    %CFN=sum(CF_i)/(N*(N-1))
    
    rho=4;
    tau=1.6;  %负载参数(0.1,2)
    beta=1.6; %和度有关的负载分配比例参数
    theta=1;   %和距离有关的负载分配比例参数
    alpha=0.1;  %容量参数
    
    F = rho * DeD.^tau;%初始负载,1*N
    
    C = (1+alpha).*F;%容量,1*N,一行矩阵,默认为固定值
    
    
    
    f = (D.^theta) .* ( DeD.^beta)./sum(sum((D.^theta) .*  (DeD.^beta)));%负载分配比例,方阵
    % F_Temp = F_Temp + F_Remove * f;  %更新后的临时负荷矩阵,1*(N-1)
    % Fail=F_Temp > C_First;   %判断剩余节点更新后的负荷是否大于节点容量,是=1,否=0,1*(N-1),即接下来要删除的节点位置
    
    
    
    %%随机删除某一节点,删除节点所在行和列,生成新的邻边矩阵A_Temp
    A_Temp=A;
    % aver_D_Temp=aver_D;
    % aver_DeD_Temp=aver_DeD;
    
    NodesToRemove=[];
    % DeD_average=aver_DeD;
    % D_average=aver_D;
    
    Fail_All=[];    %失效节点集合,1*50矩阵.
    NodesToRemove_Free=[];
    
    step1=0;    %监测for循环次数.
    step2=0;    %监测第一个if循环次数.
    step3=0;    %监测第二个if循环次数.
    step4=0;    %监测while中的if循环次数.
    
    NodesToRemovePerStep =1;    %每步移除节点数.
    RemainingNodes=1:NumberOfNodes; %剩余节点数,1行N列向量.
    NumberOfNodes_Temp=NumberOfNodes;   %临时节点数,数值.
    for i=1:50
            F_Temp=F;   %重置F_Temp;
            C_Temp=C;   %重置C_Temp;
            f_Temp=f;   %重置f_Temp;
            
            NodeIndecesToRemove=randperm(numel(RemainingNodes),NodesToRemovePerStep); %随机抽取移除节点,序号.
            NodesToRemove_Temp1 = RemainingNodes(:,NodeIndecesToRemove);  %移除节点的初始序号,1*1.
            NodesToRemove_Free=[NodesToRemove_Free,NodesToRemove_Temp1];    %随机抽取的50个节点的初始序号.
            NodesToRemove=[NodesToRemove,NodesToRemove_Temp1];   %所有移除节点的初始序号,矩阵.
            step1=step1+1;
    
            %移除节点后,更新网络
            RemainingNodes(:,NodeIndecesToRemove)=[];       %总的节点中的剩余节点,将每次随机抽样的节点剔除,避免重复抽取.
            
            RemainingNodes_Temp=1:NumberOfNodes;            %临时剩余节点重置为1*N.
            RemainingNodes_Temp(:,NodesToRemove_Temp1)=[];   %更新临时剩余节点,1*(N-1).
            NodesToRemove_If=[];        %重置每一步if循环后的移除节点集合.
            NodesToRemove_If=[NodesToRemove_If,NodesToRemove_Temp1]; %更新,1*1.
            A_Temp=A;       %重置临时网络矩阵A.
            A_Temp=A_Temp(RemainingNodes_Temp,RemainingNodes_Temp);   %更新临时网络矩阵A,(N-1)*(N-1);
    
            [DeD,aver_DeD_Temp,Fail_Temp,Fail_Num]=Degree_Distribution_Nofigure(A_Temp);    %更新节点度,平均度,孤立点的位置,孤立点点数量
            
            Fail_Sum=0;     %重置
            
            
            if ~isempty(Fail_Temp)   %判断是否存在孤立点,有的话,进行if
                step2=step2+1;
                %%算上孤立点,孤立点的效果等同于移除节点,两者一前一后连续发生
                
                Fail_Sum=Fail_Sum+Fail_Num; %总的孤立点数量
                NodesToRemove_Temp2=RemainingNodes_Temp(:,Fail_Temp);     %孤立点的初始序号,矩阵.
                NodesToRemove=[NodesToRemove,NodesToRemove_Temp2];
                NodesToRemove_If=[NodesToRemove_If,NodesToRemove_Temp2];   %1个移除节点+孤立点的初始序号,1*(Fail_Num+1)矩阵.
                RemainingNodes_Temp(:,Fail_Temp)=[]; %剩余的节点,初始序号,矩阵1*(N-1-Fail_Num).
                
                
                %%直接算(移除节点+孤立点)带来的负载影响
                F_Remove=F_Temp(:,NodesToRemove_If); %(移除节点+孤立点)的负载,负载是一直变化的.
                %f = (D.^theta) .* ( DeD.^beta)./sum(sum((D.^theta) .*  (DeD.^beta)));
                %%负载分配比例,方阵,简单起见,认为f固定不变
                
                f_Temp=f(NodesToRemove_If,:);    %选择(移除节点+孤立点)所在行.
                f_Temp(:,NodesToRemove_If)=[];         %删除(移除节点+孤立点)的列.
                F_Temp(:,NodesToRemove_If)=[];   %临时负荷中,(移除节点+孤立点)所在列.
                F_Temp = F_Temp + F_Remove * f_Temp;  %更新剩余剩余负荷,即临时负荷 ,一行矩阵.
                
                %%判断临时负荷F_Temp 和 对应容量C_Temp 大小关系,if F_Temp>C_Temp,节点(级联)失效
                %%节点(级联)失效,效果等同于 孤立点,移除节点
                C_Temp = C(:,RemainingNodes_Temp);   %剩余节点对应的容量.
                
                NodesFailure=F_Temp>C_Temp;     %一行逻辑矩阵,找到F_Temp>C_Temp 具体位置.
                
            else
                %%移除节点带来的负载影响
                F_Remove=F_Temp(:,NodesToRemove_Temp1); %移除节点的负载,负载是一直变化的,1*1.
                
                f_Temp=f(NodesToRemove_Temp1,:);    %选择移除节点所在行,1*N.
                f_Temp(:,NodesToRemove_Temp1)=[];         %删除所有已经移除节点的列,1*(N-1).
                F_Temp(:,NodesToRemove_Temp1)=[];   %临时负荷中,删除移除节点所在列,1*(N-1).
                F_Temp = F_Temp + F_Remove * f_Temp;  %更新剩余剩余负荷,即临时负荷 ,一行矩阵.
                C_Temp = C(:,RemainingNodes_Temp);   %剩余节点对应的容量,1*(N-1).
                NodesFailure=F_Temp>C_Temp;     %一行逻辑矩阵,找到F_Temp>C_Temp 具体位置.
                
            end
            
            while sum(NodesFailure)>0   %级联失效,引发进一步的节点失效,即节点删除
                step3=step3+1;
                NodeIndecesToRemove=find(NodesFailure);  %找到逻辑矩阵中,逻辑值1所在位置,即为级联失效节点位置.
                %F_Remove=F_Temp(:,NodeIndecesToRemove);  %移除节点的负载,负载是一直变化的.
                Fail_Sum=Fail_Sum+numel(NodeIndecesToRemove);
                
                NodesToRemove_Temp = RemainingNodes_Temp(:,NodeIndecesToRemove);  %级联失效节点的初始序号,矩阵.
                NodesToRemove=[NodesToRemove,NodesToRemove_Temp];
                NodesToRemove_If=[NodesToRemove_If,NodesToRemove_Temp];   %所有(移除节点+孤立点+级联失效点)的初始序号,矩阵.
                
                %移除节点后,更新网络
                RemainingNodes_Temp(:,NodeIndecesToRemove)=[];   %剩余节点的初始序号,矩阵.
                RemainingNodes_Temp1=1:length(RemainingNodes_Temp);
                
                %C_Temp=C;   %重置C_Temp;
                %f_Temp=f;   %重置f_Temp;
                A_Temp=A;
                A_Temp=A_Temp(RemainingNodes_Temp,RemainingNodes_Temp);   %剩余节点的行和列;
    
                [DeD,aver_DeD_Temp,Fail_Temp,Fail_Num]=Degree_Distribution_Nofigure(A_Temp);    %更新节点度,平均度,孤立点的位置,孤立点点数量
             
                %%判断级联失效,是否会带来新的  孤立点, 以及  新一轮的  级联失效.
             if ~isempty(Fail_Temp)   %判断是否存在孤立点,有的话,进行if
                step4=step4+1;
                
                %%算上孤立点
                Fail_Sum=Fail_Sum+Fail_Num; %总的孤立点数量
                NodesToRemove_Temp2=RemainingNodes_Temp(:,Fail_Temp);     %孤立点的初始序号,矩阵.
                NodesToRemove_Temp3=RemainingNodes_Temp1(:,Fail_Temp);      %孤立点的前一次序号.
                NodesToRemove=[NodesToRemove,NodesToRemove_Temp2];
                NodesToRemove_If=[NodesToRemove_If,NodesToRemove_Temp2];   
                RemainingNodes_Temp(:,Fail_Temp)=[]; %剩余的节点,初始序号.
                
                
                %%直接算(移除节点+孤立点)带来的负载影响
                F_Remove=F_Temp(:,[NodeIndecesToRemove,NodesToRemove_Temp3]); %(级联失效节点+孤立点)的负载,负载是一直变化的.
                %f = (D.^theta) .* ( DeD.^beta)./sum(sum((D.^theta) .*  (DeD.^beta)));
                %%负载分配比例,方阵,简单起见,认为f固定不变
                
                f_Temp=f([NodesToRemove_Temp,NodesToRemove_Temp2],:);    %选择(级联失效节点+孤立点)所在行.
                f_Temp(:,NodesToRemove_If)=[];         %删除(移除节点+孤立点+级联失效)的列.
                F_Temp(:,[NodeIndecesToRemove,NodesToRemove_Temp3])=[];   %临时负荷中,删除(级联失效节点+孤立点)所在列.
                F_Temp = F_Temp + F_Remove * f_Temp;  %更新剩余剩余负荷,即临时负荷 ,一行矩阵.
                
                %%判断临时负荷F_Temp 和 对应容量C_Temp 大小关系,if F_Temp>C_Temp,节点(级联)失效
                %%节点(级联)失效,效果等同于 孤立点,移除节点
                C_Temp = C(:,RemainingNodes_Temp);   %剩余节点对应的容量.
                
                NodesFailure=F_Temp>C_Temp;     %一行逻辑矩阵,找到F_Temp>C_Temp 具体位置.
    
            else
                %%移除节点带来的负载影响
                F_Remove=F_Temp(:,NodeIndecesToRemove); %级联失效节点的负载,负载是一直变化的,1*1.
                
                f_Temp=f(NodesToRemove_Temp,:);    %选择级联失效节点所在行,1*N.
                f_Temp(:,NodesToRemove_If)=[];         %删除所有已经移除节点的列,1*(N-1).
                F_Temp(:,NodeIndecesToRemove)=[];   %临时负荷中,删除移除节点所在列,1*(N-1).
                F_Temp = F_Temp + F_Remove * f_Temp;  %更新剩余剩余负荷,即临时负荷 ,一行矩阵.
                C_Temp = C(:,RemainingNodes_Temp);   %剩余节点对应的容量,1*(N-1).
                NodesFailure=F_Temp>C_Temp;     %一行逻辑矩阵,找到F_Temp>C_Temp 具体位置.
    
            end
                
       
            end
            Fail_All=[Fail_All,Fail_Sum];       %更新失效节点集合,1*i.
            
    
    end
    CFN=sum(Fail_All)/(50*(50-1));
    fprintf('平均失效规模: %8.6f%\n',CFN);
    

    以上是一种简单的级联失效模型,我目前也才编出随机攻击策略的实现过程,至于蓄意攻击的还没写,想来改改就差不多了,以后再说。

    以下是其中要用到的函数,计算节点度和平均度,计算节点距离,生成BA无标度网络,我都做了些许修改,总的功能没变,无非是原先有画图,我给改成输出值了,还有为了达到一定功能,我增加了些值,比如孤立点的位置。

    函数:节点的度

    function [DeD,aver_DeD,Fail,Fail_Num]=Degree_Distribution_Nofigure(A)
    %% 求网络图中各节点的度及度的分布曲线
    %% 求解算法:求解每个节点的度,再按发生频率即为概率,求P(k) 
    %A————————网络图的邻接矩阵
    %DeD————————网络图各节点的度分布
    %aver_DeD———————网络图的平均度
    %Fail-------------孤立点的位置
    %Fail_Num---------孤立点的个数
    N=size(A,2);
    DeD=zeros(1,N);
    Fail=[];
    
    for i=1:N
       % DeD(i)=length(find((A(i,:)==1)));
       DeD(i)=sum(A(i,:));
    end
    aver_DeD=mean(DeD);
    for i=1:N
        if DeD(i)==0         %判断是否为孤立点.
           Fail(end+1)=i; 
           
        else
        end
    end
    Fail_Num=length(Fail);
    if sum(DeD)==0
        disp('该网络图全部由孤立点组成');
        return;
    else 
    end
    
    

    函数:节点的距离以及平均路径长度

    function [D,aver_D,disconnected]=Aver_Path_Length_Simple(A)
    %% 求复杂网络中两节点的距离以及平均路径长度
    %% 求解算法:首先利用Floyd算法求解出任意两节点的距离,再求距离的平均值得平均路径长度
    %  A————————网络图的邻接矩阵
    %  D————————返回值:网络图的距离矩阵
    %  aver_D———————返回值:网络图的平均路径长度
    %  disconnected--------返回值:1,不连通,存在孤立点;2,连通,不存在孤立点; 
     N=size(A,2);
     D=A;
     D(D==0)=inf;    %将邻接矩阵变为邻接距离矩阵,两点无边相连时赋值为inf,自身到自身的距离为0.
     for i=1:N           
         D(i,i)=0;   %对角线都为0.      
     end   
     for k=1:N            %Floyd算法求解任意两点的最短距离
         for i=1:N
             for j=1:N
                 if D(i,j)>D(i,k)+D(k,j)
                    D(i,j)=D(i,k)+D(k,j);
                 end
             end
         end
     end
     aver_D=sum(sum(D))/(N*(N-1));  %平均路径长度
     if aver_D==inf
         disconnected=1;
     else
         disconnected=0;
     end
    

    生成想要的BA无标度网络,略有修改

    function [A,NumberOfNodes]=BA_net()
    %%% 从已有的m0个节点的网络开始,采用增长机制与优先连接的机制生成BA无标度网络
    %% A ——————返回生成网络的邻接矩阵
    m0=input('未增长前的网络节点个数m0:  ');
    m=input(' 每次引入的新节点时新生成的边数m: ');
    N=input('增长后的网络规模N: ');
    disp('初始网络时m0个节点的连接情况:1表示都是孤立;2表示构成完全图;3表示随机连接一些边');
    pp=input('初始网络情况1,2或3: ');
    if m>m0
        disp('输入参数m不合法');
        return;
    end
    x=100*rand(1,m0);
    y=100*rand(1,m0);
    
    switch  pp
        case 1
            A=zeros(m0);
        case 2
            A=ones(m0);
            for i=1:m0
                A(i,i)=0;
            end
        case 3
            for i=1:m0
                for j=i+1:m0
                    p1=rand(1,1);
                    if p1>0.5 
                        A(i,j)=1;A(j,i)=0;
                    end
                end
            end
        otherwise
            disp('输入参数pp不合法');
            return;          
    end 
    
    for k=m0+1:N
        M=size(A,1);
        p=zeros(1,M);
        x0=100*rand(1,1);y0=100*rand(1,1);
        x(k)=x0;y(k)=y0;
        if isempty(find(A==1, 1))
            p(:)=1/M;
        else
             for i=1:M
                 p(i)=length(find(A(i,:)==1))/length(find(A==1));
             end
        end
        pp=cumsum(p);          %求累计概率
        for i=1:m              %利用赌轮法从已有的节点中随机选择m个节点与新加入的节点相连
            random_data=rand(1,1);
            aa=find(pp>=random_data);jj=aa(1); % 节点jj即为用赌轮法选择的节点
            A(k,jj)=1;A(jj,k)=1;
        end
    end
    plot(x,y,'ro','MarkerEdgeColor','g','MarkerFaceColor','r','markersize',8);
    hold on;
    
    for i=1:N 
        for j=i+1:N
            if A(i,j)~=0
                plot([x(i),x(j)],[y(i),y(j)],'linewidth',1.2); 
                hold on;      %% 画出BA无标度网络图
            end
        end
    end
    axis equal;
    hold off  
    
    [C,aver_C]=Clustering_Coefficient(A);
    [DeD,aver_DeD]=Degree_Distribution(A);
    [D,aver_D]=Aver_Path_Length(A); 
    NumberOfNodes=N;
     disp(['该随机图的平均路径长度为:',num2str(aver_D)]);  %%输出该网络的特征参数
     disp(['该随机图的聚类系数为:',num2str(aver_C)]);
     disp(['该随机图的平均度为:',num2str(aver_DeD)]);   
    
    

    任重而道远,不过总体是快乐和充实的,因为既学到了新东西,又能取得可见到的成果。比较起来,感觉以前大学本科四年完全是在睡梦中打酱油——不值一提。一个星期学到的东西比以前大半年学到的还多。反正比实习打工要有趣得多。

    以上就是过去一个星期的基本总结,喝水不忘挖井人,希望也能帮到别的手足无措的小伙伴,薪火相传,再接再厉。

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    以下是我之前自学做的分析笔记,不算是代码吧,里面很多都没加%符号,是博主“时光荏苒心依旧”在一篇关于复杂网络MATLAB工具箱的博文中教程一的一小段,纯属晒晒笔记,嘚瑟一下。刚开始看的时候,惊为天书,后来越看越困惑,接着又开始嫌弃了,模型确实太简单了点,比我的简单模型还要简单,简单的平方。

    %% remove random node untill the graph breaks apart:随机删除节点直到图分裂
    TempGraph=Graph;   %图
    NodesToRemovePerStep =1;   %每步移除的节点数
    NumbersOfNodes = []; 			%节点数量
    NumbersOfLinks = [];			%连边的数量
    NumbersOfComponents = [];		%集群数量
    LargestClusterSizes = [];			%最大聚类规模
    SecondLargestClusterSizes = [];			%第二大聚类规模
     
    RemainingNodes = 1:NumberOfNodes;    %剩余节点
     
    while ~isempty(RemainingNodes)		%判断()是否为空,空为0,否则为1
    NodeIndecesToRemove = unique(round(rand(NodesToRemovePerStep,1)*(numel(RemainingNodes)-1))+1);
    %% 随机移除节点
    %% rand(NodesToRemovePerStep,1) 产生由在(0, 1)之间均匀分布的随机数组成的数组,每步移除的节点数
    numel(RemainingNodes)  计数,剩余节点数
    rand(NodesToRemovePerStep,1)*(numel(RemainingNodes)-1)
    round(                     )  四舍五入
    unique(round(                     )+1)		去掉矩阵中重复的元素
    %%  重新计算移除节点后的图像及结构特点
    NodesToRemove = RemainingNodes(NodeIndecesToRemove);
    %%	移除的节点    = 	剩余节点数(NodeIndecesToRemove)
    
    RemainingNodes = setdiff(RemainingNodes,NodesToRemove);
    %%  剩余节点   =   剩余节点 中有而 移除的节点  中没有的值
    
    TempGraph = mexGraphNodeRemove(TempGraph,NodesToRemove);
    %%  图 	=	从原 图 中移除节点以及节点的边
    
    NumbersOfNodes(end+1) = GraphCountNumberOfNodes(TempGraph);
    %%  节点数量   (end+1)  =   计算	  图   中  节点数量
    
    NumbersOfLinks(end+1) = GraphCountNumberOfLinks(TempGraph);
    %%  连边的数量   增加一个长度,存放     =    计算   图   中  连边的数量
    
        if NumbersOfLinks(end)>0			%如果>0,否则=0   最后一个 连边的数量  元素  
            Components = mexGraphConnectedComponents(TempGraph);
    		%% 集群   =    计算  图 中最大连通集群
            NumbersOfComponents(end+1) = numel(Components);
    		%%  集群数量  增加一个长度,存放    =   统计 集群 数量
            ComponentsSizes = sort(cellfun('length',Components),'descend');  
    		%%  集群大小      =	按照所有集群的长度    降序  排序
    		cellfun('length',Components)  计算所有集群的长度,
    		
    		
            if ~isempty(ComponentsSizes)		%  	如果=1,否则=0 	判断(集群大小)是否为空,空为0,否则为1
                LargestClusterSizes(end+1) = ComponentsSizes(1);		%  最大聚类大小   增加一个长度,存放 =最大的集群大小
            else
                LargestClusterSizes(end+1) = 0;		%  最大聚类大小   增加一个长度,存放=0
            end
            if numel(ComponentsSizes)>1		%  如果>1,否则 
                SecondLargestClusterSizes(end+1) = ComponentsSizes(2);	%  第二大聚类规模    = 最大的集群大小
            else
                SecondLargestClusterSizes(end+1) = 0;
            end
        else
            NumbersOfComponents(end+1) = 0;
            LargestClusterSizes(end+1) = 0;
            SecondLargestClusterSizes(end+1) = 0;
        end
    end
    h4 = figure;
    plot(NumbersOfComponents,'r');
    hold on;				%画多重线
    h5 = figure;
    plot(NumbersOfNodes,'r');
    hold on;
    h6 = figure;
    plot(NumbersOfLinks,'r');
    hold on;
    h7 = figure;
    plot(SecondLargestClusterSizes,'r');
    hold on;
    h8=figure;
    plot(LargestClusterSizes,'r');
    hold on;
     
    %% remove most connected nodes (with heighest outgoing degree):删除出度最大的节点
    TempGraph=Graph;											%图
    NodesToRemovePerStep =1;									%每步移除的节点数
    NumbersOfNodes = [];										%节点数量
    NumbersOfLinks = [];										%连边的数量
    NumbersOfComponents = [];								%集群数量
    LargestClusterSizes = [];								%最大聚类规模
    SecondLargestClusterSizes = [];							%第二大聚类规模
     
    RemainingNodes = 1:NumberOfNodes;						%剩余节点数
     
    while ~isempty(TempGraph.Data)							%判断(图中数据)是否为空,空为0,否则为1
        Degrees = GraphCountNodesDegree(TempGraph);		%  节点度
        [OutDegrees, SortOrder]=sort( Degrees(:,3),'descend');		% [出度,位置序号]=按出度降序排列
    NodesToRemove = Degrees(SortOrder(1:min([numel(SortOrder) NodesToRemovePerStep])));
    %%  根据节点度大小,移除出度最大的节点
    %%  移除的节点   =  根据 节点度(出度降序排列的位置序号())
    min([numel(SortOrder) NodesToRemovePerStep])   两者中最小的
    numel(SortOrder)  计数  位置序号  有度的节点的个数
    NodesToRemovePerStep   每步移除的节点数
    %%  重新计算移除节点后的图像及结构特点
        TempGraph = mexGraphNodeRemove(TempGraph,NodesToRemove);				%  移除的节点
        NumbersOfNodes(end+1) = GraphCountNumberOfNodes(TempGraph);			%  节点数量
        NumbersOfLinks(end+1) = GraphCountNumberOfLinks(TempGraph);			%  连边的数量
        if NumbersOfLinks(end)>0
            Components = mexGraphConnectedComponents(TempGraph);
            NumbersOfComponents(end+1) = numel(Components);
            ComponentsSizes = sort(cellfun('length',Components),'descend');
            if ~isempty(ComponentsSizes)
                LargestClusterSizes(end+1) = ComponentsSizes(1);
            else
                LargestClusterSizes(end+1) = 0;
            end
            if numel(ComponentsSizes)>1
                SecondLargestClusterSizes(end+1) = ComponentsSizes(2);
            else
                SecondLargestClusterSizes(end+1) = 0;
            end
        else
            NumbersOfComponents(end+1) = 0;
            LargestClusterSizes(end+1) = 0;
            SecondLargestClusterSizes(end+1) = 0;
        end
    end
    
    

    最后真诚感谢博主博主时光荏苒心依旧,半师之谊,上海的奶茶给您满上。

    Ps**:Clustering_Coefficient**

    help Clustering_Coefficient
    求网络图中各节点的聚类系数及整个网络的聚类系数
    % 求解算法:求解每个节点的聚类系数,找某节点的所有邻居,这些邻居节点构成一个子图
    % 从A中抽出该子图的邻接矩阵,计算子图的边数,再根据聚类系数的定义,即可算出该节点的聚类系数
    A————————网络图的邻接矩阵
    C————————网络图各节点的聚类系数
    aver———————整个网络图的聚类系数

    function  [C,aver_C]=Clustering_Coefficient(A)
    %% 求网络图中各节点的聚类系数及整个网络的聚类系数
    %% 求解算法:求解每个节点的聚类系数,找某节点的所有邻居,这些邻居节点构成一个子图
    %% 从A中抽出该子图的邻接矩阵,计算子图的边数,再根据聚类系数的定义,即可算出该节点的聚类系数
    %A————————网络图的邻接矩阵
    %C————————网络图各节点的聚类系数
    %aver———————整个网络图的聚类系数
    N=size(A,2);
    C=zeros(1,N);
    for i=1:N
        aa=find(A(i,:)==1);  %寻找子图的邻居节点
        if isempty(aa)
            disp(['节点',int2str(i),'为孤立节点,其聚类系数赋值为0']);
            C(i)=0;
        else        
            m=length(aa); 
            if m==1
                disp(['节点',int2str(i),'只有一个邻居节点,其聚类系数赋值为0']);
                C(i)=0;
            else
               B=A(aa,aa);          % 抽取子图的邻接矩阵
               C(i)=length(find(B==1))/(m*(m-1));
            end
        end
    end
    aver_C=mean(C);
    
        
        
        
    

    最后,附上后来建的一个小的级联失效扣扣交流群:#530#762#903#,不怎么活跃,人也不多,上传了一点点文件在群里,希望能起到一点帮助。

    展开全文
  • 结果表明,在考虑级联失效的条件下,复杂保障网络的抗毁性随着流量强度的增加急剧下降。此外,流量分布对复杂保障网络的抗毁性也具有显著影响,在流量强度一定的条件下改变网络的流量分布能有效提高网络的抗毁性。
  • 该文在网络动态性基础上,研究级联失效条件下复杂网络的抗毁性能,对ER随机网络模型、BA无标度网络模型和PFP互联网拓扑模型这三种模型在不同攻击策略下的抗毁性进行了对比分析和仿真实验。实验结果表明:在随机攻击...
  • 结果表明,在考虑级联失效的条件下,复杂保障网络的抗毁性随着流量强度的增加急剧下降。此外,流量分布对复杂保障网络的抗毁性也具有显著影响,在流量强度一定的条件下改变网络的流量分布能有效提高网络的抗毁性。
  • 如何用matlab分析复杂网络的级联失效过程,最好有相关的程序供学习参考
  • 社交网、交通网、通信网等领域...在复杂网络中, 节点和边承担的负载是不断演化的, 具有一定的动力学特征, 当节点或边的负载大于自身容量而导致失效后, 使得失效节点或边的负载通过网络的相互连接被重新分配到相关节...

    社交网、交通网、通信网等领域均呈现无标度特性[, 是复杂网络中常见的一种现象, 不同网络中的节点和边都承载着不同形式的负载, 且负载的承受能力是有限的.加权无标度网络是指节点和边根据权值构建成的网络[, 应用在专家网等领域.

    在复杂网络中, 节点和边承担的负载是不断演化的, 具有一定的动力学特征, 当节点或边的负载大于自身容量而导致失效后, 使得失效节点或边的负载通过网络的相互连接被重新分配到相关节点或边上, 从而引起其他节点或边失效, 产生级联效应, 进而可能导致整个网络的瘫痪[, 这种由微小事件引发的连锁故障称为级联失效.在现实世界中, 由级联失效引发的故障包括北美电力网崩溃事故、Internet阻塞、交通堵塞以及经济危机等.因此, 构建合理、完善的级联失效模型, 并分析参数对级联失效的影响, 对提升网络的鲁棒性具有重要的意义[.

    近年来, 级联失效的研究主要基于复杂网络, 其中以无标度网络为主, 主要是从节点的初始负载、节点容量与初始负载的关系、节点失效后负载重分配规则这3个方面进行研究.复杂网络的主要特性包括节点度、集聚系数和平均最短路径长度, 其中, 节点度(包括邻居节点度)对节点负载起到决定性作用, 其属于局域范畴; 平均最短路径长度通过介数的表达方式体现出对节点负载的影响, 其属于全局范畴; 集聚系数表示网络中节点聚集程度的系数, 与节点负载没有密切关系.在加权的复杂网络中, 还需要考虑节点权重对负载的影响.因此, 节点的初始负载通常定义为关于度、介数或者邻居度的幂函数, 幂指数是用来控制初始负载强度的参数; 负载重分配主要考虑邻居的容量、负载、度数和与失效节点的距离等因素; 节点的容量必然要大于节点的初始负载, 一般定义为关于初始负载的比例函数.在这些方面, 段等人[基于初始负载与度的幂函数关系, 构建关于距离和节点度的择优分配规则, 分析了负载重分配的范围和均匀性.Yin[和Liu[等人同样采用关于度的初始负载模型, 利用邻居节点度或节点能量进行负载重分配, 通过对级联失效的演化分析得出了网络的临界负载以及能量对级联失效产生影响的结论.王等人[构建了初始负载关于节点度与邻居节点度总和乘积的幂函数, 并利用节点度和邻居节点度总和进行择优分配, 分析幂指数与容忍参数的影响关系.Liu等人[利用节点介数构建网络的初始负载模型, 通过容量与负载的差值进行择优分配, 分析得出容量的容忍参数对级联失效的影响.Peng[和Dou等人[构建初始负载关于介数的幂函数, 并分析幂指数的取值范围与抗击级联失效的关系.此外, 一些文献

    然而, 在现实世界中, 加权网络是普遍存在的, 典型的例子有大型的信息网络(如Internet、电话网)、交通网络(如铁路网、航空网)、生物网络(如生物神经网、蛋白质网)、社会网络(如科学家合作网、社交网)以及电网.无权网络只是反映顶点之间是否存在相互作用, 在很多情况下, 顶点之间相互作用的强度差异起着至关重要的作用, 如神经元突触之间的连接在学习和认知过程中是不变的, 只是突触之间连接强度的变化使大脑皮层产生了新的功能.再如, Internet上的带宽、航空网中两个机场间航班数量或者座位数、专家合作网中的合作次数等都是影响系统性质的重要因素.同样, 相同网络结构中的同一节点的角色和重要性也有很大差异.如电网中的开关处于大型高压配电中心或大型信息交换中心与处于普通配电站的作用有巨大的差别.因此, 无权网络完全可以作为加权网络的一种特例, 基于加权网络的级联失效研究具有更强烈的实际需求.目前, 关于加权网的研究成果远不及无权网的研究.加权网最经典的是Barrat等人[提出的BBV(Barrat Barthélemy Vespignani)模型, 在此模型基础上, Zhao[和Ding等人[采用关于介数的初始负载模型, 在网络的节点的失效演化过程中涉及到边权的变化, 介数从全局的结构角度体现出节点承担的负载, 但是, 不同通信路径的选择会使得计算结果与实际结果有偏差.Wang[和Andrea等人[将权重转化为节点度乘积的幂函数进行负载重分配, 从局域的角度分析网络不发生级联失效的幂指数范围, 虽然降低了算法复杂度, 但是网络的全局结构特征对网络的变化起到至关重要的作用, 忽略全局因素会使得部分特殊位置节点的负载计算不够准确.Jin等人[基于有向加权网建立初始负载关于节点度和权重乘积的函数关系, 并分析了有向边的情况下容量参数的临界阈值, 其初始负载考虑了局域范围内的节点度和权值, 只是同样未涉及到全局的影响因素.综上所述, 加权网络中的节点权重对网络的构建具有重要的影响, 如何将节点权重与网络的全局和局域因素相结合, 并利用数学方法推导出参数之间的变化规律, 具有重要的研究意义.

    针对以上问题, 本文基于加权的无标度网络, 研究初始负载、容量和负载重分配中的参数的相互影响关系及其对级联失效的影响, 提出一个同时考虑全局和局域因素的初始负载模型, 构建关于容量的负载重分配机制, 并分析容量中的容忍参数分别与网络抵抗级联失效的鲁棒性和初始负载中的强度参数的关系.

    1 加权无标度模型和问题描述

    1.1 BBV模型

    级联失效的分析是基于节点负载和容量展开的, 在加权无标度网络中, 以点权为驱动机制的经典模型为BBV模型, 因此, 对于加权无标度网络中的级联失效研究大多基于BBV模型及其衍生模型.BBV模型的点权、度和边权分布都服从幂率分布, 保持了无标度网络的强容错性能.

    在BBV模型中, 节点i的点权wi的表达式为

    $

    {{w}_{i}}=\sum\limits_{j\in N}{{{t}_{ij}}}

    $

    (1)

    其中, tij为节点i和j之间的边权, 且tij=tji, 当i和j之间无连接时, 则tij=0, N为网络中的节点个数.

    BBV模型的构建主要包含两个步骤:增长方式和权重演化.

    (1) 增长:初始网络是包含m0个节点的全连通网络, 每个时间间隔加入一个新节点nnew, 新节点与网络中已经存在的m(≤m0)个节点相连, 网络中节点i被选中与nnew相连的概率与i的点权成正比, 择优连接概率为

    $

    \prod\limits_{{{n}_{new}}\to i}{=\frac{{{w}_{i}}}{\sum\nolimits_{j}{{{w}_{j}}}}}

    $

    (2)

    (2) 权重演化:新加入的边ennewi的权重的初始值设为t0=1, ennewi的加入会导致节点i与其邻居节点j之间的边权重新分配, 调整规则如下:

    $

    {{t}_{ij}}\to {{t}_{ij}}+\Delta {{t}_{ij}}

    $

    (3)

    其中, Δtij与tij和节点i的权重wi相关为

    $

    \Delta {{t}_{ij}}={{\delta }_{i}}\frac{{{t}_{ij}}}{{{w}_{i}}}

    $

    (4)

    其中, δi为节点i新增一条边所带来的额外流量负担(一般情况下, 设δi=δ=1).进而可得i的点权调整为

    $

    {{w}_{i}}\to {{w}_{i}}+{{t}_{0}}+{{\delta }_{i}}

    $

    (5)

    当权重更新之后, 进入下一个时间轮, 直到网络构建结束.BBV模型权重演化规则如

    图 1

    Fig. 1

    487d0bba4f72cc35ac9613541ecefa30.png

    Fig. 1 The evolution rule in weights of EH-BBV

    图 1 BBV权重演化规则图

    依据平均场理论得到最终的点权分布$ P(w)\sim {{w}^{-\alpha }}, $其中, $ \alpha =\frac{4\delta +3}{2\delta +1}$, 与度分布的幂率指数相同.实验中所用加权网络是BBV模型在局域范围内的衍生模型, 生成原理与演化规则是一致的.

    1.2 问题描述

    级联失效出现在现实世界中, 大多是由于单个节点受环境影响或人为因素导致失效, 出现负载分流现象, 这些分配出去的负载导致被分配的节点由于超载而失效, 出现再次负载重分配的现象, 这种现象持续发生会导致网络瘫痪.级联失效后的负载重分配示意图如i失效后, i的负载进行重分配, 以相应的分配比例分配给节点i的邻居节点j1、j2和j3, j1节点由于超载会进行再次分配, 如此循环下去, 直到网络中不再出现节点超载的现象.

    图 2

    Fig. 2

    2e719de454541cf1d85a4ab73a82d773.png

    Fig. 2 Load redistribution after cascading failure

    图 2 级联失效后的负载重分配示意图

    此外, 级联失效的研究是基于节点负载与其容量的关系展开的, 重分配的负载与节点的初始负载有直接的关系, 因此, 节点负载的定义对后续推导参数之间的变化规律起着至关重要的作用.在网络中, 节点的负载受多方面的影响, 从全局的结构上来分析, 受到传输路径的影响, 通过节点的最短路径条数与节点的传输负载有直接的关系.另一方面, 节点局域范围内的节点度和节点权重同样与节点的传输负载密不可分.基于介数分析的负载会忽略实际中传输路径不同导致的结果偏差, 基于节点度分析的负载会忽略度数小的桥节点.因此, 如何将全局和局域因素合理、有效地结合起来, 构建综合的节点初始负载模型是本文研究的关键.此外, 各个因素中涉及到的参数和函数表达有很大差异, 如何利用数学方法进行理论推导也是研究的重点.

    依据加权无标度网络的级联失效现象, 定义合理的节点负载模型和负载重分配模型, 采用不同的数学方法推导容量参数与负载参数、节点度、节点权重和介数之间的变化规律是本文研究的两个重点.对这两个研究点进行建模、研究和分析构成了本文的研究内容.探究级联失效现象的根源、过程和发展规律是本文的主要目的和目标.

    2 加权网的级联失效模型

    2.1 级联失效模型

    在以往的研究中, 初始负载与节点度、邻居度数和、介数中的一种或两种成比例关系或幂率关系, 如$ Loa{{d}_{i}}=\rho {{k}_{i}}^{\alpha }, $ 几乎不涉及到节点权重, 未能结合权重从全局和局域两方面进行研究.节点度大的节点, 介数不一定大, 反之, 处于桥接位置的小度数节点却拥有大的介数.在加权网络中, 考虑到节点介数、度数和权重对节点负载的综合影响, 本节将研究影响节点m的初始负载的4方面因素:节点介数、节点度、节点权重和节点邻居的权重和.其中, 考虑节点邻居的权重和的原因一方面是对局域范围内研究的深入和完善, 另一方面是强调节点权重在加权网中的作用.首先, 从全局来看, 在网络中所有节点对之间通过m的最短路径越多, 则节点m的传输量越大, 负载越大.其次, 从局域来看, 一方面, 度数大的节点接收和发送的消息量大, 负载也相应地增大.类似地, 节点的权重越大, 则节点的能力越大, 根据“能者多劳”的原理, 其需要处理的负载也会越多.另一方面, 邻居的权重和同样在局域范围内影响节点负载的变化.因此, 建立节点的初始负载与节点介数、节点度、节点权重和邻居权重和的关系, 得到节点m的初始负载Loadm定义为

    $

    Loa{{d}_{m}}(0)=(1+\alpha ){{\left( {{B}_{m}}{{k}_{m}}{{w}_{m}}\sum\limits_{{m}'\in {{M}_{m}}}{{{w}_{{{m}'}}}} \right)}^{\tau }}

    $

    (6)

    其中, α和τ为控制节点初始负载强度的参数, 且α≥0, τ>0, Bm为节点m的介数, km为m的度数, wm为m的权重, Mm为m的邻居.公式(6) 中的Bm表示为

    $

    {{B}_{m}}=\sum\limits_{i\ne j\ne m, {{k}_{m}}>1}{\frac{{{g}_{imj}}}{{{g}_{ij}}}}

    $

    (7)

    其中, gij表示节点对i和j之间的最短路径条数, gimj表示i和j之间通过m的最短路径条数, 这里, 对介数的条件进行了改进, 限定节点的度数大于1, 以此来避免当m度数为1时出现的负载为0的情况, 当节点的度数为1时, 设定gimj的值为0.5, 目的是在保证每个节点都有初始负载的前提下, 不影响节点介数的排序.从式(7) 中可以看出, 当τ≠1时, 节点的初始负载与节点介数呈非线性关系.

    节点的初始负载是在网络不断的演化过程中形成的, 因此, 在确定节点的容量时, 可采用按需分配的原则, 使得节点的容量与节点初始负载成正比的关系, 因此可得:

    $

    {{C}_{m}}=(1+\beta )Loa{{d}_{m}}(0)

    $

    (8)

    其中, β≥0, 为容忍系数, 用来衡量节点处理额外负载的能力.β的值越大, 说明网络处理额外负载的能力越强, 越能够抵抗级联失效, 但同时, 网络的实际成本也越大, 在网络的初始容量固定的情况下, β的值越小, 网络不发生级联失效的概率越大.

    当网络中的m节点失效后, m的负载不会凭空消失, 而是分配给网络中存在的完好节点, 考虑到节点只能通过邻居节点进行传输, 该节点失效后, 其邻居节点受到的影响最大.因此, 假设m的负载会按照某种规则分配给m的邻居节点, 更新了邻居节点的负载.负载分配比例与邻居节点的容量有关, 容量大的节点将获得较大的分配比例, 由此, m的邻居节点j分配到的负载比例为

    $

    Loa{{d}_{j}}({{C}_{j}})=\frac{{{C}_{j}}}{\sum\limits_{k\in {{M}_{m}}}{{{C}_{k}}}}

    $

    (9)

    由上式可得邻居节点j分配到的负载ΔLoadj为

    $

    \Delta Loa{{d}_{j}}=Loa{{d}_{j}}({{C}_{j}})\cdot Loa{{d}_{m}}

    $

    (10)

    以上完成了一次失效节点的负载重分配过程, 当更新后的节点j的负载超出其容量时, 导致j失效, 触发新一轮的负载重分配过程, 该过程可能会引发更多的节点失效, 使得网络出现级联失效现象, 直到网络中不再出现负载过载的现象为止.假设网络中的总节点数为N, 每一轮有一个节点i失效, 级联失效过程后存活的节点总数为CNi, 则利用CF来衡量网络的鲁棒性, CF的表达式[如下所示:

    $

    CF=\frac{\sum\limits_{i=1}^{N}{C{{N}_{i}}}}{N(N-1)}

    $

    (11)

    从式中可以看出, CF的值越大, 表示网络的鲁棒性越强, 越能够抵抗网络的级联失效现象, 能够简明、直观地反映网络的性能, 便于后续对级联失效的演化分析.

    2.2 算法的时间复杂度分析

    网络中有N个节点, 在最坏情况下进行时间复杂度分析.首先分析介数的时间复杂度, 需要每个节点寻找与其他节点间的最短路径, 采用Dijkstra算法的时间复杂度为O(N2), 节点度和节点权重的时间复杂度为O(1), 邻居节点权重和的时间复杂度为O(N).节点负载由介数、节点度、节点权重和邻居节点权重和构成, 计算的时间复杂度为O(N2+N), 节点容量与节点负载成比例关系, 时间复杂度也为O(N2+N), 当负载进行重分配时, 需要计算节点邻居节点的容量和, 最坏情况下的时间复杂度为O(N).因此, 节点进行负载重分配所需要的时间复杂度为O(N2+N+N), 最终为O(N2).

    3 级联失效模型解析

    基于上述给出的节点初始负载和容量的表达式以及节点失效后的负载重分配规则, 对级联失效进行深层次的理论分析, 解析出各个参数之间的变化关系.

    当节点m失效后, m的负载会分配到其邻居节点j, 节点j出现了一次负载更新, 要保证j不出现失效现象则需要满足以下条件:

    $

    Loa{{d}_{j}}+\Delta Loa{{d}_{j}}\le {{C}_{j}}

    $

    (12)

    将公式(6)、公式(8)~公式(10) 代入式(12) 中, 可得:

    $

    Loa{{d}_{j}}+\frac{{{\left( {{B}_{j}}{{k}_{j}}{{w}_{j}}\sum\limits_{{j}'\in {{M}_{j}}}{{{w}_{{{j}'}}}} \right)}^{\tau }}}{\sum\limits_{k\in {{M}_{m}}}{{{\left( {{B}_{k}}{{k}_{k}}{{w}_{k}}\sum\limits_{{k}'\in {{M}_{j}}}{{{w}_{{{k}'}}}} \right)}^{\tau }}}}Loa{{d}_{m}}\le (1+\beta )(1+\alpha ){{\left( {{B}_{j}}{{k}_{j}}{{w}_{j}}\sum\limits_{{j}'\in {{M}_{j}}}{{{w}_{{{j}'}}}} \right)}^{\tau }}

    $

    (13)

    由于在实际环境中, 节点的负载是只增不减的, 因此, 所有节点的负载都不会低于它们的初始负载, 即

    $

    Loa{{d}_{m}}\ge Loa{{d}_{m}}(0)=(1+\alpha ){{\left( {{B}_{m}}{{k}_{m}}{{w}_{m}}\sum\limits_{{m}'\in {{M}_{m}}}{{{w}_{{{m}'}}}} \right)}^{\tau }}

    $

    (14)

    $

    Loa{{d}_{j}}\ge Loa{{d}_{j}}(0)=(1+\alpha ){{\left( {{B}_{j}}{{k}_{j}}{{w}_{j}}\sum\limits_{{j}'\in {{M}_{j}}}{{{w}_{{{j}'}}}} \right)}^{\tau }}

    $

    (15)

    将式(14) 和式(15) 代入到式(13) 中, 并化简可得:

    $

    \frac{{{\left( {{B}_{m}}{{k}_{m}}{{w}_{m}}\sum\limits_{{m}'\in {{M}_{m}}}{{{w}_{{{m}'}}}} \right)}^{\tau }}}{\sum\limits_{k\in {{M}_{m}}}{{{\left( {{B}_{k}}{{k}_{k}}{{w}_{k}}\sum\limits_{{k}'\in {{M}_{j}}}{{{w}_{{{k}'}}}} \right)}^{\tau }}}}\le \beta

    $

    (16)

    在无标度网络中, 研究已得节点度与介数分别服从幂率分布$ p(k)\sim {{k}^{-\gamma }}$和$ p(B)\sim {{B}^{-\delta }}, $若经过k的最短路径数Bk与k的扩展关系满足$ {{B}_{k}}\sim {{k}^{\eta }}, $则研究推导可得$ \eta =\frac{\gamma -1}{\delta -1}$, 即节点度与介数存在关系$ B\sim {{k}^{(\gamma -1)/(\delta -1)}}$

    $

    \frac{{{\left( k_{m}^{(\gamma -1)/(\delta -1)+1}{{w}_{m}}\sum\limits_{{m}'\in {{M}_{m}}}{{{w}_{{{m}'}}}} \right)}^{\tau }}}{\sum\limits_{k\in {{M}_{m}}}{{{\left( k_{k}^{(\gamma -1)/(\delta -1)+1}{{w}_{k}}\sum\limits_{{k}'\in {{M}_{j}}}{{{w}_{{{k}'}}}} \right)}^{\tau }}}}\le \beta

    $

    (17)

    通过复杂网络理论[, 依据贝叶斯公式可得:

    $

    \sum\limits_{n\in {{M}_{i}}}{{{w}_{n}}}=\sum\limits_{v=1}^{N}{{{w}_{i}}p({{{{w}'}}_{v}}|{{w}_{i}}){{{{w}'}}_{v}}}

    $

    (18)

    其中, p(w'v|wi)表示某权值为wi的节点的邻居节点权值为w'v的条件概率, 由于无标度网络及其衍生出的网络是度度无关的, 因此可得:

    $

    p({{{w}'}_{v}}|{{w}_{i}})=\frac{{{{{w}'}}_{v}}p({{{{w}'}}_{v}})}{\langle w\rangle }

    $

    (19)

    将式(19) 带入到式(18) 中可得:

    $

    \sum\limits_{n\in {{M}_{i}}}{{{w}_{n}}}={{w}_{i}}\sum\limits_{v=1}^{N}{\frac{{{{{w}'}}_{v}}^{2}p({{{{w}'}}_{v}})}{\langle w\rangle }}=\frac{{{w}_{i}}\langle {{w}^{2}}\rangle }{\langle w\rangle }

    $

    (20)

    因此, 式(17) 可以表达为

    $

    \frac{k_{m}^{\tau (\gamma -1)/(\delta -1)+\tau }w_{m}^{\tau +1}{{\left( \frac{\langle {{w}^{2}}\rangle }{\langle w\rangle } \right)}^{\tau }}}{\sum\limits_{k\in {{M}_{m}}}{\left( k_{k}^{\tau (\gamma -1)/(\delta -1)+\tau }w_{k}^{\tau +1}{{\left( \frac{\langle {{w}^{2}}\rangle }{\langle w\rangle } \right)}^{\tau }} \right)}}=\frac{k_{m}^{\tau (\gamma -1)/(\delta -1)+\tau }w_{m}^{\tau +1}}{\sum\limits_{k\in {{M}_{m}}}{\left( k_{k}^{\tau (\gamma -1)/(\delta -1)+\tau }w_{k}^{\tau +1} \right)}}\le \beta

    $

    (21)

    将上式化简为以下形式:

    $

    \frac{k_{m}^{\tau (\gamma -1)/(\delta -1)+\tau }w_{m}^{\tau +1}}{\sum\limits_{k\in {{M}_{m}}}{{{\left( k_{k}^{\frac{\tau (\gamma -1)/(\delta -1)+\tau }{\tau +1}} \right)}^{\tau +1}}w_{k}^{\tau +1}}}\le \beta

    $

    (22)

    设$ A=\frac{\tau (\gamma -1)/(\delta -1)+\tau }{\tau +1}$, 由于

    $

    \sum\limits_{k \in {M_m}} {(k_k^A{w_j})} = k_m^A\sum\limits_{v = 1}^N {p\left( {\mathit{k'}_\mathit{v}^\mathit{A}{{\mathit{w'}}_\mathit{v}}\mathit{|k}_\mathit{m}^\mathit{A}{\mathit{w}_\mathit{m}}} \right)} \mathit{k'}_\mathit{v}^\mathit{A}{\mathit{w'}_\mathit{v}}

    $

    (23)

    由于无标度网络是度度无关的网络, 因此,

    $

    p\left( {\mathit{k'}_\mathit{v}^\mathit{A}{{\mathit{w'}}_\mathit{v}}\mathit{|k}_\mathit{m}^\mathit{A}{\mathit{w}_\mathit{m}}} \right)= \frac{{\mathit{k'}_\mathit{v}^\mathit{A}{{\mathit{w'}}_\mathit{v}}\mathit{p}(\mathit{k'}_\mathit{v}^\mathit{A}{{\mathit{w'}}_\mathit{v}})}}{{\left\langle {{k^A}w} \right\rangle }}

    $

    (24)

    由上可得:

    $

    \sum\limits_{\mathit{k}\in {{\mathit{M}}_{\mathit{m}}}}{(\mathit{k}_{\mathit{k}}^{\mathit{A}}{{\mathit{w}}_{\mathit{k}}})}=\mathit{k}_{\mathit{m}}^{\mathit{A}}\sum\limits_{\mathit{v}=1}^{\mathit{N}}{{\mathit{{k}'}_{\mathit{v}}^{\mathit{A}}{{{\mathit{{w}'}}}_{\mathit{v}}}\mathit{p}(\mathit{{k}'}_{\mathit{v}}^{\mathit{A}}{{{\mathit{{w}'}}}_{v}})\mathit{{k}'}_{\mathit{v}}^{\mathit{A}}{{{\mathit{{w}'}}}_{v}}}/{\langle {{\mathit{k}}^{\mathit{A}}}\mathit{w}\rangle }\;}={\mathit{k}_{\mathit{m}}^{\mathit{A}}\langle {{(\mathit{k}_{\mathit{v}}^{\mathit{A}})}^{2}}\rangle \langle {{\mathit{w}}^{2}}\rangle }/{(\langle {{\mathit{k}}^{A}}\rangle \langle \mathit{w}\rangle )}\;

    $

    (25)

    进一步可得:

    $

    \sum\limits_{k\in {{M}_{m}}}{{{(k_{k}^{A}{{w}_{k}})}^{\tau +1}}}\, ={k_{m}^{A}\langle {{({{k}^{A}}w)}^{\tau +2}}\rangle }/{\langle {{k}^{A}}w\rangle }\;={k_{m}^{A}\langle {{({{k}^{A}})}^{\tau +2}}\rangle \langle {{w}^{\tau +2}}\rangle }/{(\langle {{k}^{A}}\rangle \langle w\rangle )}\;

    $

    (26)

    将式(26) 代入到式(22) 中, 化简可得:

    $

    \frac{k_{m}^{A\tau }w_{m}^{\tau +1}\langle {{k}^{A}}\rangle \langle w\rangle }{\langle {{k}^{A(\tau +2)}}\rangle \langle {{w}^{\tau +2}}\rangle }\le \beta

    $

    (27)

    由于β的值涉及到实际的成本问题, 因此, β的值越小越好.此外, 在加权网的形成过程中, 节点度k和w的初始值都为1, 并在网络的演化过程中只会增加不会减少, 因此, 式(27) 中的km和wm的最小值kmin和wmin为1.由此, 可以简化公式, 并得到了β的最小值.

    在加权无标度网络中, 已经证实节点度和权重的分布幂率是相同的.因此, 分布函数可表示为p(s)=cs-α, 通常情况下, 2<α<3, 则根据概率统计理论得出$ {{s}_{\max }}\approx {{s}_{\min }}{{N}^{\frac{1}{\alpha -1}}}$, 由此可得:

    $

    \langle s\rangle =\frac{c}{-\alpha +2}\left[{{s}^{-\alpha +2}} \right]_{{{s}_{\min }}}^{{{s}_{\max }}}=\frac{c}{-\alpha +2}s_{\min }^{-\alpha +2}\left( {{N}^{-\frac{\alpha -2}{\alpha -1}}}-1 \right)

    $

    (28)

    $

    \langle {{s}^{n}}\rangle =\frac{c}{n-\alpha +1}\left[{{s}^{n-\alpha +1}} \right]_{{{s}_{\min }}}^{{{s}_{\max }}}=\frac{c}{n-\alpha +1}s_{\min }^{n-\alpha +1}\left( {{N}^{\frac{n-\alpha +1}{\alpha -1}}}-1 \right)

    $

    (29)

    其中, 0<n<α-1, 并把kmin和wmin代入到式(27) 中可得:

    $

    \beta \ge \frac{k_{\min }^{A\tau }w_{\min }^{\tau +1}\langle {{k}^{A}}\rangle \langle w\rangle }{\langle {{k}^{A(\tau +2)}}\rangle \langle {{w}^{\tau +2}}\rangle }\, =k_{\min }^{-A}\frac{(A(\tau +2)-\gamma +1)(\tau -{{\gamma }^{w}}+3)}{(A-\gamma +1)(-{{\gamma }^{w}}+2)}\times \frac{{{N}^{\frac{A-\gamma +1}{\gamma -1}}}-1}{{{N}^{\frac{A(\tau +2)-\gamma +1}{\gamma -1}}}-1}\times \frac{{{N}^{\frac{-{{\gamma }^{w}}+2}{{{\gamma }^{w}}-1}}}-1}{{{N}^{\frac{\tau -{{\gamma }^{w}}+3}{{{\gamma }^{w}}-1}}}-1}

    $

    (30)

    其中, γ和γw分别为节点度和权重分布的幂率指数, 且2<γ<3, 2<γw<3, 当N很大时, 上式可化简为

    $

    \beta \ge k_{\min }^{-A}\frac{(A(\tau +2)-\gamma +1)(\tau -{{\gamma }^{w}}+3)}{(A-\gamma +1)(-{{\gamma }^{w}}+2)}

    $

    (31)

    由τ、γ和γw的取值范围可得-γw+2<0且τ-γw+3>0, 因此, 为了满足β≥0, 可推出不等式:

    $

    \left\{ \begin{align}

    &A(\tau +2)-\gamma +1\ge 0 \\

    &A-\gamma +1<0 \\

    \end{align} \right.

    $

    (32)

    将A的值代入上式得到:

    $

    \left\{ \begin{align}

    &\tau \ge \frac{(\gamma \delta -3\gamma -3\delta +5)+\sqrt{{{(3\gamma +3\delta -\gamma \delta -5)}^{2}}+4(\gamma +\delta -2)(\gamma -1)(\delta -1)}}{2(\gamma +\delta -2)} \\

    &\tau

    \end{align} \right.

    $

    (33)

    当γ取值在(2, 3) 之间时, 由相关研究已知δ的值为2.2[, 当γ取值为2时, τ的取值范围近似为(0.76, 1.21);当γ取值为3时, τ的取值范围近似为[0.44, 3], 合并得到τ的取值范围在[0.44, 3]内.

    将A代入式(31) 中, 得到β的最终表达式为

    $

    \beta \ge k_{\min }^{-\frac{\tau (\gamma +\delta -2)}{(\delta -1)(\tau +1)}}\frac{(\tau (\gamma +\delta -2)(\tau +2)-(\gamma -1)(\delta -1)(\tau +1))(\tau -{{\gamma }^{w}}+3)}{(\tau (\gamma +\delta -2)-(\gamma -1)(\delta -1)(\tau +1))(-{{\gamma }^{w}}+2)}

    $

    (34)

    式(34) 给出容量参数β关于最小度数kmin、度分布幂率指数γ、权值分布幂率指数γw和初始负载参数τ的关系, 通过设置部分变量的值, 可以分析其余变量与β的变化关系, 进而分析β与对抗级联失效和增强网络鲁棒性的关系.

    4 实验分析

    为了更好地反映本文提出的基于加权无标度网络的级联失效模型中参数之间的变化关系, 本节将使用MATLAB工具, 在BBV模型的基础上, 构建一个容量有限的加权无标度拓扑, 并在该拓扑中对网络中初始负载参数、度分布幂率指数、权重分布幂率指数与容量参数的变化规律进行仿真.此外, 还将容量参数对网络鲁棒性的影响进行仿真分析.

    4.1 级联失效参数分析

    首先给出加权无标度网的拓扑实例以及对数坐标下节点度和权重的分布图, 如[.在监测区域内随机布撒了200个节点, 新加入的节点连接到网络中两个不同的节点.从

    图 3

    Fig. 3

    7a43151b7449e42712c3bc2f932e0e80.png

    Fig. 3 The weighted scale-free topology

    图 3 加权无标度拓扑图

    图 4

    Fig. 4

    b09b1694b217089c4db95e86de9a80d6.png

    Fig. 4 The degree and weight distribution

    图 4 度分布和权重分布图

    β与度分布指数和权重分布指数的变化规律.

    图 5

    Fig. 5

    ff6e15bb6ff193b2b94792c1b1751749.png

    Fig. 5 The surface of threshold β with the degree distribution scale γ and weight distribution scale γw under the condition of different τ

    图 5 不同τ值下的β与γ和γw的关系曲面图

    在δ=2.2, 最小度kmin=1, 度分布指数γ和权重分布指数γw在2~3范围内, τ为0.8、1、1.2情况下, γ和γw与β的变化关系.从图中可以看出, γ和γw的值越小, β的值越大, 表明幂率指数越小, 则网络的鲁棒性越差, 因此, 需要增大节点的容量, 即增大β值, 以抵抗级联失效现象, 这是由于, 幂率指数越低, 网络越不均匀, 当攻击网络中度数大的节点时会使网络迅速瘫痪.此外, 从图中还可以看出, 随着τ的增大, β也会增大, 这是由于容量与初始负载是成比例的关系, 而τ用来控制初始负载的强度, 所以, τ增大时, 即初始负载增大, β自然会增大.

    kmin与容量参数β的变化关系.

    图 6

    Fig. 6

    bcd941efb3e305f0986cdfdf70f6dc7f.png

    Fig. 6 The surface of threshold β with the degree distribution scale γ and weight distribution scale γw under the condition of different kmin

    图 6 不同kmin值下的β与γ和γw的关系曲面图

    在δ=2.2, 当τ=1时, γ和γw的值在2~3内, kmin为2、5、10情况下, γ和γw与β的变化关系.从图中可以看出, kmin的值越大, β的值越小, kmin与β是负相关的, 这是由于无标度网络中的最小度值通常与新节点加入网络时所连的边数m相关, m越大, 则kmin越大, 而网络的平均度为2m.因此, kmin越大, 表示网络的平均度越大, 网络越稳定, 则需要的β值越小, 这与已有的相关研究成果相吻合.

    4.2 鲁棒性分析

    为了分析参数β对网络鲁棒性CF的影响, 将采用最大负载攻击方式, 移除网络中的节点, 进而分析该攻击方式下β与CF的变化规律, 如

    图 7

    Fig. 7

    28e7142b105a275595e39b60a876828d.png

    Fig. 7 The CF-β curves

    图 7 β值与网络鲁棒性CF的关系图

    其中, kmin=2, γ和γw的取值为3.从τ的值越大, 网络的鲁棒性越差, 需要增大β的值来提高网络的鲁棒性.在τ的取值分别为0.8、1和1.2时, 网络鲁棒性达到1时对应的β值分别为0.35、1.2和1.95, 与理论得出的值0.35、1.19和1.93非常接近, 证明了理论的准确性和有效性.

    为证实所提方法能够使无标度网络达到更强的抵制级联失效的鲁棒性, 在kmin=2, τ=1, γ和γw的取值为3的条件下, 将本文的方法分别与只以节点度定义的初始负载模型(文献[

    图 8

    Fig. 8

    5fd4fca432d4fb716b5b010e2eebb5d2.png

    Fig. 8 The CF-β curves under different strategies

    图 8 不同策略下网络鲁棒性CF与β值的关系图

    从β=1.2, 文献[β=1.4, 文献[β=1.5, 本文所提方法在网络达到最强鲁棒性时需要的β值最小, 说明此策略下的网络更难发生级联失效, 同时也证明了节点初始负载定义的准确度更高.文献[

    4.3 抵抗级联失效能力对比分析

    为了分析所提方法抵抗级联失效的能力, 将本文提出的方法分别与文献[kmin=2, 并取α=0, τ=1, 网络度分布和权重分布的幂率指数γ和γw为3.对比结果如

    图 9

    Fig. 9

    e7c433c2cf808d3bb878bbcb6d6704ee.png

    Fig. 9 Comparison of the resistance for cascading failure

    图 9 抵抗级联失效能力对比图

    负载定义越准确, 移除最大负载的攻击方式使得网络出现的级联失效节点越多, 鲁棒性CF值越低.从

    5 结束语

    本文在加权无标度网络的基础上, 从全局和局域的角度提出了一种参数可调的级联失效模型, 建立了节点介数、度数和权重与初始负载的关系, 进而给出容量与初始负载的关系, 依据网络不出现级联失效的条件推导出负载参数与容量参数的关系, 并通过给出的鲁棒性表达式作为衡量指标, 对模型进行仿真分析, 实验结果表明, 该模型准确地分析了级联失效的各参数之间的变化关系以及参数的取值范围, 并在此基础上, 增强了网络的鲁棒性, 延长了网络的寿命.下一步研究的重点为降低节点负载重分配的时间复杂度, 并依据实际需求分析被分配节点的动态负载, 使负载重分配更加合理.

    展开全文
  • Matlab级联失效代码MATCASC MATCASC 是一种基于 MATLAB 的开源工具,用于分析电网中的级联故障。 作为起点,您可以使用: SimCascFailures.m是模拟级联线路重载的文件。 QuantifyDamageByCascades.m是模拟和量化级联...
  • Matlab级联失效代码电网中的级联故障 传播和漏洞分析 SmartData@PoliTO 博士课程的项目工作。 内容 Report.pdf是一份描述问题、讨论分析和结果的报告。 Simulation.m是 MATLAB 脚本,它使用 MATPOWER(一种免费的...
  • 级联失效综述PPT

    2011-12-27 18:58:36
    摘自复杂网络理论与应用 做的一个综述的ppt
  • 级联失效对物流网络的安全运作具有重要影响。基于节点领域信息构建相应的级联失效模型, 分析研究物流网络的级联失效问题。数值仿真结果表明:较低的安全负载能力配置可很大程度上抵御级联失效的破坏; 重要度越大的...
  • 项目里的一个表级联突然就不生效了,注意 是 突然 实体类如下:省略掉了该省略的.. public class ApplyForm { private Map&lt;String, String&gt; extValue; } 下面是映射文件: &lt;class name=...

    项目里的一个表级联突然就不生效了,注意 是 突然

    实体类如下:省略掉了该省略的..

    public class ApplyForm {
    	private Map<String, String> extValue;
    }

    下面是映射文件:

    <class name="ApplyForm" table="sv_apply_form">
    	<map name="extValue" table="sv_apply_form_ext_value" cascade="all-delete-orphan">
    		<key column="apply_form_id" not-null="true"/>
    		<map-key column="field_uuid" type="string" length="64"/>
    		<element column="field_value" type="text"/>
    	</map>
    </class>

     怎么看都没问题,而且之前用的好好的,于是就看数据库外键,发现问题

    将更新和删除属性设置为"cascade",OK问题解决!

     

    记录防忘!

     

     

    展开全文
  • 为探索体系作战信息流转级联失效的特点规律,抽象了作战信息流转的层级网络结构,建立了基于任务约束的级联失效模型。提出由物理层和逻辑层组成的信息流转分层网络结构,分析了网络层间的级联失效影响关系;引入任务...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,721
精华内容 3,888
关键字:

级联失效