1. 引言
超图作为一般图的推广,将点集合视为超边的结构特点使其在网络中的应用可以有效反应多层次的节点关系并得到广泛研究 [1] [2] [3]。特别是有向超图涉及多个学科领域,如人工智能 [4] [5]、数据库 [6]、运筹学 [7] [8] 等。同时,在许多现实问题中,不同时刻下的运输成本或运输量、信息的传输过程,都会有所不同,会随时间发生连续变化,因此,研究动态超图中的路由设计是亟待解决的问题之一。在动态网络中,通信网络节点或链路在信息传输时因受到干扰或攻击发生故障,会对网络功能产生影响,为了提高网络容错性,在主功能路径的基础上设计备份路径来传输信息是有效的解决方案。因此,在动态超网络背景下设计动态不交路是重要的研究课题。
超图中B-路具有很好的结构性质和应用背景。早在1989年,学者Italiano和Nanni [9] 证明了在超图中的最短B-路问题是NP-难问题。到1993年,Gallo等学者 [10] 提出在有向超图中,当网络中的超弧满足权值函数递增且不存在负圈时最短B-路问题是可以多项式时间内解决的,并给出最短B-树算法。但现实网络中往往会存在故障风险,为保证服务连续性,最常见的解决方案是设计备份路径,保证网络的容错性。
为了提高网络的容错性能,已经有不少学者研究了一般图中静态不交路的问题。早在1974年,Suurballe [11] 利用最短路径的标记方法给出了在静态网络中查找k条min-sum内部节点不相交路由算法。在1984年,Suurballe等人 [12] 又提出在静态网络中查找两条min-sum边不相交路由算法。之后很多研究者先后研究了不交路minsum-minmin [13] [14]、minsum-minmax [15] 等优化问题。虽然关于静态网络中不交路问题的研究已经很成熟,但动态超网络中的相关研究还很少。
目前,由于动态网络结构的复杂性,大量文献的研究成果都采用了时间离散化的方法,将时变赋权函数(延迟,容量,能耗等)的时间范围进行离散化,把时变网络上的动态问题简化为静态问题。由此对问题进行简化并得到近似解 [16] [17],但近似度的提高需要以时间细化程度为代价,增加了运算时间的复杂性。因此为了设计有效算法并获得最优解,一些学者对连续时间动态网络问题进行了研究。比如,在解决与时间相关的最短路径(TDSP)问题上,Ding [18] 等人在先进先出(FIFO)连续时变网络中寻找TDSP问题的最优解,并提出时间复杂度为
的有效算法,在给定时间区间
内
个子时间段中均得到了最优路径。Wang等人 [19] 采用了一种层次图划分的方法解决TDSP问题,并给出时间复杂度为
的算法,其中
是图划分得到的最小子图的个数。由于超图结构关系较复杂,在超图背景下与动态路径设计的相关文献还很缺乏。本文在一般超图
,
相关工作的基础上研究动态超图中的限制不交B-路问题,即在动态网络中,当时间范围是
且在某一固定时刻出发时从源点到汇点的两条内部不交B-路。本文主要在于保证网络中两条路径的节点和超弧均是动态不交的,并且均在
内可以到达目标节点。
本文结构如下:第二节阐述了超图和动态超图中的基本概念;第三节分为两部分,第一部分提出在连续时间动态超网络中找一条
时间范围内的限制动态B-路算法,第二部分研究动态超图网络中的限制不交B-路并给出有效算法,同时在本节中对算法进行实例说明,证明了算法的正确性并计算了时间复杂度,之后,将动态不交B-路算法推广到动态不交F-路算法;第四部分总结全文。
2. 模型建立
2.1. 超图
定义1 (超图 [10] ) 一个超图
是一个有序对,其中
表示节点集,
表示超弧集,并且对于
,有
。特别的,当
时,超图就是一般图。超图
的大小定义为超弧基数的和:
一个有向的超弧e是一个有序对,
,
和
分别为弧e的尾节点和头节点集合,
。当
时,超弧e被称为B-弧。设
为尾节点包含节点v的超弧,
,
为头节点包含节点v的超弧,
。由有向超弧组成的超图称为有向超图。下文中,为简便,将有向超图简写为超图。
定义2 (简单路P [10] ) 给定超图
,其中
,
。一条简单路P是指一个有限非空序列
,它的项交替的为节点和超弧,并且节点和超弧都互不相同。其中源点
,目标节点
,且
,
。
接下来,给出B-路的定义。
定义3 (B-路 [10] ) 给定超图
,源点和目标节点分别为
和
。B-路
是一个极小的超图
且满足以下条件:
1)
;
2)
,其中
;
3) 对任一点
,
与源点
是连通的,也就是说,可以找到从
出发到达
有一条有向无环路。
在有了B-路的定义后,实现了在复杂的超图网络中找一条路。接下来,我们考虑动态超图网络。
2.2. 动态超图网络
定义4 (连续时间动态超图网络) 一个连续时间动态超图网络是一个有向超图
,定义如下:
1)
为图
的节点集,
。
2)
为图
的超弧集,对任一条有向超弧
,
和
分别为弧e的尾节点和头节点集合,
。并且超弧
,
。
3) T是本文考虑时间范围的上界。
4)
,其
表示超弧e的连续延迟函数,t为超弧e的出发时间。对所有的
,
。
5)
分别是源节点和目标节点。另外
不是任意一条超弧的头节点(尾节点)。
假设网络的拓扑结构和弧上的权值函数已确定。设
为尾节点集中包含节点v的超弧,
,
为头节点集中包含节点v的超弧,
。本文中,每一个节点
的到达时间用
表示。特别的,由于每条超弧e的尾节点数
,所以规定超弧e的出发时间t等于超弧尾节点
的最晚到达时间,故设每条超弧的出发时间t满足
,
为节点
的到达时间。
在实际超图网络中,每条超弧
对应的延迟函数
是非负递增函数 [10]。对于任意两个节点
,
,从节点u到v存在一条有向超弧e当且仅当
中有元素
。
定义5 (节点时间对) 节点时间对
指的是在路径P上,到达节点
的时刻为
,其中
。
定义6 (动态B-路) 给定一个连续时间动态超图网络
,源节点为
,目标节点为
。设
是动态B-路的节点集,
是动态B-路的有向超弧集,动态B-路是一个极小的动态超图
。一条动态B-路
指的是当出发时间为t时,从源点
到目标节点
的一条超路,满足:
1)
。
2)
,其中
,
。
3) 对
,可以找到从源点
到
的一条有向无环路。
4) 经过每条超弧e的出发时间
等于尾节点
的最大到达时间,
,即经过一条超弧的必要条件是在该超弧所有尾节点都到达的情况下才能出发。
在给出以上定义后,现在我们定义当出发时间为t时,在动态B-路
上从节点
到达节点
的旅行时间函数
:
的值表示从超弧
到超弧
的旅行时间加上超弧
的延迟。
从上述定义可知,B-路的到达时间为
。一条动态限制B-路是指一条动态B-路在时间范围
内可以到达目标节点
,即满足
。接下来给出在连续时间动态超图网络中限制不交B-路的定义。
定义7 (动态限制k不交B-路) 给定一个连续时间动态超图网络
,节点
分别为源节点和目标节点,出发时间为t,设
分别为第i条B-路的节点集和超弧集。动态限制k不交B-路是在时间范围
内寻找k条B-路
,满足
,
。
针对动态B-路的设计,提出的优化问题如下:
问题1 给定一个连续时间动态超图网络
,源点为
,目标节点为
,
为超弧的连续时间延迟函数,出发时间为
。在时间范围
内,找一条动态限制B-路
。
问题2 给定一个连续时间动态超图网络
,源点为
,目标节点为
,出发时间为
。在时间范围
内,找两条动态限制不交B-路
,
。
本文中,假设动态超图网络
满足FIFO性质,即对任意边e及边e的出发时间
,如果
,有
。并且假设动态超图网络
中是不存在负圈的。
3. 算法设计
在静态网络中,找不交路最初的方法是先找一条路,然后将这条路经过的节点和弧全部删去,再找另外一条路。但会存在一中情况,就是当删去第一条路之后,会影响到第二条路的构建,而原网络中是存在两条不交路的。这时就出现了“陷阱”问题。针对这种情况,有效的解决办法是在给定一条路的基础上去构造两条不交路 [11],而不是直接删除该条路。这样,算法可以同时找到两条不交路,而且解决了所谓的“陷阱”问题。在给定连续时间
内,考虑时变的延迟函数,我们结合这种方法在连续动态超图网络中找两条动态限制不交B-路。
3.1. 动态限制B-路算法
在解决找两条动态限制不交B-路问题之前,首先需要在动态超图网络中找到一条动态限制B-路
,其中,
为B-路的节点集,
为B-路的超弧集,
为出发时间。结合B-树的构造方法 [10],接下来,我们给出动态限制B-路算法的求解过程。
给定一个动态超图网络
,集合Q中包含算法每次迭代需要遍历的节点集,集合L中包含已经遍历过的节点集。对于超图中的每条超弧
,
为超弧
的尾节点集,设
为从集合Q删去的
中的节点数,即算法遍历过弧
的尾节点数。
在算法过程中,
表示出发时间,节点
分别为源节点和目标节点。
表示每次从集合Q中取的需要遍历的节点,当遍历的尾节点数
时,选取尾节点中到达时间最大的t作为超弧
的出发时间,
。算法第10行中,对于属于
的节点
且
,求得节点
的到达时间
,并将节点
放入集合L中,表示该节点已经被遍历过,在下次找超弧头节点时不在查找这个节点,而是继续向后查询。
在满足到达时间
的情况下,进行算法第13行,标记
以记录超路的信息。之后,判断该节点是否被遍历过(第17行),如果没有,放到集合Q中以便下一次迭代。直到查找到目标节点
时跳出循环(第14行),求出一条动态限制B-路
。
定理1 算法1的复杂度为
。
证明:算法1第5行,在Q集合中节点的个数最多有n个,第6行对于节点
出去的弧
,需要花费
的运算时间,算法第10行中探寻弧e的头节点需要花费
的运算时间,故算法1的复杂度为
。
当算法1结束后,得出一条动态限制B-路
。接下来通过这条已知的B-路来找两条动态限制不交B-路。
3.2. 动态限制不交B-路算法
本节的目标是在动态超图网络
中找两条动态限制不交的B-路。为了避免陷阱问题,本文的算法思想是在已知一条限制B-路
的基础上构造两条动态限制不交B-路
,
。
3.2.1. 准备工作
本问题面临的主要挑战是在动态超图中,算法找到的两条路
,
需要满足经过的节点时间对是动态不交的,且两条路所有超弧的经过时间段是不交的。对于一条超弧
,设
和
分别为超弧e头节点和尾节点的到达时间,即:
1) 对任意的节点时间对
,
,有
。
2) 对任意的超弧
,
,超弧
经过的时间区间表示为
,
经过的时间区间表示为
,有
。
故为保证以上两个条件,在找路的过程中需要避开已知路
中超弧经过的时间段,我们更新动态超图网络
中超弧e的延迟函数
。
首先对已知动态限制B-路
上所有超弧的延迟函数进行更新。对所有的
,假设弧e的尾节点集
中到达时间
最小的记为a,即
。头节点集
中到达时间
最大的记为
,即
。故有:
所以,在找两条路的过程中,对于每条在路
上的超弧,更新在时间段
的延迟函数。
对于动态超图网络
中除
之外的其他超弧,他们的延迟函数保持不变。即:
,
。
这样,当我们在找两条不交路时,能避开
超弧走过的相应时间段,使找到的超弧满足动态边不交的条件。接下来给出实例说明。
例1 假设弧e为动态限制B-路
的一条超弧,弧e的尾节点集
,头节点集
,延迟函数
见图1。根据以上步骤更新弧e的延迟函数
为
,见图2。
接下来我们求延迟函数
要更新的区间
。
3.2.2. 算法设计与实现
在给出动态超图网络中求两条不交路的算法之前,我们先通过示例给出静态网络中基于一条路去找两条不交路的过程,并说明交错点的定义。
例2 如图3所示,给定图
,
,
。假设静态网络中每条弧e都有一个权值w。节点
和
是源节点和目标节点。给出一条已知超路
,其中,超路节点集为
,弧集
。那么我们可以根据以下步骤获得两条不交路
。

