<Introduction to Discrete-event systems>学习心得(二)

四、自动机运算

1. 一元运算

  • 可达Ac(G)
    只包含自动机G所有初始状态 x0 可达的状态,删除自动机G中所有初始状态 x0 不可达的状态及其状态转移函数及转移到该状态的转移函数
    具体为

    Ac(G) := (Xac,E,fac,x0,Xac,m)
    Xac = {x ∈ X :(∃s ∈ E∗)[f(x0,s)=x]}
    Xac,m = Xm ∩ Xac
    
  • 共和可达CoAc(G)
    只包含自动机G中可达到标记状态Xm的所有状态,不论x0是否可达该状态
    具体为

    CoAc(G):=(Xcoac,E,fcoac,x0,coac,Xm)
    Xcoac = {x ∈ X :(∃s ∈ E∗)[f(x, s) ∈ Xm]}
    x0,coac = 
        x0          if x0 ∈ Xcoac
        defined     otherwise 
    
  • 精简Trim(G)
    只包含所有初始状态x0可达且能达到标记状态Xm的状态

    Trim(G):=CoAc[Ac(G)] = Ac[CoAc(G)]
    

2. 合成运算

只有两个自动机G1,G2同时发生该事件,在积中该事件才发生,否则不能发生

    G1 × G2 := Ac(X1 × X2,E1 ∪ E2,f, Γ1(x1) ∩ Γ2(x2),Xm1 × Xm2)
    f((x1,x2),e):=
        (f1(x1,e),f2(x2,e))     if e ∈ Γ1(x1) ∩ Γ2(x2)
        undefined                otherwise

性质
    1. L(G1 × G2)=L(G1) ∩L(G2)
    2. Lm(G1 × G2)=Lm(G1) ∩ Lm(G2)
    3. G1 × G2 = G2 × G1
    4. G1 × G2 × G3 = (G1 × G2) × G3 = G1 × (G2 × G3)

并行

只要有两个自动机G1,G2中的任意一个发生该事件,在并行中该事件就会发生

    G1 || G2 := Ac(X1 × X2,E1 ∪ E2,f,Γ1||2, (x01,x02),Xm1 × Xm2)    
    f((x1,x2),e):=
        (f1(x1,e),f2(x2,e))  if e ∈ Γ1(x1) ∩ Γ2(x2)
        (f1(x1,e),x2)        if e ∈ Γ1(x1) \ E2
        (x1,f2(x2,e))        if e ∈ Γ2(x2) \ E1
        undefined              otherwise

其中 Γ1||2(x1,x2)=[Γ1(x1)Γ2(x2)][Γ1(x1) E2][Γ2(x2) E1]

性质
Pi:(E1E2)E for i =1, 2
1. L(G1||G2)=P11[L(G1)]P12[L(G2)]
2. Lm(G1||G2)=P11[Lm(G1)]P12[Lm(G2)]
3. L1||L2:=P11(L1)P12(L2)
4. Pi[L(G1||G2)]L(Gi) for i =1, 2
5. 交换律G1 || G2 = G2 || G1
6. 结合律(G1||G2)||G3 = G1||(G2||G3)

注:引入E2\E1={e : e E2 & e E1 }即E2\E1=E2-E1,则

P11[L(G1)] 表示在G1的每个状态上添加属于E2\E1的事件的闭环,以此来确保G2上的私有事件在G1上也可以执行

由此

P11[L(G1)]P12[L(G2)] 确保了两个自动机G的私有事件及两者的公共事件都能被执行

当E1=E2时并行运算退化为积运算

3.非确定性自动机的观察自动机

定义非确定性自动机 G=(X,E{ε},f,x0,Xm)

  • 空转移
    定义不确定状态集 εR(x) 为非确定自动机中状态x经一次或多次 ε 空转移后 能达到的所有状态及x本身的集合。
    定义扩展后的状态转移函数如下

    fext(x,ε):=εR(x)
    fext(x,ue):=εR[{z:zf(y,e)whereyfext(x,u)}]

  • 构建观察自动机
    构建 Obs(G)=(Xobs,E,fobs,x0,obs,Xm,obs) 如下:

    1. 定义 x0,obs:=εR(x0) Xobs={x0,obs}
    2. 注意到观察自动机Obs(G)的所有状态都是原非确定性自动机状态的集合,比如初始状态 x0,obs
      对于每一个Obs(G)的状态 BXobs 和事件 eE ,定义

      fobs(B,e):=εR({xX:(xeB)[xf(xe,e)]})
      若对于任意 xeB f(xe,e) 都未定义,则 fobs(B,e) 无定义

    3. 重复第二步直到所有可达部分都被建立

    4. Xm,obs:={BXobs:BXm}

    性质:

    1. Obs(G)是确定型自动机
    2. L(Obs(G))=L(G)
    3. Lm(Obs(G))=Lm(G)

