csg
player user1 user1 endplayer
player user2 user2 endplayer
player user3 user3 endplayer
const int powmax;
const int emax;
const double fail;
module user1
e1 : [0..emax] init emax;
pow1 : [1..powmax] init 1;
[done1] e1=0 -> true;
[n1] e1>0 -> (e1'=max(0,e1-pow1));
[inc1] e1>0 & (pow1<powmax) -> 1-fail : (pow1'=pow1+1) & (e1'=max(0,e1-pow1)) + fail : (e1'=max(0,e1-pow1));
endmodule
module user2=user1[e1=e2,pow1=pow2,n1=n2,inc1=inc2,done1=done2] endmodule
module user3=user1[e1=e3,pow1=pow3,n1=n3,inc1=inc3,done1=done3] endmodule
rewards "r1"
e1>0 & e2>0 & e3>0 : 1000*(1 - pow(2,-(pow1/2) / (pow2 + pow3 + 1)));
e1>0 & e2>0 & e3=0 : 1000*(1 - pow(2,-(pow1/2) / (pow2 + 1)));
e1>0 & e2=0 & e3>0 : 1000*(1 - pow(2,-(pow1/2) / (pow3 + 1)));
e1>0 & e2=0 & e3=0 : 1000*(1 - pow(2,-(pow1/2)));
endrewards
rewards "r2"
e2>0 & e1>0 & e3>0 : 1000*(1 - pow(2,-(pow2/2) / (pow1 + pow3 + 1)));
e2>0 & e1>0 & e3=0 : 1000*(1 - pow(2,-(pow2/2) / (pow1 + 1)));
e2>0 & e1=0 & e3>0 : 1000*(1 - pow(2,-(pow2/2) / (pow3 + 1)));
e2>0 & e1=0 & e3=0 : 1000*(1 - pow(2,-(pow2/2)));
endrewards
rewards "r3"
e3>0 & e1>0 & e2>0 : 1000*(1 - pow(2,-(pow3/2) / (pow1 + pow2 + 1)));
e3>0 & e1>0 & e2=0 : 1000*(1 - pow(2,-(pow3/2) / (pow1 + 1)));
e3>0 & e1=0 & e2>0 : 1000*(1 - pow(2,-(pow3/2) / (pow2 + 1)));
e3>0 & e1=0 & e2=0 : 1000*(1 - pow(2,-(pow3/2)));
endrewards