Simulation algorithms for coupled DEVS

Given a coupled DEVS model, simulation algorithms are methods to generate the model's legal behaviors, which are a set of trajectories not to reach illegal states. (see behavior of a Coupled DEVS model.) [Zeigler84] originally introduced the algorithms that handle time variables related to lifespan t s [ 0 , ] {\displaystyle t_{s}\in [0,\infty ]} and elapsed time t e [ 0 , ) {\displaystyle t_{e}\in [0,\infty )} by introducing two other time variables, last event time, t l [ 0 , ) {\displaystyle t_{l}\in [0,\infty )} , and next event time t n [ 0 , ] {\displaystyle t_{n}\in [0,\infty ]} with the following relations:

t e = t t l {\displaystyle \,t_{e}=t-t_{l}}

and

t s = t n t l {\displaystyle \,t_{s}=t_{n}-t_{l}}

where t [ 0 , ) {\displaystyle t\in [0,\infty )} denotes the current time. And the remaining time,

t r = t s t e {\displaystyle \,t_{r}=t_{s}-t_{e}}

is equivalently computed as

t r = t n t , {\displaystyle \,t_{r}=t_{n}-t,}

apparently t r [ 0 , ] {\displaystyle t_{r}\in [0,\infty ]} .

Based on these relationships, the algorithms to simulate the behavior of a given Coupled DEVS are written as follows.

Algorithm

algorithm DEVS-coordinator
  Variables:
     parent // parent coordinator
     
  
    
      
        
          t
          
            l
          
        
      
    
    {\displaystyle t_{l}}
  
: // time of last event
     
  
    
      
        
          t
          
            n
          
        
      
    
    {\displaystyle t_{n}}
  
: // time of next event
     
  
    
      
        N
        =
        (
        X
        ,
        Y
        ,
        D
        ,
        {
        
          M
          
            i
          
        
        }
        ,
        
          C
          
            x
            x
          
        
        ,
        
          C
          
            y
            x
          
        
        ,
        
          C
          
            y
            y
          
        
        ,
        S
        e
        l
        e
        c
        t
        )
      
    
    {\displaystyle N=(X,Y,D,\{M_{i}\},C_{xx},C_{yx},C_{yy},Select)}
  
 // the associated Coupled DEVS model
    when receive init-message(Time t)
        for each 
  
    
      
        i
        
        D
      
    
    {\displaystyle i\in D}
  
 do
            send init-message(t) to child 
  
    
      
        i
      
    
    {\displaystyle i}
  

        
  
    
      
        
          t
          
            l
          
        
        
        max
        {
        
          t
          
            l
            i
          
        
        :
        i
        
        D
        }
      
    
    {\displaystyle t_{l}\leftarrow \max\{t_{li}:i\in D\}}
  
;
        
  
    
      
        
          t
          
            n
          
        
        
        min
        {
        
          t
          
            n
            i
          
        
        :
        i
        
        D
        }
      
    
    {\displaystyle t_{n}\leftarrow \min\{t_{ni}:i\in D\}}
  
;
    when receive star-message(Time t)
        if 
  
    
      
        t
        
        
          t
          
            n
          
        
      
    
    {\displaystyle t\neq t_{n}}
  
 then
            error: bad synchronization;
        
  
    
      
        
          i
          
            
          
        
        
        S
        e
        l
        e
        c
        t
        (
        {
        i
        
        D
        :
        
          t
          
            n
            i
          
        
        =
        
          t
          
            n
          
        
        }
        )
        ;
      
    
    {\displaystyle i^{*}\leftarrow Select(\{i\in D:t_{ni}=t_{n}\});}
  

        send star-message(t)to 
  
    
      
        
          i
          
            
          
        
      
    
    {\displaystyle i^{*}}
  

        
  
    
      
        
          t
          
            l
          
        
        
        max
        {
        
          t
          
            l
            i
          
        
        :
        i
        
        D
        }
      
    
    {\displaystyle t_{l}\leftarrow \max\{t_{li}:i\in D\}}
  
