1、引言
通过日常生活的经验,我们知道,真实世界中大部分我们所接触的系统并不是物理学常常研究的线性系统,而是复杂系统,在一个复杂系统内部包含了很多存在相互作用的元素,元素之间可能遵循非常简单的互动法则,但是系统在宏观层面上却可能展现出各种各样的现象。来看下面的几个例子:
上图中的四个系统分别是:
(a).上海地铁线路图;
(b).2014年自然杂志所报道的实验室小白鼠的大脑网络结构;
(c).2012年美军在阿富汗的军事行动部署规划图;
(d). 人类疾病作用系统;
这些系统的背景各不相同,如何在过分简化系统的情况下研究它们的宏观性质和微观机制呢?有一种建模方法可以做到,它叫做“复杂网络(complex networks)”。
建模方法非常简单,我们将系统中的每个元素看做是一个个的节点(node),将这些元素之间的互动关系看做是连边(link),便可以将系统抽象成网络来进行研究。比如将(a)中的地铁站看作是节点,地铁站之间的隧道看做是连边,就构成了上海地铁网络结构;将(b)图中小白鼠的神经元看作是节点,把神经元之间的(树突和轴突)连接看作是连边,就构成了小白鼠大脑神经元网络结构。
通过上述的抽象方式抽象得到的复杂网络,脱离了其真实的背景,转化成了物理学(或者数学)的研究对象。目前,针对复杂网络的研究已经演变成了一门科学,且和在多个领域展现出了应用的价值。
考虑到复杂网络内部元素的复杂性和“数据驱动”的特性,因此在对其进行研究时往往需要借助计算机的力量。在本系列教程中,我将首先向大家简单介绍复杂网络的基本概念和基础的数学描述,然后向大家展示基本的网络数据格式、以及如何用来初步操纵网络数据,并对其进行可视化。
2、网络的描述方式
2.1、网络的规模和连边
我们用“规模”来表示一个网络的具体节点数量,不同网络的节点数不同,因此网络规模也是天差地别的,例如在一个家庭中,如果将每个个体当做是节点,那么家庭网络的规模为;整个人类社会网络,截止目前,规模达到亿;而我们人类的大脑神经元网络规模可以达到亿!如此之大的差异直接导致其在宏观层面上展示出显著不同的特性。为了能够区分网络中具体的节点,有时我们会给每个节点一个编号。
此外,我们还会用来表示网络中的连边数量,连边可能是单向的,也可能是双向的,这取决于具体的网络结构,可参见图2。
图2中(a)(b)两个网络的规模是一致的(),但是(a)图的连边不具有方向,(b)图的部分连边具有方向,我们称它们分别为无向网络和有向网络。一般认为无向边等价于具有两个方向的有向边。
2.2 网络的数学表达
通常而言,我们不给连边制定编号,而是用其两端的节点来指明,比如(a)图中1号与2号节点之间存在一条连边,我们就用来表示这种连边关系,类似的还能找到其他连边,如等。对于有向网络,需要规定数字的方向,比如特指从1号指向2号节点的连边,是从4号指向1号的连边。这种标记关系不仅繁琐,而且不清楚。如果网络中出现孤立的节点,光靠连边关系是无法断定网络的规模的。实践中一般采用下面的描述方式。
我们注意到网络中对象不止一个,而且对象和对象之间还存在着相互作用,这不禁让我们想到,是否可以使用矩阵来描述一个系统?答案是可以的。
定义一个,代表号节点和号节点之间存在着一条有向的连边,且从指向(请注意这里的方向),表示这两个节点之间无连边关系;很明显,双向网络的邻接矩阵必然是一个对称的矩阵(),有向网络的邻接矩阵必然是一个非对称的矩阵()。以图2为例,我们给出其分别对应的邻接矩阵:
邻接矩阵一目了然,它很直观的给出了网络的规模和连边关系,不仅如此,它还包含的网络的其他许多信息,从邻接矩阵出发,还能得到网络的很多其他重要的参量,我们这里举一个例子。
2.3、网络的度
网络节点的代表和当前节点连接的连边数量,在图2(a)中,1号节点和其他所有的节点都有连接,因此其度;2号节点和1号、3号直接连接,因此其度为,在有向网络的情形下,网络中节点可能同时存在其他节点指向它的连边和它指向其他节点的连边,因为这种区别,我们将度的定义扩展,分别定义节点的入度(in degree)和出度(out degree)。顾名思义,入度就是指向当前节点的连边,出度则相反。在图2(b)中,1号节点仍然和其他数个节点相互连接,但此时其入度,出度。
计算节点的度,除了上述的数数方法外,还能直接从邻接矩阵得到,对于无向网络而言,将矩阵沿着行或者列求和就是节点的度,即:
而对于有向网络网络而言,入度和出度的计算公式为:
换句话说,入度等于矩阵沿着列求和、出度等于矩阵沿着行求和,这里有点绕,读者可以参照图2好好揣摩一下不同情形的下标。