LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
pfqn_procomom2.m
1%{
2%{
3 % @file pfqn_procomom2.m
4 % @brief Product-form CoMoM for 2-station repairman model (queue + delay).
5%}
6%}
7
8%{
9%{
10 % @brief Product-form CoMoM for 2-station repairman model (queue + delay).
11 % @fn pfqn_procomom2(L, N, Z, mu, m)
12 % @param L Service demand vector.
13 % @param N Population vector.
14 % @param Z Think time vector.
15 % @param mu Load-dependent rates (optional).
16 % @param m Replication factor (default: 1).
17 % @return pk Marginal state probabilities.
18 % @return lG Logarithm of normalizing constant.
19 % @return G Normalizing constant.
20 % @return T Transfer matrices.
21 % @return F Product transfer matrix.
22 % @return B Combined transfer matrix.
23%}
24%}
25function [pk,lG,G,T,F,B]=pfqn_procomom2(L,N,Z,mu,m)
26% Marginal state probabilities for the queue in a model consisting of a
27% queueing station and a delay station only.
28
29if nargin<4 || isempty(mu)
30 mu = ones(m,sum(N)+1);
31else
32 mu = [1,mu(:)'];
33end
34if nargin<5
35 m=1;
36end
37[~,R]=size(L);
38% compute solution for [1,0,0,...,0]
39p0 = zeros(sum(N)+1,1); p0(end)=1;
40% compute the rest
41tic;
42for r=1:R
43 % generate F2r matrix
44 T{r} = sparse(1+sum(N),1+sum(N));
45 for n=sum(N):-1:1
46 row = sum(N)-n+1;
47 T{r}(row,row) = Z(r);
48 T{r}(row,row+1) = (n+m-1)*L(r)/mu(1+n);
49 end
50 T{r}(sum(N)+1,sum(N)+1) = Z(r);
51end
52F = eye(sum(N)+1);
53B = eye(sum(N)+1);
54for r=1:R
55 F = F*T{r}^N(r)/factorial(N(r));
56 B = B*T{r};
57end
58pk = (F*p0)';
59G = sum(pk);
60if any(~isfinite(pk(1,1))) || ~isfinite(G)
61 % todo
62 lG = logsumexp(log(pk(1,:)));
63elseif ~isfinite(G)
64 lG = logsumexp(log(pk(1,:)));
65else
66 lG = log(G);
67end
68pk = pk/G;
69pk= pk(end:-1:1);
70%% test
71Q=0;
72% V=0;
73for n=0:sum(N)
74 psingle(n+1)= pk(n+1);
75end
76psingle=psingle/sum(psingle);
77for n=1:sum(N)
78 Q=Q + n * psingle(n+1);
79% V=V + (n^2-n) * psingle(n+1);
80end
81% psingle
82QN=double(Q)
83[XNMVA,QNMVA,~,~,~,~,pik]=pfqn_mvald(repmat(L,m,1),N,Z,repmat(mu(:,2:end),m,1))
84% VNMVA=0;
85% for n=1:sum(N)
86% VNMVA=VNMVA+(n^2-n)*pik(1,:);
87% end
88% QNMVA = sum(QNMVA,2)
89% QNTOTMVA=sum(QNMVA)
90% [V,VNMVA]
91end