4.正则语言

一个语言被称为是正则的当该语言可以被一个有限状态自动机标记(识别)

正则语言L的前缀 L¯¯ ,星 L ,补 Lc:=EL ,并,交,连接仍是正则语言

另外还可以用正则表达式描述正则语言,如下

是空集的正则表达式, ε 是空串集合 {ε} 的正则表达式,e是集合{e}的正则表达式
如果r和s是正则表达式,则rs,(r+s), r , s 是正则表达式

任何正则语言可以被表述为正则表达式,反之亦然。

5.最小化自动机

自动机最小化的关键在于等价状态对可以合并为一个状态。
定义两状态x,y是等价的当

对所有的输入串w,f(x,w)是标记状态当且仅当f(y,w)是标记状态

若两状态x,y不是等价的,则称x,y是可区分的。
利用填表算法找到自动机中的可区分对,其步骤为:

基础:若x是标记状态而y不是标记状态,则{x,y}是可区分的
归纳:若存在某个输入符号a,{r=f(x,a), s=f(y,a)}是已知的可区分状态对,则{x,y}是可区分状态对

若不能区分两个状态对,则其为等价状态对。
合并相互等价的状态块为一个状态,删除初始状态不可达的状态,最后得到的自动机即为最小化的自动机。

五、部分可观自动机

自动机G=(X,E,f,x0,Xm),其中 E=EoEuo ,其中 Eo 表可观测事件集, Euo 表不可观事件集。
定义部分可观下的自然投影P为

P:EEo

P(a)=a if aEo
P(a)=ε if aEuo or a=ε
P(sa)=P(s)P(a) where sE,aE

含不可观事件自动机的观察自动机

Obs(G)=(Xobs,Eo,fobs,x0,obs,Xm,obs)

定义UR(x)为状态x及x经一个或多个不可观事件( eEuo )转移后所到达的所有状态集合。则观察自动机的构建过程如下:

  1. 定义 x0,obs := UR(x0), Xobs={x0,obs}
  2. 对于G中的每个状态 BXobs eEo ,定义

    fobs(B,e):=UR({xX:(eeB)[xf(xe,e)]})

  3. 重复步骤2直到Obs(G)所有可达状态被建立

  4. Xm,obs:={BXobs:BXm}

性质:
1. Obs(G)是确定型自动机
2. L(Obs(G))=P[L(G)]
3. Lm(Obs(G))=P[Lm(G)]

诊断性

由于书本中关于诊断性的内容太过模糊,本部分内容来自Meera Sampath 1995年的论文Diagnosability of discrete-event systems

标记 EfEuoE 为错误事件集,其中 Ef=Ef1Ef2Efm
标记 L/s={tE|stL} 为后语言, L=L¯¯ 为前缀封闭语言
定义一个语言L为活语言当初始状态经该语言转移后可到达该确定型自动机的标记状态,即

L为活语言 f(x0,L)Xm

标记 sf 为串s的最后一个事件,定义

Ψ(Efi)={safL:afEfi}

定义一个前缀封闭的活语言L 可诊断

(im)(niN)[sΨ(Efi)](tL/s)[||t||niD
诊断条件D为

wP1[P(st)]Efiw

直观的说就是语言L中任意一个与串st投影后结果相同(即看起来一样)的字符串一定包含 Efi 中的错误事件。
更具体的说就是只要看到了该串与s投影后的串相等后,若接下来再有长度大于等于 ni 的部分看上去和串t投影后的串相同,那么就可以肯定该串一定包含 Efi 中的某个错误事件。

猜你喜欢

转载自blog.csdn.net/sinat_30477313/article/details/79133666