You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							80 lines
						
					
					
						
							1.8 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							80 lines
						
					
					
						
							1.8 KiB
						
					
					
				
								// integer semantics version of abstract firewire protocol
							 | 
						|
								// gxn 23/05/2001
							 | 
						|
								
							 | 
						|
								mdp
							 | 
						|
								
							 | 
						|
								// wire delay
							 | 
						|
								const int delay;
							 | 
						|
								
							 | 
						|
								// probability of choosing fast and slow
							 | 
						|
								const double fast = 0.5;
							 | 
						|
								const double slow = 1-fast;
							 | 
						|
								
							 | 
						|
								// largest constant the clock of the system is compared to
							 | 
						|
								const int kx = 167;
							 | 
						|
								
							 | 
						|
								module abstract_firewire
							 | 
						|
									
							 | 
						|
									// clock 
							 | 
						|
									x : [0..kx+1];
							 | 
						|
									
							 | 
						|
									// local state
							 | 
						|
									s : [0..9];
							 | 
						|
									// 0 -start_start
							 | 
						|
									// 1 -fast_start
							 | 
						|
									// 2 -start_fast
							 | 
						|
									// 3 -start_slow
							 | 
						|
									// 4 -slow_start
							 | 
						|
									// 5 -fast_fast
							 | 
						|
									// 6 -fast_slow
							 | 
						|
									// 7 -slow_fast
							 | 
						|
									// 8 -slow_slow
							 | 
						|
									// 9 -done
							 | 
						|
									
							 | 
						|
									// initial state
							 | 
						|
									[time] s=0 & x<delay -> (x'=min(x+1,kx+1));
							 | 
						|
									[round] s=0 -> fast : (s'=1) + slow : (s'=4);
							 | 
						|
									[round] s=0 -> fast : (s'=2) + slow : (s'=3);
							 | 
						|
									// fast_start
							 | 
						|
									[time] s=1 & x<delay -> (x'=min(x+1,kx+1));
							 | 
						|
									[] s=1 -> fast : (s'=5) & (x'=0) + slow : (s'=6) & (x'=0);
							 | 
						|
									// start_fast
							 | 
						|
									[time] s=2 & x<delay -> (x'=min(x+1,kx+1));
							 | 
						|
									[] s=2 -> fast : (s'=5) & (x'=0) + slow : (s'=7) & (x'=0);
							 | 
						|
									// start_slow
							 | 
						|
									[time] s=3 & x<delay -> (x'=min(x+1,kx+1));
							 | 
						|
									[] s=3 -> fast : (s'=6) & (x'=0) + slow : (s'=8) & (x'=0);
							 | 
						|
									// slow_start
							 | 
						|
									[time] s=4 & x<delay -> (x'=min(x+1,kx+1));
							 | 
						|
									[] s=4 -> fast : (s'=7) & (x'=0) + slow : (s'=8) & (x'=0);
							 | 
						|
									// fast_fast
							 | 
						|
									[time] s=5 & (x<85) -> (x'=min(x+1,kx+1));
							 | 
						|
									[] s=5 & (x>=76) -> (s'=0) & (x'=0);
							 | 
						|
									[] s=5 & (x>=76-delay) -> (s'=9) & (x'=0);
							 | 
						|
									// fast_slow
							 | 
						|
									[time] s=6 & x<167 -> (x'=min(x+1,kx+1));
							 | 
						|
									[] s=6 & x>=159-delay -> (s'=9) & (x'=0);
							 | 
						|
									// slow_fast
							 | 
						|
									[time] s=7 & x<167 -> (x'=min(x+1,kx+1));
							 | 
						|
									[] s=7 & x>=159-delay -> (s'=9) & (x'=0);
							 | 
						|
									// slow_slow
							 | 
						|
									[time] s=8 & x<167 -> (x'=min(x+1,kx+1));
							 | 
						|
									[] s=8 & x>=159 -> (s'=0) & (x'=0);
							 | 
						|
									[] s=8 & x>=159-delay -> (s'=9) & (x'=0);
							 | 
						|
									// done
							 | 
						|
									[] s=9 -> (s'=s);
							 | 
						|
									
							 | 
						|
								endmodule
							 | 
						|
								
							 | 
						|
								// labels
							 | 
						|
								label "done" = s=9;
							 | 
						|
								
							 | 
						|
								//reward structures
							 | 
						|
								// time
							 | 
						|
								rewards "time"
							 | 
						|
									[time] true : 1;
							 | 
						|
								endrewards
							 | 
						|
								// number of rounds
							 | 
						|
								rewards "rounds"
							 | 
						|
									[round] true : 1;
							 | 
						|
								endrewards
							 |