文献翻译:一个测试离散事件系统可诊断性的多项式时间算法
authors: Shengbing Jiang, Zhongdong Huang, Vigyan Chandra, and Ratnesh Kumar
原文: A polynomial algorithm for testing diagnosability of discrete-event systems
Abstract
大型复杂系统中的错误诊断是一项关键任务。在离散事件系统(DES)领域,Sampath 等人提出了一种基于语言的错误诊断方法。他们为DES引入可诊断性概念和定义,并使用根据系统构建的诊断器来测试系统的可诊断性。这种测试可诊断性的方法的复杂度是系统状态数的指数级别的,对于系统错误数量是双倍指数级别的。本文给出一种不构建系统诊断器的可诊断性测试算法,其复杂度在系统状态数上是四阶的,在故障类型数上是线性的。
Index Terms: Complexity, diagnosability, discrete event system, failure diagnosis.
I. INTRODUCTION
错误诊断是大型复杂系统的一项关键任务。这个问题在包括离散事件系统在内的各个领域的文献中都得到了相当多的关注。在中,Sampath等人提出了一种离散事件系统的错误诊断方法。他们提出了可诊断性的概念,并给出了测试可诊断性的充分必要条件。他们将条件表示为诊断器的一个属性。为了测试系统可诊断性,首先需要构造诊断器。构造诊断器和测试可诊断性的复杂度是系统状态数的指数级别的,对于错误事件数是双倍指数级别的。
显然,如果我们能够不构建诊断器的情况下,来测试目标系统的可诊断性,那么我们将可以节省为不可诊断系统构建诊断器的时间。在本文中,我们给出一种无需构造诊断器即可测试可诊断性的方法。该方法的复杂度是系统状态数量和错误事件数量的多项式。接下来,我们首先介绍离散事件系统的可诊断性概念,然后介绍我们的测试算法,最后,给出一个说明性的例子。
II. DIAGNOSABILITY
我们首先给出系统模型,然后介绍由提出的可诊断性定义。
A. System model
令G=(X,Σ,δ,x0)是待诊断系统的有限状态机模型,其中
- X 是一个状态有限集
- Σ 是一个事件标签的有限集
- δ⊆X×Σ×X 是状态转移有限集
- x0∈X 是系统的初始状态
我们假设所有状态自动机是可达的(accessible,所有状态可以从初始状态出发,经若干转移后到达),否则我们只考虑状态自动机中的可达部分。
我们用Σ∗表示包含所有有限长度事件序列的集合,其中包括空序ε。把Σ∗集合中的一个元素称为串(trace),用Σ∗的子集表示语言(language)。
对于一个串s和事件σ,我们用σ∈s表示事件σ包含于串s中,即串s发生了事件σ。系统G中的一个路径(path)是一个状态转移序列(x1,δ1,x2,....,δn−1,xn),其中对于每个i∈{1,...,n−1},(xi,δi,xi+1)∈δ,如果xn=x1,则表示该路径是一个环(cycle)。我们用L(G)⊆Σ∗来描述系统G的生成语言,即系统G从初始状态开始能够执行的串的集合。同时假设L(G)是前缀闭合(prefix-closed)的,即L(G)=pr(L(G)),其中pr(L(G))={u∣∃v∈Σ∗,uv∈L(G)}是一个由所有L(G)中的串的前缀组成的集合。用Σo⊆Σ表示系统的可观事件集,Σuo=Σ−Σo表示不可观事件集,M:Σ→Σo∪{ε}表示一个观察映射函数,F=Fi,i=1,2,...,m表示错误类型的集合,ψ:Σ→F∪{∅}表示一个为Σ中每个事件错误分配的函数(failure assignment function)。M的定义通常从Σ扩展到Σ∗,如下所示:M(ε)=ε,并且对于每一个串s∈Σ∗,σ∈Σ:M(sσ)=M(s)M(σ)。
对于本文研究的系统,和一样,我们作出以下假设:
- A1) 系统G的生成语言是活语言(live language)。这意味着系统中的每一个状态均定义相应的状态转移。
- A2) 系统G中不存在不可观事件的环。
- A3) 所有错误事件均是不可观的,即(∀σ∈Σ,ψ(σ)=∅)⇒M(σ)=ε。
B. Diagnosability
离散事件系统的可诊断性定义描述如下:
Definition 1: 一个前缀封闭语言L关于观察映射M和错误分配函数ψ是可诊断的当:
(∀Fi∈F)(∃ni∈N)(∀s∈L,ψ(sf)=Fi)(∀v=st∈L,∥t∥≥ni)⇒(∀w∈L,M(w)=M(v))(∃u∈pr({w}),ψ(uf)=Fi)
其中sf和uf分别表示串s和串u的最后一个事件,pr({w})是w所有前缀组成的集合。如果系统G的生成语言L(G)是可诊断的,则该系统是可诊断的。
根据上面定义,若s是L中一个以Fi错误事件结尾的串,v是s的任意一个充分长后缀,则任意一个L中与v拥有相同观察序列的的串w,即M(w)=M(v),串w中一定包含错误事件Fi。
III. ALGORITHM
我们现在展示测试可诊断性的算法。
Algorithm 1: 对于给定系统G=(X,Σ,δ,x0),一个观察映射M和一个错误分配函数ψ,做以下操作:
- 获取一个非确定有限状态自动机(nondeterministic finite-state machine)Go=(Xo,Σo,δo,x0o),其中语言L(Go)=M(L(G)):
- Xo={(x,f)∣x∈X1∪{x0},f⊆F}是自动机的有限状态集,其中X1={x∈X∣∃(x′,σ,x)∈δ且M(σ)=ε}是G能通过可观序列转移到达的状态组成的集合,f是一个从x0到x的路径的错误类型。
- Σo是可观事件集,Go的事件标签集合。
- δo⊆Xo×Σo×Xo是状态转移集。((x,f),δ,(x′,f′))∈δo当且仅当对于∀i∈{1,2,...,n},M(σi)=ε,M(σ)=σ且f′={ψ(σi)∣ψ(σi)=∅,1≤i≤n}∪f,系统G中存在这样一个路径(x,σ1,x1,...,σn,xn,σ,x′)(n≥0)。
- x0o=(x0,∅)∈Xo是Go的初始状态。
- 计算Gd=(Go∣∣Go),即Go与其自身的严格组合(composition)计算。Go=(Xd,Σo,δd,x0d),其中
- Xd={(x1o,x2o)∣x1o,x2o∈Xo} 是状态集;
- Σo是Gd的事件标签集;
- δd⊆Xd×Σo×Xd是状态转移集。((x1o,x2o),δ,(y1o,y2o))∈δd当且仅当(x1o,σ,y2o)和(x2o,σ,y2o)均包含于δo中;
- x0d是Gd的初始状态。
- 检查Gd中是否存在这样一个环cl=(x1,σ1,x2,...,xn,σn,x1),n≥1,xi=((xi1,fi1),(xi2,fi2)),i=1,2,...,n, 使得 f11=f12。如果存在,则输出该系统是不可诊断的,最后这一步骤可以先标识Gd中的状态((x1,f1),(x2,f2)),其中f1=f2,然后删除其他所有状态以及相关的转移,判断剩余的图中是否存在环即可得到结果。
接下来,我们给出两个定理,展示Algorithm 1 中状态机Go和Gd的一些属性。这里省略了证明,因为它们可以直接遵循Go和Gd的定义得到。
Lemma 1: 对于状态机Go:
- L(Go)=M(L(G));
- 对于Go中每一个作为环的路径tr:
tr=((x0,∅),σ0,(x1,f1),...,(xk,fk),σk,...,(xn,fn),σn,(xk,fk))
我们有
- 对于任意i,j∈{k,k+1,...,n};fi=fj;
- ∃uv∗∈L(G)使得M(u)=σ0...σk−1,M(v)=σk...δn;{ψ(σ)∣σ∈u,ψ(σ)=∅}=fk
Lemma 2: 对于Gd中每一个作为环的路径tr:
tr=(x0d,σ0,x1,...,xk,σk,...,xn,σn,xk)xi=((xi1,fi1),(xi2,fi2)),i=1,2,...,n
有:
- Go中存在两个作为环的路径 tr1和tr2:
tr1=((x0,∅),σ0,(x11,f11),...,(xk1,fk1),σk,...,(xn1,fn1),σn,(xk1,fk1))tr2=((x0,∅),σ0,(x12,f12),...,(xk2,fk2),σk,...,(xn2,fn2),σn,(xk2,fk2)).
- 对于任意i,j∈{k,k+1,...,n}, 有(fi1=fj1)∧(fi2=fj2)。
接着,我们再提供一个定理确保Algorithm 1的正确性。
Theorem 1: G 是可诊断的当且仅当Gd中的每一个环cl:
cl=(x1,σ1,x2,...,xn,σn,x1),n≥1xi=((xi1,f1),(xi2,f2)),i=1,2,...,n
我们有f1=f2。
Proof: 对于必要性,假设G是可诊断的,但Gd中存在一个环cl,cl=(xk,σk,xk+1,...,xn,σn,xK),n≥k,xi=((xi1,f1),(xi2,f2)),i=k,k+1,...,xn使得f1=f2。因为Gd是可达的,Gd中存在一个以环cl结尾的路径tr,即tr=(x0d,σ0,x1,...,xk,σk,...,xn,σn,xk)。据Lemma 2,Go中存在两个路径tr1和tr2:
tr1=((x0,∅),σ0,(x11,f11),...,(xk1,f1),σk,...,(xn1,f1),σn,(xk1,f1))tr2=((x0,∅),σ0,(x12,f12),...,(xk2,f2),σk,...,(xn2,f2),σn,(xk2,f2))
更多地,根据Lemma 1,我们可得∃u1v1∗∈L(G)使得M(u1)=M(u2)=σ0...σk−1,M(v1)=M(v2)=σk...σn 并且{ψ(σ)∣σ∈ui,ψ(σ)=∅}={ψ(σ)∣σ∈uivi,ψ(σ)=∅}=fi,i=1,2。因为f1=f2,我们假设Fk∈f1−f2=∅。然后∃s∈L(G)使得 ψ(sf)=Fk 且对于某些t∈Σ∗;u1∈st。对于任意整数nk,我们可以选择另一个整数l,使得∥tv1l∥>nk。
则有M(u2,v2l)=M(stv1l)并且{ψ(σ)∣σ∈u2v2,ψ(σ)=∅}=f2,这意味着u2v2l中不包含任何类型为Fk对应的错误事件。因此,根据可诊断性的定义,系统G是不可诊断的。与假设矛盾,所以必要性成立。
对于充分性,假设Gd中的每一个环cl,cl=(x1,σ1,x2,...,xn,σn,x1),n≥1,xi=((xi1,f1),(xi2,f2)),i=1,2,...,n, 我们有f1=f2。
根据Lemma 2的第二句,我们知道该假设意味着∀x=((x1,f1),(x2,f2))∈Xd,iff1=f2,则x不包含于一个循环中。更进一步地,对于xi=(xi1,fi1),(xi2,f2),1≤i≥k, Gd中的任意状态序列(x1,x2,...,xk),如果对于∀i∈{1,2,...,k}有fi1=fi2,则状态序列的长度限制在Gd状态数之内,即k≤∣Xd∣。
现在,令s是L(G)中以Fk类型错误事件结尾的串,即ψ(sf)=Fk,我们称对于∥t∥>∣Xd∣×(∣X∣−1),∀w∈L(G),M(w)=M(v), ∀v=st∈L(G), 则w中包含Fk类型的错误事件。综上,对于任何从x0d出发通过执行Gd中M(s)到达的状态x∈Xd,有对于Gd中任意从x开始的状态序列,一个状态y=((y1,f1),(y2,f2))∈Xd,∧f1=f2可以在∣Xd∣−1步之内到达。这意味着∀v=st∈L(G)∧∥M(t)∥>∣Xd∣,∀w∈L(G)∧M(w)=M(v),w中必定包含Fk类型的错误事件。进一步假设G中不存在不可观环,任何M(t)中的可观事件最多可在∣X∣−1个不可观事件之后被跟踪到。因此,对于上面的串t,∥t∥≤((∥M(t)∥+1)×(∣X∣−1),即∥M(t)∥≥∥t∥/(∣X∣−1)−1。所以如果∥t∥>∣Xd∣×(∣X∣−1),则∥M(t)∥≥∥t∥/(∣X∣−1)−1>(∣Xd∣×(∣X∣−1))/(∣X∣−1)−1=∣Xd∣−1,确立我们的主张(注意,我们隐式地假设∣X∣>1;否则如果∣X∣=1,根据不存在不可观环的假设,将不存在任何使用错误标签的转移,系统显然是可诊断的)。根据Lemma 1,系统G是可诊断的,充分性也证明完毕。
Remark 1: 根据Algorithm 1,我们知道Go中的状态数是∣X∣×2∣F∣,Go中的转移数是∣X∣2×22∣F∣×∣Σo∣。因为Gd=Go∣∣Go,Gd中的状态数为∣X∣2×22∣F∣,Gd中的转移数为∣X∣4×24∣F∣×∣Σo∣。
Algorithm 1的第一步,构造Go的复杂度为O(∣X∣2×22∣F∣, 而Algorithm 1的第二步,构造Gd的复杂度为O(∣X∣4×24∣F∣×∣Σo∣)。执行Algorithm 1的第三步,它适当地修剪Gd中检测到的“违规”环的的存在,与状态数和转移数是呈线性关系的,即O(∣X∣4×24∣F∣)。注意当移除所有不符合规则的环后,转移标签将是不相关的。
所以Algorithm 1的复杂度是O(∣X∣4×24∣F∣×∣Σo∣),它是G中状态数的多项式级别和G中错误类型数的指数级别。
在中,提供了另一个可诊断性的充分必要条件。该条件被表示为系统诊断器的一个属性。所以为了测试可诊断性,我们必须先构造目标系统的诊断器,然后检查诊断器的属性。其中构造诊断器和检查诊断器属性的复杂度都是系统状态数的指数级别和错误类型数的双倍指数级别。在Algorithm 1中,测试系统的可诊断性不需要构造诊断器。
Remark 2: 测试可诊断性的复杂度对于错误类型数量可以是多项式级别的,对于一个拥有错误类型F={Fi,i=1,2,...,m}的系统是可诊断的,当且仅当系统的每一个错误类型Fi,i=1,2,...,m都是可诊断的。换句话说,对于每个单独的错误类型集{F1},...,{Fm}应用Algorithm 1 m 次。因为每一个错误类型集中只包含一个错误类型,根据Remark 1,可知每一次测试的复杂度为O(∣X∣4×24∣1∣×∣Σo∣)=O(∣X∣4×∣Σo∣)。因此,总的测试复杂度为O(∣X∣4×∣Σo∣×∣F∣)。
Fig. 1. Diagram of system G. Example 1: 考虑一个系统 G=(X,Σ,δ,x0)
- X={x0,x1,x2,x3,x4}
- Σ={σ1,σ2,σ3,σuo,σf1,σf2,σf3}
- {(x0,σ1,x1),(x1,σf1,x2),(x1,σuo,x2),(x2,σf2,x3),(x3,σ2,x3),(x2,σf1,x4),(x4,σ3,x4)}
并拥有可观事件集Σo={σ1,σ2,σ3}。系统见图Fig. 1。令F={F1,F2}作为错误类型集,ψ是一个错误分配函数, ψ(σuo)=ψ(σi)=∅,i=1,2,3,ψ(σf1)=F1,ψ(σf2)=F2。根据Algorithm 1的第一步,我们可以从G来获取Go,见Fig. 2。Algorithm 1的第二步,计算Go和其自身的严格组合,Gd=Go∣∣Go,见Fig. 3。在Fig. 3中,在((x3,{F2}),(x3,{F1,F2}上存在一个自环。所以,根据Algorithm 1的最后一步,我们知道该系统G是不可诊断的。
Fig. 2. Diagram of system Go. Fig. 3. Diagram of system Gd. 现在,我们假设不区分错误类型F1和F2,即令Fig. 3中F2=F1并删除一些冗余的状态,我们计算修改后系统对应的Gd,这里忽略了该结果。在修改后的Gd中,不存在任何违反Algorithm 1中第三步规则的环。因此,修改后的系统是可诊断的。
IV. CONCLUSION
在本文中,我们提供了一个测试离散事件系统可诊断性的算法。与中的测试方法相比,我们的算法无需为待诊断系统构造诊断器。我们算法的复杂度是系统状态数的四阶和错误类型数的线性阶。而中测试方法的复杂度是系统状态数的指数阶和错误类型数的双倍指数阶。