* Example 4:
echo Example 4:
* Refer to the paper by Kulkarni, Nicola, Smith and Trivedi in
* Fault-Tolerant Computing Symposium 1986, Vienna.
* This example if that of an M/M/N/N+b queue with failure/repair

* Example 4a:
* Model with repair
markov ex1(b)
81 71 8*lam
71 61 7*lam
61 51 6*lam
51 41 5*lam
41 31 4*lam
31 21 3*lam
21 11 2*lam
11 01 lam
01 11 mu
11 21 mu
21 31 mu
31 41 mu
41 51 mu
51 61 mu
61 71 mu
71 81 mu
81 80 b*gam
80 81 tau
71 70 b*gam
70 71 tau
61 60 b*gam
60 61 tau
51 50 b*gam
50 51 tau
41 40 b*gam
40 41 tau
31 30 b*gam
30 31 tau
21 20 b*gam
20 21 tau
11 10 b*gam
10 11 tau
01 00 b*gam
00 01 tau
reward
81 1
71 1
61 1
51 1
41 1
31 1
21 1
11 1
01 0
80 0
70 0
60 0
50 0
40 0
30 0
20 0
10 0
00 0
end
end

*the keyword exrss is used to compute the expected steady-state reward
* rate = \sum r_i \pi_i

func avail1(b) 
  exrss(ex1;b)
end

* Example 4b:
* Model with no repair
markov ex2(b)
81 71 8*lam
71 61 7*lam
61 51 6*lam
51 41 5*lam
41 31 4*lam
31 21 3*lam
21 11 2*lam
11 01 lam
81 80 b*gam
71 70 b*gam
61 60 b*gam
51 50 b*gam
41 40 b*gam
31 30 b*gam
21 20 b*gam
11 10 b*gam
reward
81 1
71 1
61 1
51 1
41 1
31 1
21 1
11 1
01 0
80 0
70 0
60 0
50 0
40 0
30 0
20 0
10 0
end
81 1.0
end

* Keyword exrt is used to compute the transient reward rate
* at time t; that is \sum P_i(t) r_i
* the use of exrt in this way is not legal in sharpe at this time.

* func rel2(t,b) exrt(t;ex2;b)

* Example 4c:
markov ex3(b)
81 71 8*lam
71 61 7*lam
61 51 6*lam
51 41 5*lam
41 31 4*lam
31 21 3*lam
21 11 2*lam
11 01 lam
01 11 mu
11 21 mu
21 31 mu
31 41 mu
41 51 mu
51 61 mu
61 71 mu
71 81 mu
81 80 b*gam
80 81 tau
71 70 b*gam
70 71 tau
61 60 b*gam
60 61 tau
51 50 b*gam
50 51 tau
41 40 b*gam
40 41 tau
31 30 b*gam
30 31 tau
21 20 b*gam
20 21 tau
11 10 b*gam
10 11 tau
01 00 b*gam
00 01 tau
reward
81 1
71 1
61 1
51 1
41 1
31 1
21 1
11 1
01 0
80 0
70 0
60 0
50 0
40 0
30 0
20 0
10 0
00 0
end
end

func avail3(b) 
  exrss(ex3;b)
end

* Example 4d:
markov ex4(b)
81 71 8*lam
71 61 7*lam
61 51 6*lam
51 41 5*lam
41 31 4*lam
31 21 3*lam
21 11 2*lam
11 01 lam
81 80 b*gam
71 70 b*gam
61 60 b*gam
51 50 b*gam
41 40 b*gam
31 30 b*gam
21 20 b*gam
11 10 b*gam
reward
81 1
71 1
61 1
51 1
41 1
31 1
21 1
11 1
01 0
80 0
70 0
60 0
50 0
40 0
30 0
20 0
10 0
end
81 1.0
end

bind
lam 0.01/(7*24)
mu 0.1666
gam 0.22/(7*24)
tau 0.1666
end

loop b,4,16,4
expr avail1(b),  avail3(b)
expr mean (ex4;b) 
* The keyword rvalue is used to compute the distribution of accumulated
*reward until absorption (counterpart of value)
expr 1-rvalue (0;ex4;b) 
expr 1-rvalue (125;ex4;b) 
expr 1-rvalue (250;ex4;b) 
expr 1-rvalue (500;ex4;b) 
expr 1-rvalue (625;ex4;b) 
expr 1-rvalue (750;ex4;b) 
expr 1-rvalue (1000;ex4;b) 
end

eval(ex2;4) 10 10 1 exrt
eval(ex4;4) 10 10 1 exrt

end
