1%{ @file sn_get_product_form_params.m
2 % @brief Extracts standard product-form parameters from the network structure
4 % @author LINE Development Team
8 % @brief Extracts standard product-form parameters from the network structure
11 % This function extracts
class-level parameters from a network structure
for
12 % use in product-form queueing network analysis. The mu parameter includes
13 % extra elements beyond population |N| as required by MVALDMX.
17 % [lambda,D,N,Z,mu,S,V] = sn_get_product_form_params(sn)
22 % <tr><th>Name<th>Description
23 % <tr><td>sn<td>Network structure
28 % <tr><th>Name<th>Description
29 % <tr><td>lambda<td>Arrival rates
for open
classes
30 % <tr><td>D<td>Service demands at queuing stations
31 % <tr><td>N<td>Population vector
32 % <tr><td>Z<td>Think times (service demands at delay stations)
33 % <tr><td>mu<td>Load-dependent service capacity scaling factors
34 % <tr><td>S<td>Number of servers at queuing stations
35 % <tr><td>V<td>Visit ratios
38function [lambda,D,N,Z,mu,S,V]= sn_get_product_form_params(sn)
42queueIndices = find(sn.nodetype == NodeType.Queue);
43delayIndices = find(sn.nodetype == NodeType.Delay);
44sourceIndex = find(sn.nodetype == NodeType.Source);
45Mq = length(queueIndices); % number of queues
46Mz = length(delayIndices); % number of delays
48S = sn.nservers(sn.nodeToStation(queueIndices));
51 lambda(r) = sn.rates(sn.nodeToStation(sourceIndex),r);
56Nct = sum(N(isfinite(N)));
57mu = ones(Mq, ceil(Nct)+max(S(isfinite(S))));
60 c = find(sn.chains(:,r),1);
62 D(ist,r) = sn.visits{c}(sn.nodeToStateful(queueIndices(ist)),r) / sn.rates(sn.nodeToStation(queueIndices(ist)),r) / sn.visits{c}(sn.stationToStateful(sn.refstat(r)),sn.refclass(c));
64 D(ist,r) = sn.visits{c}(sn.nodeToStateful(queueIndices(ist)),r) / sn.rates(sn.nodeToStation(queueIndices(ist)),r);
67 mu(ist,1:size(mu,2)) = min(1:size(mu,2), sn.nservers(sn.nodeToStation(queueIndices(ist))));
69Z = zeros(max(1,Mz),R);
72 c = find(sn.chains(:,r),1);
74 Z(ist,r) = sn.visits{c}(sn.nodeToStateful(delayIndices(ist)),r) / sn.rates(sn.nodeToStation(delayIndices(ist)),r) / sn.visits{c}(sn.stationToStateful(sn.refstat(r)),sn.refclass(c));
76 Z(ist,r) = sn.visits{c}(sn.nodeToStateful(delayIndices(ist)),r) / sn.rates(sn.nodeToStation(delayIndices(ist)),r);