66 const std::size_t R =
sn.nclasses;
70 for (std::size_t r = 0; r < R; ++r) p.
N[r] =
sn.classes[r].population;
74 std::size_t sourceStation = 0;
75 for (std::size_t i = 0; i <
sn.nstations; ++i) {
78 else if (nt == qn::NodeType::Delay) p.
delay_stations.push_back(i + 1);
79 else if (nt == qn::NodeType::Source) sourceStation = i + 1;
84 for (std::size_t r = 0; r < R; ++r)
85 if (std::isinf(p.
N[r]) && sourceStation > 0 && !
sn.disabled[sourceStation - 1][r])
86 p.
lambda[r] =
sn.rates(sourceStation - 1, r);
90 for (std::size_t i = 0; i < Mq; ++i) {
92 if (std::isfinite(p.
S[i]) && p.
S[i] > maxS) maxS = p.
S[i];
97 if (std::isfinite(n)) Nct += n;
98 const std::size_t width =
99 static_cast<std::size_t
>(std::ceil(Nct)) +
static_cast<std::size_t
>(maxS);
103 const auto demand = [&](std::size_t ist, std::size_t r) {
104 std::size_t c =
sn.nchains;
105 for (std::size_t cc = 0; cc <
sn.nchains; ++cc)
106 if (
sn.chains[cc][r]) { c = cc;
break; }
107 if (c ==
sn.nchains ||
sn.disabled[ist - 1][r] ||
sn.rates(ist - 1, r) == zero)
109 const std::size_t sf =
sn.stateful_of_station(ist) - 1;
110 T num = T(
sn.visits[c](sf, r) /
sn.rates(ist - 1, r));
111 if (
sn.refclass[c] > 0) {
112 const std::size_t rsf =
sn.stateful_of_station(
sn.classes[r].refstat) - 1;
113 const T den =
sn.visits[c](rsf,
sn.refclass[c] - 1);
114 if (den == zero)
return zero;
121 p.
mu =
Matrix<T>(Mq, std::max<std::size_t>(1, width), one);
122 for (std::size_t i = 0; i < Mq; ++i) {
123 for (std::size_t r = 0; r < R; ++r) p.
D(i, r) = demand(p.
queue_stations[i], r);
124 for (std::size_t n = 1; n <= p.
mu.cols(); ++n)
126 std::min<double>(
static_cast<double>(n), p.
S[i]));
129 p.
Z =
Matrix<T>(std::max<std::size_t>(1, Mz), R, zero);
130 for (std::size_t i = 0; i < Mz; ++i)
131 for (std::size_t r = 0; r < R; ++r) p.
Z(i, r) = demand(p.
delay_stations[i], r);
134 for (std::size_t c = 0; c <
sn.nchains; ++c)
135 for (std::size_t i = 0; i <
sn.nstations; ++i) {
136 const std::size_t sf =
sn.stateful_of_station(i + 1) - 1;
137 for (std::size_t r = 0; r < R; ++r) p.
V(i, r) = T(p.
V(i, r) +
sn.visits[c](sf, r));