;
        
  
    
      
        
          t
          
            n
          
        
        
        min
        {
        
          t
          
            n
            i
          
        
        :
        i
        
        D
        }
      
    
    {\displaystyle t_{n}\leftarrow \min\{t_{ni}:i\in D\}}
  
;
    when receive x-message(
  
    
      
        x
        
        X
      
    
    {\displaystyle x\in X}
  
, Time t)
        if 
  
    
      
        (
        
          t
          
            l
          
        
        
        t
      
    
    {\displaystyle (t_{l}\leq t}
  
 and 
  
    
      
        t
        
        
          t
          
            n
          
        
        )
      
    
    {\displaystyle t\leq t_{n})}
  
 == false then
            error: bad synchronization;
        for each 
  
    
      
        (
        x
        ,
        
          x
          
            i
          
        
        )
        
        
          C
          
            x
            x
          
        
      
    
    {\displaystyle (x,x_{i})\in C_{xx}}
  
 do
            send x-message(
  
    
      
        
          x
          
            i
          
        
      
    
    {\displaystyle x_{i}}
  
,t) to child 
  
    
      
        i
      
    
    {\displaystyle i}
  

        
  
    
      
        
          t
          
            l
          
        
        
        max
        {
        
          t
          
            l
            i
          
        
        :
        i
        
        D
        }
      
    
    {\displaystyle t_{l}\leftarrow \max\{t_{li}:i\in D\}}
  
;
        
  
    
      
        
          t
          
            n
          
        
        
        min
        {
        
          t
          
            n
            i
          
        
        :
        i
        
        D
        }
      
    
    {\displaystyle t_{n}\leftarrow \min\{t_{ni}:i\in D\}}
  
;
    when receive y-message(
  
    
      
        
          y
          
            i
          
        
        
        
          Y
          
            i
          
        
      
    
    {\displaystyle y_{i}\in Y_{i}}
  
, Time t)
        for each 
  
    
      
        (
        
          y
          
            i
          
        
        ,
        
          x
          
            i
          
        
        )
        
        
          C
          
            y
            x
          
        
      
    
    {\displaystyle (y_{i},x_{i})\in C_{yx}}
  
 do
            send x-message(
  
    
      
        
          x
          
            i
          
        
      
    
    {\displaystyle x_{i}}
  
,t) to child 
  
    
      
        i
      
    
    {\displaystyle i}
  

        if 
  
    
      
        
          C
          
            y
            y
          
        
        (
        
          y
          
            i
          
        
        )
        
        ϕ
      
    
    {\displaystyle C_{yy}(y_{i})\neq \phi }
  
 then
            send y-message(
  
    
      
        
          C
          
            y
            y
          
        
        (
        
          y
          
            i
          
        
        )
      
    
    {\displaystyle C_{yy}(y_{i})}
  
, t) to parent;
        
  
    
      
        
          t
          
            l
          
        
        
        max
        {
        
          t
          
            l
            i
          
        
        :
        i
        
        D
        }
      
    
    {\displaystyle t_{l}\leftarrow \max\{t_{li}:i\in D\}}
  
;
        
  
    
      
        
          t
          
            n
          
        
        
        min
        {
        
          t
          
            n
            i
          
        
        :
        i
        
        D
        }
      
    
    {\displaystyle t_{n}\leftarrow \min\{t_{ni}:i\in D\}}
  
;

See also

References

  • [Zeigler84] Bernard Zeigler (1984). Multifacetted Modeling and Discrete Event Simulation. Academic Press, London; Orlando. ISBN 978-0-12-778450-2.
  • [ZKP00] Bernard Zeigler; Tag Gon Kim; Herbert Praehofer (2000). Theory of Modeling and Simulation (second ed.). Academic Press, New York. ISBN 978-0-12-778455-7.