7 changed files with 277 additions and 9 deletions
			
			
		- 
					148resources/examples/testfiles/pmdp/brp16_2.nm
- 
					0resources/examples/testfiles/pmdp/coin2_2.nm
- 
					2src/storm/modelchecker/parametric/SparseMdpParameterLiftingModelChecker.cpp
- 
					2src/storm/storage/FlexibleSparseMatrix.cpp
- 
					5src/storm/transformer/GoalStateMerger.cpp
- 
					3src/test/modelchecker/SparseDtmcParameterLiftingTest.cpp
- 
					126src/test/modelchecker/SparseMdpParameterLiftingTest.cpp
| @ -0,0 +1,148 @@ | |||
| // bounded retransmission protocol [D'AJJL01] | |||
| // gxn/dxp 23/05/2001 | |||
| // Modified by Ernst Moritz Hahn (emh@cs.uni-sb.de) | |||
| 
 | |||
| mdp | |||
| //dtmc | |||
| 
 | |||
| // number of chunks | |||
| const int N = 16; | |||
| // maximum number of retransmissions | |||
| const int MAX = 2; | |||
| 
 | |||
| // reliability of channels | |||
| const double pL; | |||
| const double pK; | |||
| 
 | |||
| // timeouts | |||
| const double TOMsg; | |||
| const double TOAck; | |||
| 
 | |||
| module sender | |||
| 
 | |||
| 	s : [0..6]; | |||
| 	// 0 idle | |||
| 	// 1 next_frame	 | |||
| 	// 2 wait_ack | |||
| 	// 3 retransmit | |||
| 	// 4 success | |||
| 	// 5 error | |||
| 	// 6 wait sync | |||
| 	srep : [0..3]; | |||
| 	// 0 bottom | |||
| 	// 1 not ok (nok) | |||
| 	// 2 do not know (dk) | |||
| 	// 3 ok (ok) | |||
| 	nrtr : [0..MAX]; | |||
| 	i : [0..N]; | |||
| 	bs : bool; | |||
| 	s_ab : bool; | |||
| 	fs : bool; | |||
| 	ls : bool; | |||
| 	 | |||
| 	// idle | |||
| 	[NewFile] (s=0) -> (s'=1) & (i'=1) & (srep'=0); | |||
| 	// next_frame | |||
| 	[aF] (s=1) -> (s'=2) & (fs'=(i=1)) & (ls'=(i=N)) & (bs'=s_ab) & (nrtr'=0); | |||
| 	// wait_ack | |||
| 	[aB] (s=2) -> (s'=4) & (s_ab'=!s_ab); | |||
| 	[TO_Msg] (s=2) -> (s'=3); | |||
| 	[TO_Ack] (s=2) -> (s'=3); | |||
| 	// retransmit | |||
| 	[aF] (s=3) & (nrtr<MAX) -> (s'=2) & (fs'=(i=1)) & (ls'=(i=N)) & (bs'=s_ab) & (nrtr'=nrtr+1); | |||
| 	[] (s=3) & (nrtr=MAX) & (i<N) -> (s'=5) & (srep'=1); | |||
| 	[] (s=3) & (nrtr=MAX) & (i=N) -> (s'=5) & (srep'=2); | |||
| 	// success | |||
| 	[] (s=4) & (i<N) -> (s'=1) & (i'=i+1); | |||
| 	[] (s=4) & (i=N) -> (s'=0) & (srep'=3); | |||
| 	// error | |||
| 	[SyncWait] (s=5) -> (s'=6);  | |||
| 	// wait sync | |||
| 	[SyncWait] (s=6) -> (s'=0) & (s_ab'=false);  | |||
| 	 | |||
| endmodule | |||
| 
 | |||
| module receiver | |||
| 
 | |||
| 	r : [0..5]; | |||
| 	// 0 new_file | |||
| 	// 1 fst_safe | |||
| 	// 2 frame_received | |||
| 	// 3 frame_reported | |||
| 	// 4 idle | |||
| 	// 5 resync | |||
| 	rrep : [0..4]; | |||
| 	// 0 bottom | |||
| 	// 1 fst | |||
| 	// 2 inc | |||
| 	// 3 ok | |||
| 	// 4 nok | |||
| 	fr : bool; | |||
| 	lr : bool; | |||
| 	br : bool; | |||
| 	r_ab : bool; | |||
| 	recv : bool; | |||
| 	 | |||
| 	 | |||
| 	// new_file | |||
| 	[SyncWait] (r=0) -> (r'=0); | |||
| 	[aG] (r=0) -> (r'=1) & (fr'=fs) & (lr'=ls) & (br'=bs) & (recv'=T); | |||
| 	// fst_safe_frame | |||
| 	[] (r=1) -> (r'=2) & (r_ab'=br); | |||
| 	// frame_received | |||
| 	[] (r=2) & (r_ab=br) & (fr=true) & (lr=false)  -> (r'=3) & (rrep'=1); | |||
| 	[] (r=2) & (r_ab=br) & (fr=false) & (lr=false) -> (r'=3) & (rrep'=2); | |||
| 	[] (r=2) & (r_ab=br) & (fr=false) & (lr=true)  -> (r'=3) & (rrep'=3); | |||
| 	[aA] (r=2) & !(r_ab=br) -> (r'=4);   | |||
| 	// frame_reported | |||
| 	[aA] (r=3) -> (r'=4) & (r_ab'=!r_ab); | |||
| 	// idle | |||
| 	[aG] (r=4) -> (r'=2) & (fr'=fs) & (lr'=ls) & (br'=bs) & (recv'=T); | |||
| 	[SyncWait] (r=4) & (ls=true) -> (r'=5); | |||
| 	[SyncWait] (r=4) & (ls=false) -> (r'=5) & (rrep'=4); | |||
| 	// resync | |||
| 	[SyncWait] (r=5) -> (r'=0) & (rrep'=0); | |||
| 	 | |||
| endmodule | |||
| 	 | |||
| module checker | |||
| 
 | |||
| 	T : bool init false;	 | |||
| 
 | |||
| 	[NewFile] (T=false) -> (T'=false); | |||
| 	[NewFile] (T=false) -> (T'=true); | |||
| 	 | |||
| endmodule | |||
| 
 | |||
| module	channelK | |||
| 
 | |||
| 	k : [0..2]; | |||
| 	 | |||
| 	// idle | |||
| 	[aF] (k=0) -> pK : (k'=1) + 1-pK : (k'=2); | |||
| 	// sending | |||
| 	[aG] (k=1) -> (k'=0); | |||
| 	// lost | |||
| 	[TO_Msg] (k=2) -> (k'=0); | |||
| 	 | |||
| endmodule | |||
| 
 | |||
| module	channelL | |||
| 
 | |||
| 	l : [0..2]; | |||
| 	 | |||
| 	// idle | |||
| 	[aA] (l=0) -> pL : (l'=1) + 1-pL : (l'=2); | |||
| 	// sending | |||
| 	[aB] (l=1) -> (l'=0); | |||
| 	// lost | |||
| 	[TO_Ack] (l=2) -> (l'=0); | |||
| 	 | |||
| endmodule | |||
| 
 | |||
| rewards | |||
| 	[TO_Msg] true : TOMsg; | |||
| 	[TO_Ack] true : TOAck; | |||
| endrewards | |||
| 
 | |||
| 
 | |||
						Write
						Preview
					
					
					Loading…
					
					Cancel
						Save
					
		Reference in new issue