Figure 3. Hypergraph
图3. 超图
首先,我们可以从源节点
出发找到除
之外的边
,由于节点
,记
为交错点。因此,为构造两条不交路,需要反向找节点
和
之间的节点
。从
继续向后探查除
之外的边
。这样,就找到两条不交的路
,
。
每次探查完交错点之后,我们将该交错点标记为c用于后续路径连接。交错点的个数记为m。
接下来我们在动态超图网络
中构造不交路。
算法步骤如下:
1) 初始化。源点
的出发时间为
,将源点出发经过的不属于
的第一条超弧的头节点
放到候选点集Q中,初始化
,
为弧
的延迟函数。集合L表示算法已经考虑过的节点集,初始化
。参数m记录交错点的个数,
。c标记交错点。
2) 求已知路
。通过算法1,在动态超图网络
中求得一条动态限制B-路
,
和
分别为路
经过的节点时间对集和超弧集。
3) 运行算法2。首先,当Q不为空时,选择其中的候选点
,然后开始找点
出去的超弧
,结合B-弧的查找方法 [10],当遍历完超弧的所有尾节点后(算法第9~10行),选择到达时间最大的尾节点,并将其到达时间作为超弧
的出发时间,接着当超弧的头节点
时,求其到达时间
。判断
,当
时,说明弧
与
的弧是动态不交的,记录路信息并将头节点
放入集合L中,进行算法3判断交错点。否则,算法判断Q是否为空,如果不为空,说明可以继续重新探查下一个节点,返回算法第4步,如果为空,则说明超图中没有满足条件的路径。
4) 运行算法3。当参数m为偶数时,遍历的节点
属于路
,m为奇数时,节点
属于路
。由于遍历的节点
有两种情况,一种是属于
,一种是不属于
,需要分类讨论。
a) 当节点
不属于
时,将节点放入Q中,然后返回算法2继续查询下一条超弧。
b) 当节点
属于
时(算法3第9行),节点
是一个交错点。设
为
路上除c点和
之外的它们之间经过的节点对。从点
沿
路反向找
的节点时间对
,然后需要从节点
继续往后查询,所以令集合
,然后将
放入集合Q中,并且放入集合L中,避免找路时头节点重复探查,即算法第11~12行。
接下来,当参数m为偶数时,将交错点之间的
加入到路径
中的节点集
,即将
路上
之间的路归于
,
,m为奇数时,将交错点之间的
加入到路径
中,即将
路上
之间的路归于
,
。最后由于节点
是一个交错点,标记
为c,用于之后查找不交路的连接,并更新参数m。接着返回算法2继续向后查询超路。
在算法过程中,当探查的节点为已知路
的节点时间对时,我们需要沿着
反向寻找交错点之间的节点,然后根据寻找的节点再出发寻求下一条不属于
的超弧。算法的具体思路是在探查节点的过程中记录交错点数m,然后根据参数m的奇偶性对交错进行分类,分别对应
,
。
当算法2查询到的节点是目标节点
时,算法结束。根据算法过程得到两条动态限制不交B-路
,
。否则,算法找不到两条动态限制不交的B-路,输出无结果。接下来我们通过一个例子来更直观的理解算法。
例3 假设动态超图网络
。每条弧都有一个延迟函数
。节点
和
是源点和目标节点,出发时间
,
,时间范围
。假设通过算法1求得一条动态限制B-路
。接下来我们可以根据以下步骤获得两条动态限制不交B-路
,
。见图4。

