如何建立复杂网络实体网络的Space L模型?

与世无争的帅哥 提交于 2020-03-10 04:44:50

复杂网络是一个非常庞大的研究领域,有众多研究方法与研究对象,社交网络、科学家网络、生物网络、交通网络、生物网络等等。在进行仿真时候,有的网络过于庞大无法用实际的数据进行仿真,例如社交网络。而有一些网络规模较小,就需要用实际的数据进行仿真了,例如交通网络。

那么无论网络规模大小,对这些网络进行研究的时候,第一步往往是建模,只有模型建好了后续的研究、仿真才好进行下去。建模后,可以对网络指标进行分析,可以分析网络的抗毁性等等。总之,建模总是第一步的。

下面我就分享一下,自己对于复杂网络中实体网络建模的一些经验,以地铁网络为例:

建模方法,一般有Space L、Space P、Space B、Space C法,比较常用的建模规则是Space L法。

地铁网络,一般都有三四百个节点,线路十几条左右,看地铁图的是一个眼花缭乱。若是人工统计出来数据也是一项大工程。看着就想放弃,但其实掌握一定的方法并没有那么的费劲。

  1. 按线路进行节点的统计,先编号,然后去除掉重合的节点
  2. 统计连接关系时有一定的规则:比如从左往右统计、从上往下统计,这样可以避免重复统计
  3. 不要直接列出邻接矩阵,先统计出连接关系生成邻接表,然后再转成邻接矩阵
  4. 关于邻接表,最好再检查一遍
  5. 以上工作最好分成数天进行,否则负荷工作效率低且出错率较高

下面给出 邻接表 转成 邻接矩阵 的Matlab函数代码:

function b  = ainc2adj( x )
%AINC2ADJ   x为邻接表(可在工作区中新建数据),输出的b为邻接矩阵
%   此函数是通过邻接表生成临接矩阵的
if min(x(:))==0;
   x=x+1;
end
 d=length(x);
 a=max(max(x));
 b=zeros(a,a);
 
for i=1:d
    if x(i,1)==x(i,2);
       b(x(i,1),x(i,2))=0;
    else
       b(x(i,1),x(i,2))=1;
        b(x(i,2),x(i,1))=1;
    end
end

一般来讲生成邻接矩阵,我们就得到了实体网络的节点连接情况。但我们都知道,人工统计的难免会有一些错漏,而这个时候需要用Gephi软件帮助我们进行进一步的检验。关于Gephi如何导入数据,可以参考这一篇文章。导入之后,你会得到一张拓扑图,如下图所示:
在这里插入图片描述

但是这样的图,我们没有办法看出网络可能存有什么问题,需要进一步的操作。
在这里插入图片描述
点击布局中的,选择一个布局。选择Force Atlas,选择运行,图会发生变化:
在这里插入图片描述
我们会发现红圈部分的点与整体网络没有任何联系,而交通网络是一个整体,那就说明这几个节点的连接关系一定都有问题。那么如何查看这几个点是哪几个点呢?点击预览,然后打开显示标签,最后点下方的刷新,就显示出来了节点标号。

然后可以用鼠标滚轮放大,调节左侧的节点编号显示的颜色,就可以大概看出来是那些节点出现问题了。然后回去对着连接图和节点编号去找就可以了
在这里插入图片描述
这个软件生成的图也是非常漂亮的,大家可以试一试,节点颜色、大小,边的颜色、大小,都可以自己调节,还有很多计算网络指标的功能。那么这次的分享就到这里,感谢大家的时间。

欢迎大家与我交流。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!