81 throw InputError(
"dqsys_bernoulli1: L must be a positive integer");
86 std::vector<T> boff(L + 1);
88 for (std::size_t n = 0; n <= L; ++n) boff[n] = b[0];
89 }
else if (b.size() == L + 1) {
92 throw InputError(
"dqsys_bernoulli1: the arrival probability vector must have one entry "
97 for (std::size_t n = 0; n < L; ++n) pv[n] = p[0];
98 }
else if (p.size() == L) {
100 }
else if (p.size() == L + 1) {
103 pv.assign(p.begin() + 1, p.end());
105 throw InputError(
"dqsys_bernoulli1: the service probability vector must have L or L+1 "
108 for (std::size_t n = 0; n <= L; ++n) {
109 if (boff[n] < zero || boff[n] > one) {
110 throw InputError(
"dqsys_bernoulli1: arrival probabilities must lie in [0,1]");
113 for (std::size_t n = 0; n < L; ++n) {
114 if (!(pv[n] > zero) || pv[n] > one) {
115 throw InputError(
"dqsys_bernoulli1: service probabilities must lie in (0,1]");
118 std::vector<T> badm = boff;
120 for (std::size_t n = 0; n < L; ++n) {
121 if (!(badm[n] < one)) {
124 throw InputError(
"dqsys_bernoulli1: arrival probabilities below the capacity must be "
125 "strictly less than one");
131 std::vector<T> u(L + 1, zero);
132 u[0] = one / (one - badm[0]);
133 for (std::size_t n = 1; n <= L; ++n) {
134 const T q = (n >= 2) ? (one - pv[n - 2]) : one;
135 u[n] = u[n - 1] * badm[n - 1] * q / ((one - badm[n]) * pv[n - 1]);
138 for (std::size_t n = 0; n <= L; ++n) H = H + u[n];
145 for (std::size_t n = 0; n <= L; ++n) r.
pmf[n] = u[n] / H;
149 std::vector<T> v(L, zero);
150 v[0] = badm[0] / ((one - badm[0]) * (one - badm[1]));
151 for (std::size_t n = 1; n < L; ++n) {
152 v[n] = v[n - 1] * badm[n] * (one - pv[n - 1]) / ((one - badm[n + 1]) * pv[n - 1]);
155 for (std::size_t n = 0; n < L; ++n) Ha = Ha + v[n];
158 for (std::size_t n = 0; n < L; ++n) r.
arrivalPmf[n] = v[n] / Ha;
163 T q = zero, t = zero, offered = zero;
164 for (std::size_t n = 0; n <= L; ++n) {
166 offered = offered + r.
pmf[n] * boff[n];
167 if (n >= 1) t = t + r.
pmf[n] * pv[n - 1];
171 r.
lossProb = (offered > zero) ? (r.
pmf[L] * boff[L] / offered) : zero;