ctmc
const int l_init;
const double phi = 0.00334;
const double lambda1 = 0.01667;
const double lambda2 = 0.16;
const double mu1 = 0.033;
const double mu2;
const double delta1 = 0.00035;
const double delta2;
const int size1;
const int size2;
const double alpha;
const double beta;
const double xi = 0.3;
const double nu = 12;
module ProgLoad
pl : [1..3] init l_init;
[prog_job] pl=1 -> lambda1 : (pl'=1);
[prog_job] pl=2 -> lambda2 : (pl'=2);
[c] true -> (pl'=mod(pl,3)+1);
endmodule
module UserLoad
ul : [1..3] init l_init;
[user_job] ul=1 -> mu1 : (ul'=1);
[user_job] ul=2 -> mu2 : (ul'=2);
[c] true -> (ul'=mod(ul,3)+1);
endmodule
module FailLoad
fl : [1..3] init l_init;
[fail] fl=1 -> delta1 : (fl'=1);
[fail] fl=2 -> delta2 : (fl'=2);
[c] true -> (fl'=mod(fl,3)+1);
endmodule
module LoadPhase
[c] true -> phi : true;
endmodule
module ProgJobQueue
pjq : [0..size1];
[prog_job] pjq<size1 -> (pjq'=pjq+1);
[get_prog_job1] pjq>0 -> alpha : (pjq'=pjq-1);
[get_prog_job2] pjq>0 -> alpha : (pjq'=pjq-1);
[get_prog_job3] pjq>0 -> alpha : (pjq'=pjq-1);
[get_prog_job4] pjq>0 -> alpha : (pjq'=pjq-1);
endmodule
module UserJobQueue
ujq : [0..size2];
[user_job] ujq<size2 -> (ujq'=ujq+1);
[get_user_job1] ujq>0 -> alpha : (ujq'=ujq-1);
[get_user_job2] ujq>0 -> alpha : (ujq'=ujq-1);
[get_user_job3] ujq>0 -> alpha : (ujq'=ujq-1);
[get_user_job4] ujq>0 -> alpha : (ujq'=ujq-1);
[get_prog_job1] ujq=0 -> true;
[get_prog_job2] ujq=0 -> true;
[get_prog_job3] ujq=0 -> true;
[get_prog_job4] ujq=0 -> true;
endmodule
module FailQueue
fq : [0..1];
[fail] fq=0 -> (fq'=1);
[repair] fq=1 -> beta : (fq'=0);
[prog_job] fq=0 -> true;
[user_job] fq=0 -> true;
[get_prog_job1] fq=0 -> true;
[get_prog_job2] fq=0 -> true;
[get_prog_job3] fq=0 -> true;
[get_prog_job4] fq=0 -> true;
[get_user_job1] fq=0 -> true;
[get_user_job2] fq=0 -> true;
[get_user_job3] fq=0 -> true;
[get_user_job4] fq=0 -> true;
endmodule
module Processor1
p1 : [0..3];
[get_user_job1] p1=0 -> (p1'=1);
[get_prog_job1] p1=0 -> (p1'=2);
[user_job_ready1] p1=1 -> nu : (p1'=0);
[prog_job_ready1] p1=2 -> xi : (p1'=0);
[fail] p1!=3 -> (p1'=3);
[repair] p1=3 -> (p1'=0);
endmodule
module Processor2 = Processor1 [ p1=p2,
get_user_job1=get_user_job2, get_prog_job1=get_prog_job2,
user_job_ready1=user_job_ready2, prog_job_ready1=prog_job_ready2 ]
endmodule
module Processor3 = Processor1 [ p1=p3,
get_user_job1=get_user_job3, get_prog_job1=get_prog_job3,
user_job_ready1=user_job_ready3, prog_job_ready1=prog_job_ready3 ]
endmodule
module Processor4 = Processor1 [ p1=p4,
get_user_job1=get_user_job4, get_prog_job1=get_prog_job4,
user_job_ready1=user_job_ready4, prog_job_ready1=prog_job_ready4 ]
endmodule
label "avail" = fq=0;
rewards "time"
true : 1;
endrewards
rewards "availability"
fq=0 : 1;
endrewards
rewards "thru_high"
p1=1 : nu;
p2=1 : nu;
p3=1 : nu;
p4=1 : nu;
endrewards