mdp
const int QMAX;
module timer
c : [0..1];
[tick1] c=0 -> (c'=1);
[tick2] c=1 -> (c'=0);
endmodule
module PM
pm : [0..4] init 4;
[tick1] true -> (pm'=0);
[tick1] true -> (pm'=1);
[tick1] true -> (pm'=2);
[tick1] true -> (pm'=3);
[tick1] true -> (pm'=4);
endmodule
module SR
sr : [0..1] init 0;
[tick2] sr=0 -> 0.898: (sr'=0) + 0.102: (sr'=1);
[tick2] sr=1 -> 0.454: (sr'=0) + 0.546: (sr'=1);
endmodule
module BAT
bat : [0..1] init 1;
[] bat=0 -> (bat'=0);
[tick2] bat=1 -> 0.001 : (bat'=0) + 0.999 : (bat'=1);
endmodule
module SP
sp : [0..10] init 9;
[tick2] sp=2 -> 0.75 : (sp'=2) + 0.25 : (sp'=3);
[tick2] sp=4 -> 0.25 : (sp'=0) + 0.75 : (sp'=4);
[tick2] sp=5 -> 0.995 : (sp'=5) + 0.005 : (sp'=6);
[tick2] sp=7 -> 0.005 : (sp'=0) + 0.995 : (sp'=7);
[tick2] sp=8 -> 0.9983 : (sp'=8) + 0.0017 : (sp'=9);
[tick2] sp=10 -> 0.0017 : (sp'=0) + 0.9983 : (sp'=10);
[tick2] sp=0 & pm=0 -> (sp'=0);
[tick2] sp=1 & pm=0 -> (sp'=0);
[tick2] sp=3 & pm=0 -> (sp'=4);
[tick2] sp=6 & pm=0 -> (sp'=7);
[tick2] sp=9 & pm=0 -> (sp'=10);
[tick2] sp=0 & pm=1 -> (sp'=1);
[tick2] sp=1 & pm=1 -> (sp'=1);
[tick2] sp=3 & pm=1 -> (sp'=3);
[tick2] sp=6 & pm=1 -> (sp'=6);
[tick2] sp=9 & pm=1 -> (sp'=9);
[tick2] sp=0 & pm=2 -> (sp'=2);
[tick2] sp=1 & pm=2 -> (sp'=2);
[tick2] sp=3 & pm=2 -> (sp'=3);
[tick2] sp=6 & pm=2 -> (sp'=6);
[tick2] sp=9 & pm=2 -> (sp'=9);
[tick2] sp=0 & pm=3 -> (sp'=5);
[tick2] sp=1 & pm=3 -> (sp'=5);
[tick2] sp=3 & pm=3 -> (sp'=5);
[tick2] sp=6 & pm=3 -> (sp'=6);
[tick2] sp=9 & pm=3 -> (sp'=9);
[tick2] sp=0 & pm=4 -> (sp'=8);
[tick2] sp=1 & pm=4 -> (sp'=8);
[tick2] sp=3 & pm=4 -> (sp'=8);
[tick2] sp=6 & pm=4 -> (sp'=8);
[tick2] sp=9 & pm=4 -> (sp'=9);
endmodule
module SQ
q : [0..QMAX] init 0;
[tick2] sr=0 & sp=0 -> (q'=max(q-1,0));
[tick2] sr=1 & sp=0 -> (q'=q);
[tick2] sr=0 & sp>0 -> (q'=q);
[tick2] sr=1 & sp>0 -> (q'=min(q+1,QMAX));
endmodule
rewards "time"
[tick2] bat=1 : 1;
endrewards
rewards "power"
[tick2] sp=0 & c=1 : 2.5;
[tick2] sp=1 & c=1 : 1.5;
[tick2] sp=2 & c=1 : 2.5;
[tick2] sp=3 & c=1 : 0.8;
[tick2] sp=4 & c=1 : 2.5;
[tick2] sp=5 & c=1 : 2.5;
[tick2] sp=6 & c=1 : 0.3;
[tick2] sp=7 & c=1 : 2.5;
[tick2] sp=8 & c=1 : 2.5;
[tick2] sp=9 & c=1 : 0.1;
[tick2] sp=10 & c=1 : 2.5;
endrewards
rewards "queue"
[tick2] c=1 : q;
endrewards
rewards "lost"
[tick2] sr=1 & sp>0 & q=2 : 1;
endrewards