Figure 4. Dynamic hypergraph network
图4. 动态超图网络
算法过程:根据算法2,初始状态
,其中
,路
的节点集
,路
的节点集
,标记源点
为c,交错数
。
算法2第4步,候选点集
,在集合Q中选择
,并删除
。选择
,
,满足
,故弧
的出发时间
。算法2第11行中,
并且
,所以
,
,
,
,进行算法3。
由于此时
为偶数,故将
放入
中。因为
,故进行算法3第9步。从点
沿
路反向找
的节点时间对
,由图4可知,节点时间对
满足情况,
,
。将
之间的节点
放入路
的节点集中,
标记
为c,令
。
返回算法2继续查找下一个Q中的节点。最后,我们找到了两条限制不交的B-路
,
,其节点集为
,
。超弧集为
,
。
3.2.3. 算法正确性和复杂性证明
这一节,我们给出定理2说明算法的正确性,并证明算法复杂性。
定理2 算法2输出两条动态限制不交B-路
,
当且仅当超图
中存在问题2的解。
证明:算法的目的是为了找两条动态限制不交B-路。当算法2输出
,
,说明超图
在时间范围
内可以找到两条动态限制不交B-路。首先,在3.2.1部分的准备工作中,我们更新路
上所有超弧
的延迟函数
,对路
上超弧经过的所有时间段的函数值赋值为
。这一操作是为了在找路的过程中,避开路
上所有弧的经过时间段,保证了两条路是动态边不交的。并且在算法2第14行,节点的到达时间满足条件
。对于节点时间对相交,算法提出交错的概念,在探查节点的过程中记录交错点数m,然后根据参数m的奇偶性对探查的超弧进行分类,分别对应
,
。对于每一个探查过的节点,都将其放入集合L中,保证了所找的路不存在圈。故算法所找出来的是两条动态限制不交的B-路。
另外,由于在调用算法3时,算法10~12行考虑了交错点之间所有以
上的点为尾节点出去的超弧,即算法遍历了所有满足条件的超弧。所以,当算法2输出不存在时,说明超图
在时间范围
内没有满足条件的动态限制不交B-路。否则,如果存在,在运行算法3的第10~12行更新集合Q后,算法2进行第4~16行时一定会找到满足条件的路径。
定理3 算法2的复杂度为
。
证明:候选点集Q中的元素最多有
个节点时间对,对于每一个探查过的节点,都将其放入集合L中,所以对于超弧头节点和尾节点的探查总共需要
的时间。算法3需要
的运行时间。故算法2的复杂度为
。
3.2.4. 算法的推广
本文考虑的是连续时间动态超图网络中的动态限制不交B-路,相应的我们可以获得动态不交F-路。由于F-弧满足的条件是
,所以我们在计算路的延迟时,考虑每条超弧的尾节点的到达时间为超弧的出发时间,显然到达头节点的时间都是相等的,并且在探查到交错点时,同样沿
路反向找到超弧对应的尾节点,然后从尾节点继续向后探查。可以看出,求动态限制不交F-路的算法与求动态限制不交B-路的算法类似,在这里,我们就不再给出算法。
4. 结语
结合现实中的实际问题,本文提出了一个新的网络环境,连续时间动态超图网络。动态超图网络与传统的网络模型相比应用范围更广,也更有实际意义。本文在连续时间动态超图网络中,通过对超图特殊性的分析,设计了求解动态限制不交B-路问题的算法,证明算法是在多项式时间
内可解决的。在动态超图网络中还可以进一步研究在其他领域的应用,求解不同方面的问题。
基金项目
山西省自然科学基金(202103021224058)。