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.
 
 
 
 
 
 

107 lines
3.0 KiB

// workstation cluster [HHK00]
// dxp/gxn 11/01/00
ctmc
const int N; // number of workstations in each cluster
const int left_mx = N; // number of work stations in left cluster
const int right_mx = N; // number of work stations in right cluster
// minimum QOS requires 3/4*N connected workstations operational
const int k=floor(0.75*N);
formula minimum = (left_n>=k & Toleft_n) |
(right_n>=k & Toright_n) |
((left_n+right_n)>=k & Toleft_n & line_n & Toright_n);
// rates
const double line_rate = 0.0002;
const double Toleft_rate = 0.00025;
const double Toright_rate = 0.00025;
// left cluster
module Left
left_n : [0..left_mx] init left_mx; // number of workstations operational
left : bool; // being repaired?
[startLeft] !left & (left_n<left_mx) -> 1 : (left'=true);
[repairLeft] left & (left_n<left_mx) -> 1 : (left'=false) & (left_n'=left_n+1);
[] (left_n>0) -> 0.002*left_n : (left_n'=left_n-1);
endmodule
// right cluster
module Right = Left[left_n=right_n,
left=right,
left_mx=right_mx,
startLeft=startRight,
repairLeft=repairRight ]
endmodule
// repair unit
module Repairman
r : bool; // repairing?
[startLeft] !r -> 10 : (r'=true); // inspect Left
[startRight] !r -> 10 : (r'=true); // inspect Right
[startToLeft] !r -> 10 : (r'=true); // inspect ToLeft
[startToRight] !r -> 10 : (r'=true); // inspect ToRight
[startLine] !r -> 10 : (r'=true); // inspect Line
[repairLeft] r -> 2 : (r'=false); // repair Left
[repairRight] r -> 2 : (r'=false); // repair Right
[repairToLeft] r -> 0.25 : (r'=false); // repair ToLeft
[repairToRight] r -> 0.25 : (r'=false); // repair ToRight
[repairLine] r -> 0.125 : (r'=false); // repair Line
endmodule
// line/backbone
module Line
line : bool; // being repaired?
line_n : bool init true; // working?
[startLine] !line & !line_n -> 1 : (line'=true);
[repairLine] line & !line_n -> 1 : (line'=false) & (line_n'=true);
[] line_n -> line_rate : (line_n'=false);
endmodule
// left switch
module ToLeft = Line[line=Toleft,
line_n=Toleft_n,
line_rate=Toleft_rate,
startLine=startToLeft,
repairLine=repairToLeft ]
endmodule
// right switch
module ToRight = Line[line=Toright,
line_n=Toright_n,
line_rate=Toright_rate,
startLine=startToRight,
repairLine=repairToRight ]
endmodule
// reward structures
// percentage of operational workstations stations
rewards "per_oper"
true : 100*(left_n+right_n)/(2*N);
endrewards
// time spent below minimum QoS
rewards "below_min"
!minimum : 1;
endrewards
// number of repairs
rewards "repairs"
[repairLeft] REPAIR : 1;
[repairRight] REPAIR : 1;
[repairToLeft] REPAIR : 1;
[repairToRight] REPAIR : 1;
[repairLine] REPAIR : 1;
endrewards