Mercurial > forge
changeset 9628:d91fd1efc9bf octave-forge
added function ctmc_check_Q()
author | mmarzolla |
---|---|
date | Sun, 11 Mar 2012 15:45:11 +0000 |
parents | 8e744625e429 |
children | 387026da0f94 |
files | main/queueing/ChangeLog main/queueing/DESCRIPTION main/queueing/Makefile main/queueing/NEWS main/queueing/doc/markovchains.txi main/queueing/doc/queueing.html main/queueing/doc/queueing.pdf main/queueing/inst/ctmc.m main/queueing/inst/ctmc_check_Q.m main/queueing/inst/ctmc_exps.m main/queueing/inst/ctmc_fpt.m main/queueing/inst/ctmc_mtta.m main/queueing/inst/ctmc_taexps.m main/queueing/inst/dtmc.m main/queueing/inst/dtmc_check_P.m main/queueing/inst/dtmc_fpt.m main/queueing/inst/dtmc_is_irreducible.m main/queueing/inst/qnmvablo.m main/queueing/inst/qnvisits.m |
diffstat | 19 files changed, 629 insertions(+), 391 deletions(-) [+] |
line wrap: on
line diff
--- a/main/queueing/ChangeLog Sun Mar 11 11:20:31 2012 +0000 +++ b/main/queueing/ChangeLog Sun Mar 11 15:45:11 2012 +0000 @@ -1,18 +1,19 @@ -2012-02-XX Moreno Marzolla <marzolla@cs.unibo.it> +2012-03-XX Moreno Marzolla <marzolla@cs.unibo.it> * Version 1.X.0 released * Fixed bug in qnvisits() which made the function behave incorrectly under particular degenerate cases. * Fixed bug in ctmc_exps() (wrong initial value in call to lsode) - * Function ctmc_exps() can now also compute the expected sojourn time + * ctmc_exps() can now also compute the expected sojourn time until absorption for absorbing CTMCs. - * Function ctmc_exps() and ctmc_taexps() accept a scalar as second + * ctmc_exps() and ctmc_taexps() accept a scalar as second argument; the old syntax is still supported, but may be deprecated in future releases. - * Function ctmc_bd() now returns the infinitesimal generator matrix + * ctmc_bd() now returns the infinitesimal generator matrix of the birth-death process, not the steady-state solution. - * Function ctmc_bd_solve() has been removed - * New function dtmc_bd() + * ctmc_bd_solve() has been removed + * dtmc_bd() has been added + * ctmc_check_Q() has been added * Miscellaneous fixes/improvements to the documentation 2012-02-04 Moreno Marzolla <marzolla@cs.unibo.it>
--- a/main/queueing/DESCRIPTION Sun Mar 11 11:20:31 2012 +0000 +++ b/main/queueing/DESCRIPTION Sun Mar 11 15:45:11 2012 +0000 @@ -1,6 +1,6 @@ Name: queueing Version: 1.X.0 -Date: 2012-02-XX +Date: 2012-03-XX Author: Moreno Marzolla <marzolla@cs.unibo.it> Maintainer: Moreno Marzolla <marzolla@cs.unibo.it> Title: Queueing networks and Markov chains analysis package for GNU Octave
--- a/main/queueing/Makefile Sun Mar 11 11:20:31 2012 +0000 +++ b/main/queueing/Makefile Sun Mar 11 15:45:11 2012 +0000 @@ -1,5 +1,5 @@ VERSIONNUM=1.X.0 -VERSIONDATE="2012-02-XX" +VERSIONDATE="2012-03-XX" PROGNAME=queueing DISTNAME=$(PROGNAME)-$(VERSIONNUM)
--- a/main/queueing/NEWS Sun Mar 11 11:20:31 2012 +0000 +++ b/main/queueing/NEWS Sun Mar 11 15:45:11 2012 +0000 @@ -15,6 +15,8 @@ ** Function ctmc_bd_solve() has been removed +** New function ctmc_check_Q() added + Summary of important user-visible changes for queueing-1.0.0 ------------------------------------------------------------------------------
--- a/main/queueing/doc/markovchains.txi Sun Mar 11 11:20:31 2012 +0000 +++ b/main/queueing/doc/markovchains.txi Sun Mar 11 15:45:11 2012 +0000 @@ -67,6 +67,11 @@ in state @math{i} at step @math{n}. @c +@DOCSTRING(dtmc_check_P) + +@c +@c +@c @subsection State occupancy probabilities Given the transition probability matrix @math{\bf P} and the initial @@ -143,6 +148,8 @@ @node Continuous-Time Markov Chains @section Continuous-Time Markov Chains +@DOCSTRING(ctmc_check_Q) + @menu * State occupancy probabilities:: * Birth-Death process:: @@ -319,5 +326,6 @@ @c @node First Passage Times @subsection First Passage Times + @DOCSTRING(ctmc_fpt)
--- a/main/queueing/doc/queueing.html Sun Mar 11 11:20:31 2012 +0000 +++ b/main/queueing/doc/queueing.html Sun Mar 11 15:45:11 2012 +0000 @@ -817,6 +817,19 @@ n. \pi_i(n) denotes the probability that the system is in state i at step n. + <p><a name="doc_002ddtmc_005fcheck_005fP"></a> + +<div class="defun"> +— Function File: [<var>result</var> <var>err</var>] = <b>dtmc_check_P</b> (<var>P</var>)<var><a name="index-dtmc_005fcheck_005fP-1"></a></var><br> +<blockquote> + <p><a name="index-Markov-chain_002c-discrete-time-2"></a> +If <var>P</var> is a valid transition probability matrix, return +the size (number of rows or columns) of <var>P</var>. If <var>P</var> is not +a transition probability matrix, set <var>result</var> to zero, and +<var>err</var> to an appropriate error string. + + </blockquote></div> + <h4 class="subsection">4.1.1 State occupancy probabilities</h4> <p>Given the transition probability matrix \bf P and the initial @@ -836,10 +849,10 @@ <p><a name="doc_002ddtmc"></a> <div class="defun"> -— Function File: <var>p</var> = <b>dtmc</b> (<var>P</var>)<var><a name="index-dtmc-1"></a></var><br> -— Function File: <var>p</var> = <b>dtmc</b> (<var>P, n, p0</var>)<var><a name="index-dtmc-2"></a></var><br> +— Function File: <var>p</var> = <b>dtmc</b> (<var>P</var>)<var><a name="index-dtmc-3"></a></var><br> +— Function File: <var>p</var> = <b>dtmc</b> (<var>P, n, p0</var>)<var><a name="index-dtmc-4"></a></var><br> <blockquote> - <p><a name="index-Markov-chain_002c-discrete-time-3"></a><a name="index-Discrete-time-Markov-chain-4"></a><a name="index-Markov-chain_002c-stationary-probabilities-5"></a><a name="index-Stationary-probabilities-6"></a> + <p><a name="index-Markov-chain_002c-discrete-time-5"></a><a name="index-Discrete-time-Markov-chain-6"></a><a name="index-Markov-chain_002c-stationary-probabilities-7"></a><a name="index-Stationary-probabilities-8"></a> With a single argument, compute the steady-state probability vector <var>p</var><code>(1), ..., </code><var>p</var><code>(N)</code> for a Discrete-Time Markov Chain given the N \times N transition @@ -900,9 +913,9 @@ <p><a name="doc_002ddtmc_005fbd"></a> <div class="defun"> -— Function File: <var>P</var> = <b>dtmc_bd</b> (<var>birth, death</var>)<var><a name="index-dtmc_005fbd-7"></a></var><br> +— Function File: <var>P</var> = <b>dtmc_bd</b> (<var>birth, death</var>)<var><a name="index-dtmc_005fbd-9"></a></var><br> <blockquote> - <p><a name="index-Markov-chain_002c-discrete-time-8"></a><a name="index-Birth_002ddeath-process-9"></a> + <p><a name="index-Markov-chain_002c-discrete-time-10"></a><a name="index-Birth_002ddeath-process-11"></a> Returns the N \times N transition probability matrix P for a birth-death process with given rates. @@ -942,10 +955,10 @@ <p><a name="doc_002ddtmc_005ffpt"></a> <div class="defun"> -— Function File: <var>M</var> = <b>dtmc_fpt</b> (<var>P</var>)<var><a name="index-dtmc_005ffpt-10"></a></var><br> -— Function File: <var>m</var> = <b>dtmc_fpt</b> (<var>P, i, j</var>)<var><a name="index-dtmc_005ffpt-11"></a></var><br> +— Function File: <var>M</var> = <b>dtmc_fpt</b> (<var>P</var>)<var><a name="index-dtmc_005ffpt-12"></a></var><br> +— Function File: <var>m</var> = <b>dtmc_fpt</b> (<var>P, i, j</var>)<var><a name="index-dtmc_005ffpt-13"></a></var><br> <blockquote> - <p><a name="index-Markov-chain_002c-discrete-time-12"></a><a name="index-First-passage-times-13"></a> + <p><a name="index-Markov-chain_002c-discrete-time-14"></a><a name="index-First-passage-times-15"></a> If called with a single argument, computes the mean first passage times <var>M</var><code>(i,j)</code>, that are the average number of transitions before state <var>j</var> is reached, starting from state <var>i</var>, for all @@ -971,9 +984,11 @@ <p><strong>OUTPUTS</strong> <dl> -<dt><var>M</var><dd>If this function is called with a single argument, the result +<dt><var>M</var><dd>If this function is called with a single argument, <var>M</var><code>(i,j)</code> is the average number of transitions before state -<var>j</var> is reached for the first time, starting from state <var>i</var>. +<var>j</var> is reached for the first time, starting from state <var>i</var>. +<var>M</var><code>(i,i)</code> is the <em>mean recurrence time</em>, and +represents the average time needed to return to state <var>i</var>. <br><dt><var>m</var><dd>If this function is called with three arguments, the result <var>m</var> is the average number of transitions before state <var>j</var> is visited @@ -994,6 +1009,19 @@ <h3 class="section">4.2 Continuous-Time Markov Chains</h3> +<p><a name="doc_002dctmc_005fcheck_005fQ"></a> + +<div class="defun"> +— Function File: [<var>result</var> <var>err</var>] = <b>ctmc_check_Q</b> (<var>Q</var>)<var><a name="index-ctmc_005fcheck_005fQ-16"></a></var><br> +<blockquote> + <p><a name="index-Markov-chain_002c-continuous-time-17"></a> +If <var>Q</var> is a valid infinitesimal generator matrix, return +the size (number of rows or columns) of <var>Q</var>. If <var>Q</var> is not +an infinitesimal generator matrix, set <var>result</var> to zero, and +<var>err</var> to an appropriate error string. + + </blockquote></div> + <ul class="menu"> <li><a accesskey="1" href="#State-occupancy-probabilities">State occupancy probabilities</a> <li><a accesskey="2" href="#Birth_002dDeath-process">Birth-Death process</a> @@ -1016,10 +1044,10 @@ <p><a name="doc_002dctmc"></a> <div class="defun"> -— Function File: <var>p</var> = <b>ctmc</b> (<var>Q</var>)<var><a name="index-ctmc-14"></a></var><br> -— Function File: <var>p</var> = <b>ctmc</b> (<var>Q, t. q0</var>)<var><a name="index-ctmc-15"></a></var><br> +— Function File: <var>p</var> = <b>ctmc</b> (<var>Q</var>)<var><a name="index-ctmc-18"></a></var><br> +— Function File: <var>p</var> = <b>ctmc</b> (<var>Q, t. q0</var>)<var><a name="index-ctmc-19"></a></var><br> <blockquote> - <p><a name="index-Markov-chain_002c-continuous-time-16"></a><a name="index-Continuous-time-Markov-chain-17"></a><a name="index-Markov-chain_002c-state-occupancy-probabilities-18"></a><a name="index-Stationary-probabilities-19"></a> + <p><a name="index-Markov-chain_002c-continuous-time-20"></a><a name="index-Continuous-time-Markov-chain-21"></a><a name="index-Markov-chain_002c-state-occupancy-probabilities-22"></a><a name="index-Stationary-probabilities-23"></a> With a single argument, compute the stationary state occupancy probability vector <var>p</var>(1), <small class="dots">...</small>, <var>p</var>(N) for a Continuous-Time Markov Chain with infinitesimal generator matrix @@ -1082,9 +1110,9 @@ <p><a name="doc_002dctmc_005fbd"></a> <div class="defun"> -— Function File: <var>Q</var> = <b>ctmc_bd</b> (<var>birth, death</var>)<var><a name="index-ctmc_005fbd-20"></a></var><br> +— Function File: <var>Q</var> = <b>ctmc_bd</b> (<var>birth, death</var>)<var><a name="index-ctmc_005fbd-24"></a></var><br> <blockquote> - <p><a name="index-Markov-chain_002c-continuous-time-21"></a><a name="index-Birth_002ddeath-process-22"></a> + <p><a name="index-Markov-chain_002c-continuous-time-25"></a><a name="index-Birth_002ddeath-process-26"></a> Returns the N \times N infinitesimal generator matrix Q for a birth-death process with given rates. @@ -1138,10 +1166,10 @@ <p><a name="doc_002dctmc_005fexps"></a> <div class="defun"> -— Function File: <var>L</var> = <b>ctmc_exps</b> (<var>Q, t, p </var>)<var><a name="index-ctmc_005fexps-23"></a></var><br> -— Function File: <var>L</var> = <b>ctmc_exps</b> (<var>Q, p</var>)<var><a name="index-ctmc_005fexps-24"></a></var><br> +— Function File: <var>L</var> = <b>ctmc_exps</b> (<var>Q, t, p </var>)<var><a name="index-ctmc_005fexps-27"></a></var><br> +— Function File: <var>L</var> = <b>ctmc_exps</b> (<var>Q, p</var>)<var><a name="index-ctmc_005fexps-28"></a></var><br> <blockquote> - <p><a name="index-Markov-chain_002c-continuous-time-25"></a><a name="index-Expected-sojourn-time-26"></a> + <p><a name="index-Markov-chain_002c-continuous-time-29"></a><a name="index-Expected-sojourn-time-30"></a> With three arguments, compute the expected times <var>L</var><code>(i)</code> spent in each state i during the time interval [0,t], assuming that the state occupancy probabilities @@ -1221,9 +1249,9 @@ <p><a name="doc_002dctmc_005ftaexps"></a> <div class="defun"> -— Function File: <var>M</var> = <b>ctmc_taexps</b> (<var>Q, t, p</var>)<var><a name="index-ctmc_005ftaexps-27"></a></var><br> +— Function File: <var>M</var> = <b>ctmc_taexps</b> (<var>Q, t, p</var>)<var><a name="index-ctmc_005ftaexps-31"></a></var><br> <blockquote> - <p><a name="index-Markov-chain_002c-continuous-time-28"></a><a name="index-Time_002dalveraged-sojourn-time-29"></a> + <p><a name="index-Markov-chain_002c-continuous-time-32"></a><a name="index-Time_002dalveraged-sojourn-time-33"></a> Compute the <em>time-averaged sojourn time</em> <var>M</var><code>(i)</code>, defined as the fraction of the time interval [0,t] spent in state i, assuming that the state occupancy probabilities at @@ -1306,9 +1334,9 @@ <p><a name="doc_002dctmc_005fmtta"></a> <div class="defun"> -— Function File: <var>t</var> = <b>ctmc_mtta</b> (<var>Q, p</var>)<var><a name="index-ctmc_005fmtta-30"></a></var><br> +— Function File: <var>t</var> = <b>ctmc_mtta</b> (<var>Q, p</var>)<var><a name="index-ctmc_005fmtta-34"></a></var><br> <blockquote> - <p><a name="index-Markov-chain_002c-continuous-time-31"></a><a name="index-Mean-time-to-absorption-32"></a> + <p><a name="index-Markov-chain_002c-continuous-time-35"></a><a name="index-Mean-time-to-absorption-36"></a> Compute the Mean-Time to Absorption (MTTA) of the CTMC described by the infinitesimal generator matrix <var>Q</var>, starting from initial occupancy probabilities <var>p</var>. If there are no absorbing states, this @@ -1369,7 +1397,7 @@ Performance Evaluation with Computer Science Applications</cite>, Wiley, 1998. - <p><a name="index-Bolch_002c-G_002e-33"></a><a name="index-Greiner_002c-S_002e-34"></a><a name="index-de-Meer_002c-H_002e-35"></a><a name="index-Trivedi_002c-K_002e-36"></a> + <p><a name="index-Bolch_002c-G_002e-37"></a><a name="index-Greiner_002c-S_002e-38"></a><a name="index-de-Meer_002c-H_002e-39"></a><a name="index-Trivedi_002c-K_002e-40"></a> <div class="node"> <a name="First-Passage-Times"></a> <p><hr> @@ -1383,10 +1411,10 @@ <p><a name="doc_002dctmc_005ffpt"></a> <div class="defun"> -— Function File: <var>M</var> = <b>ctmc_fpt</b> (<var>Q</var>)<var><a name="index-ctmc_005ffpt-37"></a></var><br> -— Function File: <var>m</var> = <b>ctmc_fpt</b> (<var>Q, i, j</var>)<var><a name="index-ctmc_005ffpt-38"></a></var><br> +— Function File: <var>M</var> = <b>ctmc_fpt</b> (<var>Q</var>)<var><a name="index-ctmc_005ffpt-41"></a></var><br> +— Function File: <var>m</var> = <b>ctmc_fpt</b> (<var>Q, i, j</var>)<var><a name="index-ctmc_005ffpt-42"></a></var><br> <blockquote> - <p><a name="index-Markov-chain_002c-continuous-time-39"></a><a name="index-First-passage-times-40"></a> + <p><a name="index-Markov-chain_002c-continuous-time-43"></a><a name="index-First-passage-times-44"></a> If called with a single argument, computes the mean first passage times <var>M</var><code>(i,j)</code>, the average times before state <var>j</var> is reached, starting from state <var>i</var>, for all 1 \leq i, j \leq @@ -1492,9 +1520,9 @@ <p><a name="doc_002dqnmm1"></a> <div class="defun"> -— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>, <var>p0</var>] = <b>qnmm1</b> (<var>lambda, mu</var>)<var><a name="index-qnmm1-41"></a></var><br> +— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>, <var>p0</var>] = <b>qnmm1</b> (<var>lambda, mu</var>)<var><a name="index-qnmm1-45"></a></var><br> <blockquote> - <p><a name="index-g_t_0040math_007bM_002fM_002f1_007d-system-42"></a> + <p><a name="index-g_t_0040math_007bM_002fM_002f1_007d-system-46"></a> Compute utilization, response time, average number of requests and throughput for a M/M/1 queue. @@ -1539,7 +1567,7 @@ and Markov Chains: Modeling and Performance Evaluation with Computer Science Applications</cite>, Wiley, 1998, Section 6.3. - <p><a name="index-Bolch_002c-G_002e-43"></a><a name="index-Greiner_002c-S_002e-44"></a><a name="index-de-Meer_002c-H_002e-45"></a><a name="index-Trivedi_002c-K_002e-46"></a> + <p><a name="index-Bolch_002c-G_002e-47"></a><a name="index-Greiner_002c-S_002e-48"></a><a name="index-de-Meer_002c-H_002e-49"></a><a name="index-Trivedi_002c-K_002e-50"></a> <!-- M/M/m --> <div class="node"> <a name="The-M%2fM%2fm-System"></a> @@ -1565,10 +1593,10 @@ <p><a name="doc_002dqnmmm"></a> <div class="defun"> -— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>, <var>p0</var>, <var>pm</var>] = <b>qnmmm</b> (<var>lambda, mu</var>)<var><a name="index-qnmmm-47"></a></var><br> -— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>, <var>p0</var>, <var>pm</var>] = <b>qnmmm</b> (<var>lambda, mu, m</var>)<var><a name="index-qnmmm-48"></a></var><br> +— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>, <var>p0</var>, <var>pm</var>] = <b>qnmmm</b> (<var>lambda, mu</var>)<var><a name="index-qnmmm-51"></a></var><br> +— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>, <var>p0</var>, <var>pm</var>] = <b>qnmmm</b> (<var>lambda, mu, m</var>)<var><a name="index-qnmmm-52"></a></var><br> <blockquote> - <p><a name="index-g_t_0040math_007bM_002fM_002fm_007d-system-49"></a> + <p><a name="index-g_t_0040math_007bM_002fM_002fm_007d-system-53"></a> Compute utilization, response time, average number of requests in service and throughput for a M/M/m queue, a queueing system with m identical service centers connected to a single queue. @@ -1620,7 +1648,7 @@ and Markov Chains: Modeling and Performance Evaluation with Computer Science Applications</cite>, Wiley, 1998, Section 6.5. - <p><a name="index-Bolch_002c-G_002e-50"></a><a name="index-Greiner_002c-S_002e-51"></a><a name="index-de-Meer_002c-H_002e-52"></a><a name="index-Trivedi_002c-K_002e-53"></a> + <p><a name="index-Bolch_002c-G_002e-54"></a><a name="index-Greiner_002c-S_002e-55"></a><a name="index-de-Meer_002c-H_002e-56"></a><a name="index-Trivedi_002c-K_002e-57"></a> <!-- M/M/inf --> <div class="node"> <a name="The-M%2fM%2finf-System"></a> @@ -1643,7 +1671,7 @@ <p><a name="doc_002dqnmminf"></a> <div class="defun"> -— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>, <var>p0</var>] = <b>qnmminf</b> (<var>lambda, mu</var>)<var><a name="index-qnmminf-54"></a></var><br> +— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>, <var>p0</var>] = <b>qnmminf</b> (<var>lambda, mu</var>)<var><a name="index-qnmminf-58"></a></var><br> <blockquote> <p>Compute utilization, response time, average number of requests and throughput for a M/M/\infty queue. This is a system with an @@ -1651,7 +1679,7 @@ system is always stable, regardless the values of the arrival and service rates. - <p><a name="index-g_t_0040math_007bM_002fM_002f_007dinf-system-55"></a> + <p><a name="index-g_t_0040math_007bM_002fM_002f_007dinf-system-59"></a> <p><strong>INPUTS</strong> @@ -1669,7 +1697,7 @@ different from the utilization, which in the case of M/M/\infty centers is always zero. - <p><a name="index-traffic-intensity-56"></a> + <p><a name="index-traffic-intensity-60"></a> <br><dt><var>R</var><dd>Service center response time. <br><dt><var>Q</var><dd>Average number of requests in the system (which is equal to the @@ -1697,7 +1725,7 @@ and Markov Chains: Modeling and Performance Evaluation with Computer Science Applications</cite>, Wiley, 1998, Section 6.4. - <p><a name="index-Bolch_002c-G_002e-57"></a><a name="index-Greiner_002c-S_002e-58"></a><a name="index-de-Meer_002c-H_002e-59"></a><a name="index-Trivedi_002c-K_002e-60"></a> + <p><a name="index-Bolch_002c-G_002e-61"></a><a name="index-Greiner_002c-S_002e-62"></a><a name="index-de-Meer_002c-H_002e-63"></a><a name="index-Trivedi_002c-K_002e-64"></a> <!-- M/M/1/k --> <div class="node"> <a name="The-M%2fM%2f1%2fK-System"></a> @@ -1721,9 +1749,9 @@ <p><a name="doc_002dqnmm1k"></a> <div class="defun"> -— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>, <var>p0</var>, <var>pK</var>] = <b>qnmm1k</b> (<var>lambda, mu, K</var>)<var><a name="index-qnmm1k-61"></a></var><br> +— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>, <var>p0</var>, <var>pK</var>] = <b>qnmm1k</b> (<var>lambda, mu, K</var>)<var><a name="index-qnmm1k-65"></a></var><br> <blockquote> - <p><a name="index-g_t_0040math_007bM_002fM_002f1_002fK_007d-system-62"></a> + <p><a name="index-g_t_0040math_007bM_002fM_002f1_002fK_007d-system-66"></a> Compute utilization, response time, average number of requests and throughput for a M/M/1/K finite capacity system. In a M/M/1/K queue there is a single server; the maximum number of @@ -1790,9 +1818,9 @@ <p><a name="doc_002dqnmmmk"></a> <div class="defun"> -— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>, <var>p0</var>, <var>pK</var>] = <b>qnmmmk</b> (<var>lambda, mu, m, K</var>)<var><a name="index-qnmmmk-63"></a></var><br> +— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>, <var>p0</var>, <var>pK</var>] = <b>qnmmmk</b> (<var>lambda, mu, m, K</var>)<var><a name="index-qnmmmk-67"></a></var><br> <blockquote> - <p><a name="index-g_t_0040math_007bM_002fM_002fm_002fK_007d-system-64"></a> + <p><a name="index-g_t_0040math_007bM_002fM_002fm_002fK_007d-system-68"></a> Compute utilization, response time, average number of requests and throughput for a M/M/m/K finite capacity system. In a M/M/m/K system there are m \geq 1 identical service @@ -1850,7 +1878,7 @@ and Markov Chains: Modeling and Performance Evaluation with Computer Science Applications</cite>, Wiley, 1998, Section 6.6. - <p><a name="index-Bolch_002c-G_002e-65"></a><a name="index-Greiner_002c-S_002e-66"></a><a name="index-de-Meer_002c-H_002e-67"></a><a name="index-Trivedi_002c-K_002e-68"></a> + <p><a name="index-Bolch_002c-G_002e-69"></a><a name="index-Greiner_002c-S_002e-70"></a><a name="index-de-Meer_002c-H_002e-71"></a><a name="index-Trivedi_002c-K_002e-72"></a> <!-- Approximate M/M/m --> <div class="node"> @@ -1872,9 +1900,9 @@ <p><a name="doc_002dqnammm"></a> <div class="defun"> -— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnammm</b> (<var>lambda, mu</var>)<var><a name="index-qnammm-69"></a></var><br> +— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnammm</b> (<var>lambda, mu</var>)<var><a name="index-qnammm-73"></a></var><br> <blockquote> - <p><a name="index-Asymmetric-_0040math_007bM_002fM_002fm_007d-system-70"></a> + <p><a name="index-Asymmetric-_0040math_007bM_002fM_002fm_007d-system-74"></a> Compute <em>approximate</em> utilization, response time, average number of requests in service and throughput for an asymmetric M/M/m queue. In this system there are m different service centers @@ -1921,7 +1949,7 @@ and Markov Chains: Modeling and Performance Evaluation with Computer Science Applications</cite>, Wiley, 1998 - <p><a name="index-Bolch_002c-G_002e-71"></a><a name="index-Greiner_002c-S_002e-72"></a><a name="index-de-Meer_002c-H_002e-73"></a><a name="index-Trivedi_002c-K_002e-74"></a> + <p><a name="index-Bolch_002c-G_002e-75"></a><a name="index-Greiner_002c-S_002e-76"></a><a name="index-de-Meer_002c-H_002e-77"></a><a name="index-Trivedi_002c-K_002e-78"></a> <div class="node"> <a name="The-M%2fG%2f1-System"></a> <a name="The-M_002fG_002f1-System"></a> @@ -1937,9 +1965,9 @@ <p><a name="doc_002dqnmg1"></a> <div class="defun"> -— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>, <var>p0</var>] = <b>qnmg1</b> (<var>lambda, xavg, x2nd</var>)<var><a name="index-qnmg1-75"></a></var><br> +— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>, <var>p0</var>] = <b>qnmg1</b> (<var>lambda, xavg, x2nd</var>)<var><a name="index-qnmg1-79"></a></var><br> <blockquote> - <p><a name="index-g_t_0040math_007bM_002fG_002f1_007d-system-76"></a> + <p><a name="index-g_t_0040math_007bM_002fG_002f1_007d-system-80"></a> Compute utilization, response time, average number of requests and throughput for a M/G/1 system. The service time distribution is described by its mean <var>xavg</var>, and by its second moment @@ -1996,9 +2024,9 @@ <p><a name="doc_002dqnmh1"></a> <div class="defun"> -— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>, <var>p0</var>] = <b>qnmh1</b> (<var>lambda, mu, alpha</var>)<var><a name="index-qnmh1-77"></a></var><br> +— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>, <var>p0</var>] = <b>qnmh1</b> (<var>lambda, mu, alpha</var>)<var><a name="index-qnmh1-81"></a></var><br> <blockquote> - <p><a name="index-g_t_0040math_007bM_002fH_005fm_002f1_007d-system-78"></a> + <p><a name="index-g_t_0040math_007bM_002fH_005fm_002f1_007d-system-82"></a> Compute utilization, response time, average number of requests and throughput for a M/H_m/1 system. In this system, the customer service times have hyper-exponential distribution: @@ -2080,7 +2108,7 @@ <li><a accesskey="6" href="#Utility-functions">Utility functions</a>: Utility functions to compute miscellaneous quantities </ul> -<p><a name="index-queueing-networks-79"></a> +<p><a name="index-queueing-networks-83"></a> <!-- INTRODUCTION --> <div class="node"> <a name="Introduction-to-QNs"></a> @@ -2341,13 +2369,13 @@ <p><a name="doc_002dqnmknode"></a> <div class="defun"> -— Function File: <var>Q</var> = <b>qnmknode</b> (<var>"m/m/m-fcfs", S</var>)<var><a name="index-qnmknode-80"></a></var><br> -— Function File: <var>Q</var> = <b>qnmknode</b> (<var>"m/m/m-fcfs", S, m</var>)<var><a name="index-qnmknode-81"></a></var><br> -— Function File: <var>Q</var> = <b>qnmknode</b> (<var>"m/m/1-lcfs-pr", S</var>)<var><a name="index-qnmknode-82"></a></var><br> -— Function File: <var>Q</var> = <b>qnmknode</b> (<var>"-/g/1-ps", S</var>)<var><a name="index-qnmknode-83"></a></var><br> -— Function File: <var>Q</var> = <b>qnmknode</b> (<var>"-/g/1-ps", S, s2</var>)<var><a name="index-qnmknode-84"></a></var><br> -— Function File: <var>Q</var> = <b>qnmknode</b> (<var>"-/g/inf", S</var>)<var><a name="index-qnmknode-85"></a></var><br> -— Function File: <var>Q</var> = <b>qnmknode</b> (<var>"-/g/inf", S, s2</var>)<var><a name="index-qnmknode-86"></a></var><br> +— Function File: <var>Q</var> = <b>qnmknode</b> (<var>"m/m/m-fcfs", S</var>)<var><a name="index-qnmknode-84"></a></var><br> +— Function File: <var>Q</var> = <b>qnmknode</b> (<var>"m/m/m-fcfs", S, m</var>)<var><a name="index-qnmknode-85"></a></var><br> +— Function File: <var>Q</var> = <b>qnmknode</b> (<var>"m/m/1-lcfs-pr", S</var>)<var><a name="index-qnmknode-86"></a></var><br> +— Function File: <var>Q</var> = <b>qnmknode</b> (<var>"-/g/1-ps", S</var>)<var><a name="index-qnmknode-87"></a></var><br> +— Function File: <var>Q</var> = <b>qnmknode</b> (<var>"-/g/1-ps", S, s2</var>)<var><a name="index-qnmknode-88"></a></var><br> +— Function File: <var>Q</var> = <b>qnmknode</b> (<var>"-/g/inf", S</var>)<var><a name="index-qnmknode-89"></a></var><br> +— Function File: <var>Q</var> = <b>qnmknode</b> (<var>"-/g/inf", S, s2</var>)<var><a name="index-qnmknode-90"></a></var><br> <blockquote> <p>Creates a node; this function can be used together with <code>qnsolve</code>. It is possible to create either single-class nodes @@ -2416,10 +2444,10 @@ <p><a name="doc_002dqnsolve"></a> <div class="defun"> -— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnsolve</b> (<var>"closed", N, QQ, V</var>)<var><a name="index-qnsolve-87"></a></var><br> -— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnsolve</b> (<var>"closed", N, QQ, V, Z</var>)<var><a name="index-qnsolve-88"></a></var><br> -— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnsolve</b> (<var>"open", lambda, QQ, V</var>)<var><a name="index-qnsolve-89"></a></var><br> -— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnsolve</b> (<var>"mixed", lambda, N, QQ, V</var>)<var><a name="index-qnsolve-90"></a></var><br> +— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnsolve</b> (<var>"closed", N, QQ, V</var>)<var><a name="index-qnsolve-91"></a></var><br> +— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnsolve</b> (<var>"closed", N, QQ, V, Z</var>)<var><a name="index-qnsolve-92"></a></var><br> +— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnsolve</b> (<var>"open", lambda, QQ, V</var>)<var><a name="index-qnsolve-93"></a></var><br> +— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnsolve</b> (<var>"mixed", lambda, N, QQ, V</var>)<var><a name="index-qnsolve-94"></a></var><br> <blockquote> <p>General evaluator of QN models. Networks can be open, closed or mixed; single as well as multiclass networks are supported. @@ -2597,11 +2625,11 @@ <p><a name="doc_002dqnjackson"></a> <div class="defun"> -— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnjackson</b> (<var>lambda, S, P </var>)<var><a name="index-qnjackson-91"></a></var><br> -— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnjackson</b> (<var>lambda, S, P, m </var>)<var><a name="index-qnjackson-92"></a></var><br> -— Function File: <var>pr</var> = <b>qnjackson</b> (<var>lambda, S, P, m, k</var>)<var><a name="index-qnjackson-93"></a></var><br> +— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnjackson</b> (<var>lambda, S, P </var>)<var><a name="index-qnjackson-95"></a></var><br> +— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnjackson</b> (<var>lambda, S, P, m </var>)<var><a name="index-qnjackson-96"></a></var><br> +— Function File: <var>pr</var> = <b>qnjackson</b> (<var>lambda, S, P, m, k</var>)<var><a name="index-qnjackson-97"></a></var><br> <blockquote> - <p><a name="index-open-network_002c-single-class-94"></a><a name="index-Jackson-network-95"></a> + <p><a name="index-open-network_002c-single-class-98"></a><a name="index-Jackson-network-99"></a> With three or four input parameters, this function computes the steady-state occupancy probabilities for a Jackson network. With five input parameters, this function computes the steady-state probability @@ -2683,7 +2711,7 @@ Performance Evaluation with Computer Science Applications</cite>, Wiley, 1998, pp. 284–287. - <p><a name="index-Bolch_002c-G_002e-96"></a><a name="index-Greiner_002c-S_002e-97"></a><a name="index-de-Meer_002c-H_002e-98"></a><a name="index-Trivedi_002c-K_002e-99"></a> + <p><a name="index-Bolch_002c-G_002e-100"></a><a name="index-Greiner_002c-S_002e-101"></a><a name="index-de-Meer_002c-H_002e-102"></a><a name="index-Trivedi_002c-K_002e-103"></a> <h4 class="subsection">6.3.2 The Convolution Algorithm</h4> @@ -2717,10 +2745,10 @@ <p><a name="doc_002dqnconvolution"></a> <div class="defun"> -— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>, <var>G</var>] = <b>qnconvolution</b> (<var>N, S, V</var>)<var><a name="index-qnconvolution-100"></a></var><br> -— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>, <var>G</var>] = <b>qnconvolution</b> (<var>N, S, V, m</var>)<var><a name="index-qnconvolution-101"></a></var><br> +— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>, <var>G</var>] = <b>qnconvolution</b> (<var>N, S, V</var>)<var><a name="index-qnconvolution-104"></a></var><br> +— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>, <var>G</var>] = <b>qnconvolution</b> (<var>N, S, V, m</var>)<var><a name="index-qnconvolution-105"></a></var><br> <blockquote> - <p><a name="index-closed-network-102"></a><a name="index-normalization-constant-103"></a><a name="index-convolution-algorithm-104"></a> + <p><a name="index-closed-network-106"></a><a name="index-normalization-constant-107"></a><a name="index-convolution-algorithm-108"></a> This function implements the <em>convolution algorithm</em> for computing steady-state performance measures of product-form, single-class closed queueing networks. Load-independent service @@ -2811,20 +2839,20 @@ 16, number 9, september 1973, pp. 527–531. <a href="http://doi.acm.org/10.1145/362342.362345">http://doi.acm.org/10.1145/362342.362345</a> - <p><a name="index-Buzen_002c-J_002e-P_002e-105"></a> + <p><a name="index-Buzen_002c-J_002e-P_002e-109"></a> This implementation is based on G. Bolch, S. Greiner, H. de Meer and K. Trivedi, <cite>Queueing Networks and Markov Chains: Modeling and Performance Evaluation with Computer Science Applications</cite>, Wiley, 1998, pp. 313–317. - <p><a name="index-Bolch_002c-G_002e-106"></a><a name="index-Greiner_002c-S_002e-107"></a><a name="index-de-Meer_002c-H_002e-108"></a><a name="index-Trivedi_002c-K_002e-109"></a> + <p><a name="index-Bolch_002c-G_002e-110"></a><a name="index-Greiner_002c-S_002e-111"></a><a name="index-de-Meer_002c-H_002e-112"></a><a name="index-Trivedi_002c-K_002e-113"></a> <!-- Convolution for load-dependent service centers --> <a name="doc_002dqnconvolutionld"></a> <div class="defun"> -— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>, <var>G</var>] = <b>qnconvolutionld</b> (<var>N, S, V</var>)<var><a name="index-qnconvolutionld-110"></a></var><br> +— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>, <var>G</var>] = <b>qnconvolutionld</b> (<var>N, S, V</var>)<var><a name="index-qnconvolutionld-114"></a></var><br> <blockquote> - <p><a name="index-closed-network-111"></a><a name="index-normalization-constant-112"></a><a name="index-convolution-algorithm-113"></a><a name="index-load_002ddependent-service-center-114"></a> + <p><a name="index-closed-network-115"></a><a name="index-normalization-constant-116"></a><a name="index-convolution-algorithm-117"></a><a name="index-load_002ddependent-service-center-118"></a> This function implements the <em>convolution algorithm</em> for product-form, single-class closed queueing networks with general load-dependent service centers. @@ -2884,7 +2912,7 @@ Purdue University, feb, 1981 (revised). <a href="http://www.cs.purdue.edu/research/technical_reports/1980/TR%2080-354.pdf">http://www.cs.purdue.edu/research/technical_reports/1980/TR%2080-354.pdf</a> - <p><a name="index-Schwetman_002c-H_002e-115"></a> + <p><a name="index-Schwetman_002c-H_002e-119"></a> M. Reiser, H. Kobayashi, <cite>On The Convolution Algorithm for Separable Queueing Networks</cite>, In Proceedings of the 1976 ACM SIGMETRICS Conference on Computer Performance Modeling Measurement and @@ -2892,7 +2920,7 @@ 1976). SIGMETRICS '76. ACM, New York, NY, pp. 109–117. <a href="http://doi.acm.org/10.1145/800200.806187">http://doi.acm.org/10.1145/800200.806187</a> - <p><a name="index-Reiser_002c-M_002e-116"></a><a name="index-Kobayashi_002c-H_002e-117"></a> + <p><a name="index-Reiser_002c-M_002e-120"></a><a name="index-Kobayashi_002c-H_002e-121"></a> This implementation is based on G. Bolch, S. Greiner, H. de Meer and K. Trivedi, <cite>Queueing Networks and Markov Chains: Modeling and Performance Evaluation with Computer Science Applications</cite>, Wiley, @@ -2904,7 +2932,7 @@ function f_i defined in Schwetman, <code>Some Computational Aspects of Queueing Network Models</code>. - <p><a name="index-Bolch_002c-G_002e-118"></a><a name="index-Greiner_002c-S_002e-119"></a><a name="index-de-Meer_002c-H_002e-120"></a><a name="index-Trivedi_002c-K_002e-121"></a> + <p><a name="index-Bolch_002c-G_002e-122"></a><a name="index-Greiner_002c-S_002e-123"></a><a name="index-de-Meer_002c-H_002e-124"></a><a name="index-Trivedi_002c-K_002e-125"></a> <h4 class="subsection">6.3.3 Open networks</h4> @@ -2912,10 +2940,10 @@ <p><a name="doc_002dqnopensingle"></a> <div class="defun"> -— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnopensingle</b> (<var>lambda, S, V</var>)<var><a name="index-qnopensingle-122"></a></var><br> -— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnopensingle</b> (<var>lambda, S, V, m</var>)<var><a name="index-qnopensingle-123"></a></var><br> +— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnopensingle</b> (<var>lambda, S, V</var>)<var><a name="index-qnopensingle-126"></a></var><br> +— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnopensingle</b> (<var>lambda, S, V, m</var>)<var><a name="index-qnopensingle-127"></a></var><br> <blockquote> - <p><a name="index-open-network_002c-single-class-124"></a><a name="index-BCMP-network-125"></a> + <p><a name="index-open-network_002c-single-class-128"></a><a name="index-BCMP-network-129"></a> Analyze open, single class BCMP queueing networks. <p>This function works for a subset of BCMP single-class open networks @@ -3008,16 +3036,16 @@ Networks and Markov Chains: Modeling and Performance Evaluation with Computer Science Applications</cite>, Wiley, 1998. - <p><a name="index-Bolch_002c-G_002e-126"></a><a name="index-Greiner_002c-S_002e-127"></a><a name="index-de-Meer_002c-H_002e-128"></a><a name="index-Trivedi_002c-K_002e-129"></a> + <p><a name="index-Bolch_002c-G_002e-130"></a><a name="index-Greiner_002c-S_002e-131"></a><a name="index-de-Meer_002c-H_002e-132"></a><a name="index-Trivedi_002c-K_002e-133"></a> <!-- Open network with multiple classes --> <p><a name="doc_002dqnopenmulti"></a> <div class="defun"> -— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnopenmulti</b> (<var>lambda, S, V</var>)<var><a name="index-qnopenmulti-130"></a></var><br> -— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnopenmulti</b> (<var>lambda, S, V, m</var>)<var><a name="index-qnopenmulti-131"></a></var><br> +— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnopenmulti</b> (<var>lambda, S, V</var>)<var><a name="index-qnopenmulti-134"></a></var><br> +— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnopenmulti</b> (<var>lambda, S, V, m</var>)<var><a name="index-qnopenmulti-135"></a></var><br> <blockquote> - <p><a name="index-open-network_002c-multiple-classes-132"></a> + <p><a name="index-open-network_002c-multiple-classes-136"></a> Exact analysis of open, multiple-class BCMP networks. The network can be made of <em>single-server</em> queueing centers (FCFS, LCFS-PR or PS) or delay centers (IS). This function assumes a network with @@ -3082,7 +3110,7 @@ 1984. <a href="http://www.cs.washington.edu/homes/lazowska/qsp/">http://www.cs.washington.edu/homes/lazowska/qsp/</a>. In particular, see section 7.4.1 ("Open Model Solution Techniques"). - <p><a name="index-Lazowska_002c-E_002e-D_002e-133"></a><a name="index-Zahorjan_002c-J_002e-134"></a><a name="index-Graham_002c-G_002e-S_002e-135"></a><a name="index-Sevcik_002c-K_002e-C_002e-136"></a> + <p><a name="index-Lazowska_002c-E_002e-D_002e-137"></a><a name="index-Zahorjan_002c-J_002e-138"></a><a name="index-Graham_002c-G_002e-S_002e-139"></a><a name="index-Sevcik_002c-K_002e-C_002e-140"></a> <h4 class="subsection">6.3.4 Closed Networks</h4> @@ -3090,11 +3118,11 @@ <p><a name="doc_002dqnclosedsinglemva"></a> <div class="defun"> -— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>, <var>G</var>] = <b>qnclosedsinglemva</b> (<var>N, S, V</var>)<var><a name="index-qnclosedsinglemva-137"></a></var><br> -— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>, <var>G</var>] = <b>qnclosedsinglemva</b> (<var>N, S, V, m</var>)<var><a name="index-qnclosedsinglemva-138"></a></var><br> -— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>, <var>G</var>] = <b>qnclosedsinglemva</b> (<var>N, S, V, m, Z</var>)<var><a name="index-qnclosedsinglemva-139"></a></var><br> +— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>, <var>G</var>] = <b>qnclosedsinglemva</b> (<var>N, S, V</var>)<var><a name="index-qnclosedsinglemva-141"></a></var><br> +— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>, <var>G</var>] = <b>qnclosedsinglemva</b> (<var>N, S, V, m</var>)<var><a name="index-qnclosedsinglemva-142"></a></var><br> +— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>, <var>G</var>] = <b>qnclosedsinglemva</b> (<var>N, S, V, m, Z</var>)<var><a name="index-qnclosedsinglemva-143"></a></var><br> <blockquote> - <p><a name="index-Mean-Value-Analysys-_0028MVA_0029-140"></a><a name="index-closed-network_002c-single-class-141"></a><a name="index-normalization-constant-142"></a> + <p><a name="index-Mean-Value-Analysys-_0028MVA_0029-144"></a><a name="index-closed-network_002c-single-class-145"></a><a name="index-normalization-constant-146"></a> Analyze closed, single class queueing networks using the exact Mean Value Analysis (MVA) algorithm. The following queueing disciplines are supported: FCFS, LCFS-PR, PS and IS (Infinite Server). This @@ -3195,7 +3223,7 @@ Multichain Queuing Networks</cite>, Journal of the ACM, vol. 27, n. 2, April 1980, pp. 313–322. <a href="http://doi.acm.org/10.1145/322186.322195">http://doi.acm.org/10.1145/322186.322195</a> - <p><a name="index-Reiser_002c-M_002e-143"></a><a name="index-Lavenberg_002c-S_002e-S_002e-144"></a> + <p><a name="index-Reiser_002c-M_002e-147"></a><a name="index-Lavenberg_002c-S_002e-S_002e-148"></a> This implementation is described in R. Jain , <cite>The Art of Computer Systems Performance Analysis</cite>, Wiley, 1991, p. 577. Multi-server nodes <!-- and the computation of @math{G(N)}, --> @@ -3204,15 +3232,15 @@ Performance Evaluation with Computer Science Applications</cite>, Wiley, 1998, Section 8.2.1, "Single Class Queueing Networks". - <p><a name="index-Jain_002c-R_002e-145"></a><a name="index-Bolch_002c-G_002e-146"></a><a name="index-Greiner_002c-S_002e-147"></a><a name="index-de-Meer_002c-H_002e-148"></a><a name="index-Trivedi_002c-K_002e-149"></a> + <p><a name="index-Jain_002c-R_002e-149"></a><a name="index-Bolch_002c-G_002e-150"></a><a name="index-Greiner_002c-S_002e-151"></a><a name="index-de-Meer_002c-H_002e-152"></a><a name="index-Trivedi_002c-K_002e-153"></a> <!-- MVA for single class, closed networks with load dependent servers --> <a name="doc_002dqnclosedsinglemvald"></a> <div class="defun"> -— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedsinglemvald</b> (<var>N, S, V</var>)<var><a name="index-qnclosedsinglemvald-150"></a></var><br> -— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedsinglemvald</b> (<var>N, S, V, Z</var>)<var><a name="index-qnclosedsinglemvald-151"></a></var><br> +— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedsinglemvald</b> (<var>N, S, V</var>)<var><a name="index-qnclosedsinglemvald-154"></a></var><br> +— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedsinglemvald</b> (<var>N, S, V, Z</var>)<var><a name="index-qnclosedsinglemvald-155"></a></var><br> <blockquote> - <p><a name="index-Mean-Value-Analysys-_0028MVA_0029-152"></a><a name="index-closed-network_002c-single-class-153"></a><a name="index-load_002ddependent-service-center-154"></a> + <p><a name="index-Mean-Value-Analysys-_0028MVA_0029-156"></a><a name="index-closed-network_002c-single-class-157"></a><a name="index-load_002ddependent-service-center-158"></a> Exact MVA algorithm for closed, single class queueing networks with load-dependent service centers. This function supports FCFS, LCFS-PR, PS and IS nodes. For networks with only fixed-rate @@ -3270,15 +3298,15 @@ 1998, Section 8.2.4.1, “Networks with Load-Deèpendent Service: Closed Networks”. - <p><a name="index-Bolch_002c-G_002e-155"></a><a name="index-Greiner_002c-S_002e-156"></a><a name="index-de-Meer_002c-H_002e-157"></a><a name="index-Trivedi_002c-K_002e-158"></a> + <p><a name="index-Bolch_002c-G_002e-159"></a><a name="index-Greiner_002c-S_002e-160"></a><a name="index-de-Meer_002c-H_002e-161"></a><a name="index-Trivedi_002c-K_002e-162"></a> <!-- CMVA for single class, closed networks with a single load dependent servers --> <a name="doc_002dqncmva"></a> <div class="defun"> -— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qncmva</b> (<var>N, S, Sld, V</var>)<var><a name="index-qncmva-159"></a></var><br> -— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qncmva</b> (<var>N, S, Sld, V, Z</var>)<var><a name="index-qncmva-160"></a></var><br> +— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qncmva</b> (<var>N, S, Sld, V</var>)<var><a name="index-qncmva-163"></a></var><br> +— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qncmva</b> (<var>N, S, Sld, V, Z</var>)<var><a name="index-qncmva-164"></a></var><br> <blockquote> - <p><a name="index-Mean-Value-Analysys-_0028MVA_0029-161"></a><a name="index-CMVA-162"></a> + <p><a name="index-Mean-Value-Analysys-_0028MVA_0029-165"></a><a name="index-CMVA-166"></a> Implementation of the Conditional MVA (CMVA) algorithm, a numerically stable variant of MVA for load-dependent servers. CMVA is described in G. Casale, <cite>A Note on Stable Flow-Equivalent Aggregation in @@ -3332,19 +3360,19 @@ closed networks</cite>. Queueing Syst. Theory Appl., 60:193–202, December 2008. - <p><a name="index-Casale_002c-G_002e-163"></a> + <p><a name="index-Casale_002c-G_002e-167"></a> <!-- Approximate MVA for single class, closed networks --> <p><a name="doc_002dqnclosedsinglemvaapprox"></a> <div class="defun"> -— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedsinglemvaapprox</b> (<var>N, S, V</var>)<var><a name="index-qnclosedsinglemvaapprox-164"></a></var><br> -— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedsinglemvaapprox</b> (<var>N, S, V, m</var>)<var><a name="index-qnclosedsinglemvaapprox-165"></a></var><br> -— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedsinglemvaapprox</b> (<var>N, S, V, m, Z</var>)<var><a name="index-qnclosedsinglemvaapprox-166"></a></var><br> -— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedsinglemvaapprox</b> (<var>N, S, V, m, Z, tol</var>)<var><a name="index-qnclosedsinglemvaapprox-167"></a></var><br> -— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedsinglemvaapprox</b> (<var>N, S, V, m, Z, tol, iter_max</var>)<var><a name="index-qnclosedsinglemvaapprox-168"></a></var><br> +— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedsinglemvaapprox</b> (<var>N, S, V</var>)<var><a name="index-qnclosedsinglemvaapprox-168"></a></var><br> +— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedsinglemvaapprox</b> (<var>N, S, V, m</var>)<var><a name="index-qnclosedsinglemvaapprox-169"></a></var><br> +— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedsinglemvaapprox</b> (<var>N, S, V, m, Z</var>)<var><a name="index-qnclosedsinglemvaapprox-170"></a></var><br> +— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedsinglemvaapprox</b> (<var>N, S, V, m, Z, tol</var>)<var><a name="index-qnclosedsinglemvaapprox-171"></a></var><br> +— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedsinglemvaapprox</b> (<var>N, S, V, m, Z, tol, iter_max</var>)<var><a name="index-qnclosedsinglemvaapprox-172"></a></var><br> <blockquote> - <p><a name="index-Mean-Value-Analysys-_0028MVA_0029_002c-approximate-169"></a><a name="index-Approximate-MVA-170"></a><a name="index-Closed-network_002c-single-class-171"></a><a name="index-Closed-network_002c-approximate-analysis-172"></a> + <p><a name="index-Mean-Value-Analysys-_0028MVA_0029_002c-approximate-173"></a><a name="index-Approximate-MVA-174"></a><a name="index-Closed-network_002c-single-class-175"></a><a name="index-Closed-network_002c-approximate-analysis-176"></a> Analyze closed, single class queueing networks using the Approximate Mean Value Analysis (MVA) algorithm. This function is based on approximating the number of customers seen at center k when a @@ -3423,20 +3451,20 @@ 1984. <a href="http://www.cs.washington.edu/homes/lazowska/qsp/">http://www.cs.washington.edu/homes/lazowska/qsp/</a>. In particular, see section 6.4.2.2 ("Approximate Solution Techniques"). - <p><a name="index-Lazowska_002c-E_002e-D_002e-173"></a><a name="index-Zahorjan_002c-J_002e-174"></a><a name="index-Graham_002c-G_002e-S_002e-175"></a><a name="index-Sevcik_002c-K_002e-C_002e-176"></a> + <p><a name="index-Lazowska_002c-E_002e-D_002e-177"></a><a name="index-Zahorjan_002c-J_002e-178"></a><a name="index-Graham_002c-G_002e-S_002e-179"></a><a name="index-Sevcik_002c-K_002e-C_002e-180"></a> <!-- MVA for multiple class, closed networks --> <p><a name="doc_002dqnclosedmultimva"></a> <div class="defun"> -— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedmultimva</b> (<var>N, S </var>)<var><a name="index-qnclosedmultimva-177"></a></var><br> -— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedmultimva</b> (<var>N, S, V</var>)<var><a name="index-qnclosedmultimva-178"></a></var><br> -— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedmultimva</b> (<var>N, S, V, m</var>)<var><a name="index-qnclosedmultimva-179"></a></var><br> -— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedmultimva</b> (<var>N, S, V, m, Z</var>)<var><a name="index-qnclosedmultimva-180"></a></var><br> -— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedmultimva</b> (<var>N, S, P</var>)<var><a name="index-qnclosedmultimva-181"></a></var><br> -— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedmultimva</b> (<var>N, S, P, m</var>)<var><a name="index-qnclosedmultimva-182"></a></var><br> +— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedmultimva</b> (<var>N, S </var>)<var><a name="index-qnclosedmultimva-181"></a></var><br> +— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedmultimva</b> (<var>N, S, V</var>)<var><a name="index-qnclosedmultimva-182"></a></var><br> +— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedmultimva</b> (<var>N, S, V, m</var>)<var><a name="index-qnclosedmultimva-183"></a></var><br> +— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedmultimva</b> (<var>N, S, V, m, Z</var>)<var><a name="index-qnclosedmultimva-184"></a></var><br> +— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedmultimva</b> (<var>N, S, P</var>)<var><a name="index-qnclosedmultimva-185"></a></var><br> +— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedmultimva</b> (<var>N, S, P, m</var>)<var><a name="index-qnclosedmultimva-186"></a></var><br> <blockquote> - <p><a name="index-Mean-Value-Analysys-_0028MVA_0029-183"></a><a name="index-closed-network_002c-multiple-classes-184"></a> + <p><a name="index-Mean-Value-Analysys-_0028MVA_0029-187"></a><a name="index-closed-network_002c-multiple-classes-188"></a> Analyze closed, multiclass queueing networks with K service centers and C independent customer classes (chains) using the Mean Value Analysys (MVA) algorithm. @@ -3566,7 +3594,7 @@ Multichain Queuing Networks</cite>, Journal of the ACM, vol. 27, n. 2, April 1980, pp. 313–322. <a href="http://doi.acm.org/10.1145/322186.322195">http://doi.acm.org/10.1145/322186.322195</a> - <p><a name="index-Reiser_002c-M_002e-185"></a><a name="index-Lavenberg_002c-S_002e-S_002e-186"></a> + <p><a name="index-Reiser_002c-M_002e-189"></a><a name="index-Lavenberg_002c-S_002e-S_002e-190"></a> This implementation is based on G. Bolch, S. Greiner, H. de Meer and K. Trivedi, <cite>Queueing Networks and Markov Chains: Modeling and Performance Evaluation with Computer Science Applications</cite>, Wiley, @@ -3576,18 +3604,18 @@ 1984. <a href="http://www.cs.washington.edu/homes/lazowska/qsp/">http://www.cs.washington.edu/homes/lazowska/qsp/</a>. In particular, see section 7.4.2.1 ("Exact Solution Techniques"). - <p><a name="index-Bolch_002c-G_002e-187"></a><a name="index-Greiner_002c-S_002e-188"></a><a name="index-de-Meer_002c-H_002e-189"></a><a name="index-Trivedi_002c-K_002e-190"></a><a name="index-Lazowska_002c-E_002e-D_002e-191"></a><a name="index-Zahorjan_002c-J_002e-192"></a><a name="index-Graham_002c-G_002e-S_002e-193"></a><a name="index-Sevcik_002c-K_002e-C_002e-194"></a> + <p><a name="index-Bolch_002c-G_002e-191"></a><a name="index-Greiner_002c-S_002e-192"></a><a name="index-de-Meer_002c-H_002e-193"></a><a name="index-Trivedi_002c-K_002e-194"></a><a name="index-Lazowska_002c-E_002e-D_002e-195"></a><a name="index-Zahorjan_002c-J_002e-196"></a><a name="index-Graham_002c-G_002e-S_002e-197"></a><a name="index-Sevcik_002c-K_002e-C_002e-198"></a> <!-- Approximate MVA, with Bard-Schweitzer approximation --> <a name="doc_002dqnclosedmultimvaapprox"></a> <div class="defun"> -— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedmultimvaapprox</b> (<var>N, S, V</var>)<var><a name="index-qnclosedmultimvaapprox-195"></a></var><br> -— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedmultimvaapprox</b> (<var>N, S, V, m</var>)<var><a name="index-qnclosedmultimvaapprox-196"></a></var><br> -— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedmultimvaapprox</b> (<var>N, S, V, m, Z</var>)<var><a name="index-qnclosedmultimvaapprox-197"></a></var><br> -— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedmultimvaapprox</b> (<var>N, S, V, m, Z, tol</var>)<var><a name="index-qnclosedmultimvaapprox-198"></a></var><br> -— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedmultimvaapprox</b> (<var>N, S, V, m, Z, tol, iter_max</var>)<var><a name="index-qnclosedmultimvaapprox-199"></a></var><br> +— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedmultimvaapprox</b> (<var>N, S, V</var>)<var><a name="index-qnclosedmultimvaapprox-199"></a></var><br> +— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedmultimvaapprox</b> (<var>N, S, V, m</var>)<var><a name="index-qnclosedmultimvaapprox-200"></a></var><br> +— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedmultimvaapprox</b> (<var>N, S, V, m, Z</var>)<var><a name="index-qnclosedmultimvaapprox-201"></a></var><br> +— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedmultimvaapprox</b> (<var>N, S, V, m, Z, tol</var>)<var><a name="index-qnclosedmultimvaapprox-202"></a></var><br> +— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedmultimvaapprox</b> (<var>N, S, V, m, Z, tol, iter_max</var>)<var><a name="index-qnclosedmultimvaapprox-203"></a></var><br> <blockquote> - <p><a name="index-Mean-Value-Analysys-_0028MVA_0029_002c-approximate-200"></a><a name="index-Approximate-MVA-201"></a><a name="index-Closed-network_002c-multiple-classes-202"></a><a name="index-Closed-network_002c-approximate-analysis-203"></a> + <p><a name="index-Mean-Value-Analysys-_0028MVA_0029_002c-approximate-204"></a><a name="index-Approximate-MVA-205"></a><a name="index-Closed-network_002c-multiple-classes-206"></a><a name="index-Closed-network_002c-approximate-analysis-207"></a> Analyze closed, multiclass queueing networks with K service centers and C customer classes using the approximate Mean Value Analysys (MVA) algorithm. @@ -3672,12 +3700,12 @@ proc. 4th Int. Symp. on Modelling and Performance Evaluation of Computer Systems, feb. 1979, pp. 51–62. - <p><a name="index-Bard_002c-Y_002e-204"></a> + <p><a name="index-Bard_002c-Y_002e-208"></a> P. Schweitzer, <cite>Approximate Analysis of Multiclass Closed Networks of Queues</cite>, Proc. Int. Conf. on Stochastic Control and Optimization, jun 1979, pp. 25–29. - <p><a name="index-Schweitzer_002c-P_002e-205"></a> + <p><a name="index-Schweitzer_002c-P_002e-209"></a> This implementation is based on Edward D. Lazowska, John Zahorjan, G. Scott Graham, and Kenneth C. Sevcik, <cite>Quantitative System Performance: Computer System Analysis Using Queueing Network Models</cite>, @@ -3688,7 +3716,7 @@ described above, as it computes the average response times R instead of the residence times. - <p><a name="index-Lazowska_002c-E_002e-D_002e-206"></a><a name="index-Zahorjan_002c-J_002e-207"></a><a name="index-Graham_002c-G_002e-S_002e-208"></a><a name="index-Sevcik_002c-K_002e-C_002e-209"></a> + <p><a name="index-Lazowska_002c-E_002e-D_002e-210"></a><a name="index-Zahorjan_002c-J_002e-211"></a><a name="index-Graham_002c-G_002e-S_002e-212"></a><a name="index-Sevcik_002c-K_002e-C_002e-213"></a> <h4 class="subsection">6.3.5 Mixed Networks</h4> @@ -3696,9 +3724,9 @@ <p><a name="doc_002dqnmix"></a> <div class="defun"> -— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnmix</b> (<var>lambda, N, S, V, m</var>)<var><a name="index-qnmix-210"></a></var><br> +— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnmix</b> (<var>lambda, N, S, V, m</var>)<var><a name="index-qnmix-214"></a></var><br> <blockquote> - <p><a name="index-Mean-Value-Analysys-_0028MVA_0029-211"></a><a name="index-mixed-network-212"></a> + <p><a name="index-Mean-Value-Analysys-_0028MVA_0029-215"></a><a name="index-mixed-network-216"></a> Solution of mixed queueing networks through MVA. The network consists of K service centers (single-server or delay centers) and C independent customer chains. Both open and closed chains @@ -3789,14 +3817,14 @@ Note that in this function we compute the mean response time R instead of the mean residence time as in the reference. - <p><a name="index-Lazowska_002c-E_002e-D_002e-213"></a><a name="index-Zahorjan_002c-J_002e-214"></a><a name="index-Graham_002c-G_002e-S_002e-215"></a><a name="index-Sevcik_002c-K_002e-C_002e-216"></a> + <p><a name="index-Lazowska_002c-E_002e-D_002e-217"></a><a name="index-Zahorjan_002c-J_002e-218"></a><a name="index-Graham_002c-G_002e-S_002e-219"></a><a name="index-Sevcik_002c-K_002e-C_002e-220"></a> Herb Schwetman, <cite>Implementing the Mean Value Algorithm for the Solution of Queueing Network Models</cite>, Technical Report CSD-TR-355, Department of Computer Sciences, Purdue University, feb 15, 1982, available at <a href="http://www.cs.purdue.edu/research/technical_reports/1980/TR%2080-355.pdf">http://www.cs.purdue.edu/research/technical_reports/1980/TR%2080-355.pdf</a> - <p><a name="index-Schwetman_002c-H_002e-217"></a> + <p><a name="index-Schwetman_002c-H_002e-221"></a> <div class="node"> <a name="Algorithms-for-non-Product-form-QNs"></a> @@ -3815,9 +3843,9 @@ <p><a name="doc_002dqnmvablo"></a> <div class="defun"> -— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnmvablo</b> (<var>N, S, M, P</var>)<var><a name="index-qnmvablo-218"></a></var><br> +— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnmvablo</b> (<var>N, S, M, P</var>)<var><a name="index-qnmvablo-222"></a></var><br> <blockquote> - <p><a name="index-queueing-network-with-blocking-219"></a><a name="index-blocking-queueing-network-220"></a><a name="index-closed-network_002c-finite-capacity-221"></a> + <p><a name="index-queueing-network-with-blocking-223"></a><a name="index-blocking-queueing-network-224"></a><a name="index-closed-network_002c-finite-capacity-225"></a> MVA algorithm for closed queueing networks with blocking. <samp><span class="command">qnmvablo</span></samp> computes approximate utilization, response time and mean queue length for closed, single class queueing networks with blocking. @@ -3872,16 +3900,16 @@ Networks</cite>, IEEE Transactions on Software Engineering, vol. 14, n. 2, april 1988, pp. 418–428. <a href="http://dx.doi.org/10.1109/32.4663">http://dx.doi.org/10.1109/32.4663</a> - <p><a name="index-Akyildiz_002c-I_002e-F_002e-222"></a> + <p><a name="index-Akyildiz_002c-I_002e-F_002e-226"></a> <a name="doc_002dqnmarkov"></a> <div class="defun"> -— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnmarkov</b> (<var>lambda, S, C, P</var>)<var><a name="index-qnmarkov-223"></a></var><br> -— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnmarkov</b> (<var>lambda, S, C, P, m</var>)<var><a name="index-qnmarkov-224"></a></var><br> -— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnmarkov</b> (<var>N, S, C, P</var>)<var><a name="index-qnmarkov-225"></a></var><br> -— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnmarkov</b> (<var>N, S, C, P, m</var>)<var><a name="index-qnmarkov-226"></a></var><br> +— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnmarkov</b> (<var>lambda, S, C, P</var>)<var><a name="index-qnmarkov-227"></a></var><br> +— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnmarkov</b> (<var>lambda, S, C, P, m</var>)<var><a name="index-qnmarkov-228"></a></var><br> +— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnmarkov</b> (<var>N, S, C, P</var>)<var><a name="index-qnmarkov-229"></a></var><br> +— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnmarkov</b> (<var>N, S, C, P, m</var>)<var><a name="index-qnmarkov-230"></a></var><br> <blockquote> - <p><a name="index-closed-network_002c-multiple-classes-227"></a><a name="index-closed-network_002c-finite-capacity-228"></a><a name="index-blocking-queueing-network-229"></a><a name="index-RS-blocking-230"></a> + <p><a name="index-closed-network_002c-multiple-classes-231"></a><a name="index-closed-network_002c-finite-capacity-232"></a><a name="index-blocking-queueing-network-233"></a><a name="index-RS-blocking-234"></a> Compute utilization, response time, average queue length and throughput for open or closed queueing networks with finite capacity. Blocking type is Repetitive-Service (RS). This function explicitly @@ -3991,9 +4019,9 @@ <p><a name="doc_002dqnopenab"></a> <div class="defun"> -— Function File: [<var>Xu</var>, <var>Rl</var>] = <b>qnopenab</b> (<var>lambda, D</var>)<var><a name="index-qnopenab-231"></a></var><br> +— Function File: [<var>Xu</var>, <var>Rl</var>] = <b>qnopenab</b> (<var>lambda, D</var>)<var><a name="index-qnopenab-235"></a></var><br> <blockquote> - <p><a name="index-bounds_002c-asymptotic-232"></a><a name="index-open-network-233"></a> + <p><a name="index-bounds_002c-asymptotic-236"></a><a name="index-open-network-237"></a> Compute Asymptotic Bounds for single-class, open Queueing Networks with K service centers. @@ -4033,14 +4061,14 @@ 1984. <a href="http://www.cs.washington.edu/homes/lazowska/qsp/">http://www.cs.washington.edu/homes/lazowska/qsp/</a>. In particular, see section 5.2 ("Asymptotic Bounds"). - <p><a name="index-Lazowska_002c-E_002e-D_002e-234"></a><a name="index-Zahorjan_002c-J_002e-235"></a><a name="index-Graham_002c-G_002e-S_002e-236"></a><a name="index-Sevcik_002c-K_002e-C_002e-237"></a> + <p><a name="index-Lazowska_002c-E_002e-D_002e-238"></a><a name="index-Zahorjan_002c-J_002e-239"></a><a name="index-Graham_002c-G_002e-S_002e-240"></a><a name="index-Sevcik_002c-K_002e-C_002e-241"></a> <a name="doc_002dqnclosedab"></a> <div class="defun"> -— Function File: [<var>Xl</var>, <var>Xu</var>, <var>Rl</var>, <var>Ru</var>] = <b>qnclosedab</b> (<var>N, D</var>)<var><a name="index-qnclosedab-238"></a></var><br> -— Function File: [<var>Xl</var>, <var>Xu</var>, <var>Rl</var>, <var>Ru</var>] = <b>qnclosedab</b> (<var>N, D, Z</var>)<var><a name="index-qnclosedab-239"></a></var><br> +— Function File: [<var>Xl</var>, <var>Xu</var>, <var>Rl</var>, <var>Ru</var>] = <b>qnclosedab</b> (<var>N, D</var>)<var><a name="index-qnclosedab-242"></a></var><br> +— Function File: [<var>Xl</var>, <var>Xu</var>, <var>Rl</var>, <var>Ru</var>] = <b>qnclosedab</b> (<var>N, D, Z</var>)<var><a name="index-qnclosedab-243"></a></var><br> <blockquote> - <p><a name="index-bounds_002c-asymptotic-240"></a><a name="index-closed-network-241"></a> + <p><a name="index-bounds_002c-asymptotic-244"></a><a name="index-closed-network-245"></a> Compute Asymptotic Bounds for single-class, closed Queueing Networks with K service centers. @@ -4081,14 +4109,14 @@ 1984. <a href="http://www.cs.washington.edu/homes/lazowska/qsp/">http://www.cs.washington.edu/homes/lazowska/qsp/</a>. In particular, see section 5.2 ("Asymptotic Bounds"). - <p><a name="index-Lazowska_002c-E_002e-D_002e-242"></a><a name="index-Zahorjan_002c-J_002e-243"></a><a name="index-Graham_002c-G_002e-S_002e-244"></a><a name="index-Sevcik_002c-K_002e-C_002e-245"></a> + <p><a name="index-Lazowska_002c-E_002e-D_002e-246"></a><a name="index-Zahorjan_002c-J_002e-247"></a><a name="index-Graham_002c-G_002e-S_002e-248"></a><a name="index-Sevcik_002c-K_002e-C_002e-249"></a> <p><a name="doc_002dqnopenbsb"></a> <div class="defun"> -— Function File: [<var>Xu</var>, <var>Rl</var>, <var>Ru</var>] = <b>qnopenbsb</b> (<var>lambda, D</var>)<var><a name="index-qnopenbsb-246"></a></var><br> +— Function File: [<var>Xu</var>, <var>Rl</var>, <var>Ru</var>] = <b>qnopenbsb</b> (<var>lambda, D</var>)<var><a name="index-qnopenbsb-250"></a></var><br> <blockquote> - <p><a name="index-bounds_002c-balanced-system-247"></a><a name="index-open-network-248"></a> + <p><a name="index-bounds_002c-balanced-system-251"></a><a name="index-open-network-252"></a> Compute Balanced System Bounds for single-class, open Queueing Networks with K service centers. @@ -4128,14 +4156,14 @@ 1984. <a href="http://www.cs.washington.edu/homes/lazowska/qsp/">http://www.cs.washington.edu/homes/lazowska/qsp/</a>. In particular, see section 5.4 ("Balanced Systems Bounds"). - <p><a name="index-Lazowska_002c-E_002e-D_002e-249"></a><a name="index-Zahorjan_002c-J_002e-250"></a><a name="index-Graham_002c-G_002e-S_002e-251"></a><a name="index-Sevcik_002c-K_002e-C_002e-252"></a> + <p><a name="index-Lazowska_002c-E_002e-D_002e-253"></a><a name="index-Zahorjan_002c-J_002e-254"></a><a name="index-Graham_002c-G_002e-S_002e-255"></a><a name="index-Sevcik_002c-K_002e-C_002e-256"></a> <a name="doc_002dqnclosedbsb"></a> <div class="defun"> -— Function File: [<var>Xl</var>, <var>Xu</var>, <var>Rl</var>, <var>Ru</var>] = <b>qnclosedbsb</b> (<var>N, D</var>)<var><a name="index-qnclosedbsb-253"></a></var><br> -— Function File: [<var>Xl</var>, <var>Xu</var>, <var>Rl</var>, <var>Ru</var>] = <b>qnclosedbsb</b> (<var>N, D, Z</var>)<var><a name="index-qnclosedbsb-254"></a></var><br> +— Function File: [<var>Xl</var>, <var>Xu</var>, <var>Rl</var>, <var>Ru</var>] = <b>qnclosedbsb</b> (<var>N, D</var>)<var><a name="index-qnclosedbsb-257"></a></var><br> +— Function File: [<var>Xl</var>, <var>Xu</var>, <var>Rl</var>, <var>Ru</var>] = <b>qnclosedbsb</b> (<var>N, D, Z</var>)<var><a name="index-qnclosedbsb-258"></a></var><br> <blockquote> - <p><a name="index-bounds_002c-balanced-system-255"></a><a name="index-closed-network-256"></a> + <p><a name="index-bounds_002c-balanced-system-259"></a><a name="index-closed-network-260"></a> Compute Balanced System Bounds for single-class, closed Queueing Networks with K service centers. @@ -4171,7 +4199,7 @@ <p><a name="doc_002dqnclosedpb"></a> <div class="defun"> -— Function File: [<var>Xl</var>, <var>Xu</var>] = <b>qnclosedpb</b> (<var>N, D </var>)<var><a name="index-qnclosedpb-257"></a></var><br> +— Function File: [<var>Xl</var>, <var>Xu</var>] = <b>qnclosedpb</b> (<var>N, D </var>)<var><a name="index-qnclosedpb-261"></a></var><br> <blockquote> <p>Compute PB Bounds (C. H. Hsieh and S. Lam, 1987) for single-class, closed Queueing Networks @@ -4215,13 +4243,13 @@ Non-Iterative Analysis Technique for Closed Queueing Networks</cite>, IEEE Transactions on Computers, 57(6):780-794, June 2008. - <p><a name="index-Hsieh_002c-C_002e-H-258"></a><a name="index-Lam_002c-S_002e-259"></a><a name="index-Casale_002c-G_002e-260"></a><a name="index-Muntz_002c-R_002e-R_002e-261"></a><a name="index-Serazzi_002c-G_002e-262"></a> + <p><a name="index-Hsieh_002c-C_002e-H-262"></a><a name="index-Lam_002c-S_002e-263"></a><a name="index-Casale_002c-G_002e-264"></a><a name="index-Muntz_002c-R_002e-R_002e-265"></a><a name="index-Serazzi_002c-G_002e-266"></a> <a name="doc_002dqnclosedgb"></a> <div class="defun"> -— Function File: [<var>Xl</var>, <var>Xu</var>, <var>Ql</var>, <var>Qu</var>] = <b>qnclosedgb</b> (<var>N, D, Z</var>)<var><a name="index-qnclosedgb-263"></a></var><br> +— Function File: [<var>Xl</var>, <var>Xu</var>, <var>Ql</var>, <var>Qu</var>] = <b>qnclosedgb</b> (<var>N, D, Z</var>)<var><a name="index-qnclosedgb-267"></a></var><br> <blockquote> - <p><a name="index-bounds_002c-geometric-264"></a><a name="index-closed-network-265"></a> + <p><a name="index-bounds_002c-geometric-268"></a><a name="index-closed-network-269"></a> Compute Geometric Bounds (GB) for single-class, closed Queueing Networks. <p><strong>INPUTS</strong> @@ -4262,7 +4290,7 @@ Queueing Networks</cite>, IEEE Transactions on Computers, 57(6):780-794, June 2008. <a href="http://doi.ieeecomputersociety.org/10.1109/TC.2008.37">http://doi.ieeecomputersociety.org/10.1109/TC.2008.37</a> - <p><a name="index-Casale_002c-G_002e-266"></a><a name="index-Muntz_002c-R_002e-R_002e-267"></a><a name="index-Serazzi_002c-G_002e-268"></a> + <p><a name="index-Casale_002c-G_002e-270"></a><a name="index-Muntz_002c-R_002e-R_002e-271"></a><a name="index-Serazzi_002c-G_002e-272"></a> In this implementation we set X^+ and X^- as the upper and lower Asymptotic Bounds as computed by the <code>qnclosedab</code> function, respectively. @@ -4282,9 +4310,9 @@ <p><a name="doc_002dqnclosed"></a> <div class="defun"> -— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosed</b> (<var>N, S, V, <small class="dots">...</small></var>)<var><a name="index-qnclosed-269"></a></var><br> +— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosed</b> (<var>N, S, V, <small class="dots">...</small></var>)<var><a name="index-qnclosed-273"></a></var><br> <blockquote> - <p><a name="index-closed-network-270"></a> + <p><a name="index-closed-network-274"></a> This function computes steady-state performance measures of closed queueing networks using the Mean Value Analysis (MVA) algorithm. The qneneing network is allowed to contain fixed-capacity centers, delay @@ -4351,9 +4379,9 @@ <p><a name="doc_002dqnopen"></a> <div class="defun"> -— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnopen</b> (<var>lambda, S, V, <small class="dots">...</small></var>)<var><a name="index-qnopen-271"></a></var><br> +— Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnopen</b> (<var>lambda, S, V, <small class="dots">...</small></var>)<var><a name="index-qnopen-275"></a></var><br> <blockquote> - <p><a name="index-open-network-272"></a> + <p><a name="index-open-network-276"></a> Compute utilization, response time, average number of requests in the system, and throughput for open queueing networks. If <var>lambda</var> is a scalar, the network is considered a single-class QN and is solved @@ -4406,8 +4434,8 @@ <p><a name="doc_002dqnvisits"></a> <div class="defun"> -— Function File: [<var>V</var> <var>ch</var>] = <b>qnvisits</b> (<var>P</var>)<var><a name="index-qnvisits-273"></a></var><br> -— Function File: <var>V</var> = <b>qnvisits</b> (<var>P, lambda</var>)<var><a name="index-qnvisits-274"></a></var><br> +— Function File: [<var>V</var> <var>ch</var>] = <b>qnvisits</b> (<var>P</var>)<var><a name="index-qnvisits-277"></a></var><br> +— Function File: <var>V</var> = <b>qnvisits</b> (<var>P, lambda</var>)<var><a name="index-qnvisits-278"></a></var><br> <blockquote> <p>Compute the average number of visits to the service centers of a single class, open or closed Queueing Network with N service @@ -4469,9 +4497,9 @@ <p><a name="doc_002dpopulation_005fmix"></a> <div class="defun"> -— Function File: pop_mix = <b>population_mix</b> (<var>k, N</var>)<var><a name="index-population_005fmix-275"></a></var><br> +— Function File: pop_mix = <b>population_mix</b> (<var>k, N</var>)<var><a name="index-population_005fmix-279"></a></var><br> <blockquote> - <p><a name="index-population-mix-276"></a><a name="index-closed-network_002c-multiple-classes-277"></a> + <p><a name="index-population-mix-280"></a><a name="index-closed-network_002c-multiple-classes-281"></a> Return the set of valid population mixes with exactly <var>k</var> customers, for a closed multiclass Queueing Network with population vector <var>N</var>. More specifically, given a multiclass Queueing @@ -4533,13 +4561,13 @@ Indices for a Complex Summation</cite>, unpublished report, available at <a href="http://arantxa.ii.uam.es/~ssantini/writing/notes/s668_summation.pdf">http://arantxa.ii.uam.es/~ssantini/writing/notes/s668_summation.pdf</a> - <p><a name="index-Schwetman_002c-H_002e-278"></a><a name="index-Santini_002c-S_002e-279"></a> + <p><a name="index-Schwetman_002c-H_002e-282"></a><a name="index-Santini_002c-S_002e-283"></a> <a name="doc_002dqnmvapop"></a> <div class="defun"> -— Function File: <var>H</var> = <b>qnmvapop</b> (<var>N</var>)<var><a name="index-qnmvapop-280"></a></var><br> +— Function File: <var>H</var> = <b>qnmvapop</b> (<var>N</var>)<var><a name="index-qnmvapop-284"></a></var><br> <blockquote> - <p><a name="index-population-mix-281"></a><a name="index-closed-network_002c-multiple-classes-282"></a> + <p><a name="index-population-mix-285"></a><a name="index-closed-network_002c-multiple-classes-286"></a> Given a network with C customer classes, this function computes the number of valid population mixes <var>H</var><code>(r,n)</code> that can be constructed by the multiclass MVA algorithm by allocating n @@ -4576,7 +4604,7 @@ Perform. Eval. Rev. 10, 3 (Sep. 1981), 80-85. DOI <a href="http://doi.acm.org/10.1145/1010629.805477">http://doi.acm.org/10.1145/1010629.805477</a> - <p><a name="index-Zahorjan_002c-J_002e-283"></a><a name="index-Wong_002c-E_002e-284"></a> + <p><a name="index-Zahorjan_002c-J_002e-287"></a><a name="index-Wong_002c-E_002e-288"></a> <!-- Appendix starts here --> <!-- DO NOT EDIT! Generated automatically by munge-texi. --> @@ -4687,7 +4715,7 @@ <h2 class="appendix">Appendix C GNU GENERAL PUBLIC LICENSE</h2> -<p><a name="index-warranty-285"></a><a name="index-copyright-286"></a> +<p><a name="index-warranty-289"></a><a name="index-copyright-290"></a> <div align="center">Version 3, 29 June 2007</div> <pre class="display"> Copyright © 2007 Free Software Foundation, Inc. <a href="http://fsf.org/">http://fsf.org/</a> @@ -5394,70 +5422,71 @@ <h2 class="unnumbered">Concept Index</h2> <ul class="index-cp" compact> -<li><a href="#index-Approximate-MVA-170">Approximate MVA</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> -<li><a href="#index-Asymmetric-_0040math_007bM_002fM_002fm_007d-system-70">Asymmetric M/M/m system</a>: <a href="#The-Asymmetric-M_002fM_002fm-System">The Asymmetric M/M/m System</a></li> -<li><a href="#index-BCMP-network-125">BCMP network</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> -<li><a href="#index-Birth_002ddeath-process-22">Birth-death process</a>: <a href="#Birth_002dDeath-process">Birth-Death process</a></li> -<li><a href="#index-Birth_002ddeath-process-9">Birth-death process</a>: <a href="#Discrete_002dTime-Markov-Chains">Discrete-Time Markov Chains</a></li> -<li><a href="#index-blocking-queueing-network-220">blocking queueing network</a>: <a href="#Algorithms-for-non-Product_002dform-QNs">Algorithms for non Product-form QNs</a></li> -<li><a href="#index-bounds_002c-asymptotic-232">bounds, asymptotic</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li> -<li><a href="#index-bounds_002c-balanced-system-247">bounds, balanced system</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li> -<li><a href="#index-bounds_002c-geometric-264">bounds, geometric</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li> -<li><a href="#index-closed-network-270">closed network</a>: <a href="#Utility-functions">Utility functions</a></li> -<li><a href="#index-closed-network-241">closed network</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li> -<li><a href="#index-closed-network-102">closed network</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> -<li><a href="#index-Closed-network_002c-approximate-analysis-172">Closed network, approximate analysis</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> -<li><a href="#index-closed-network_002c-finite-capacity-221">closed network, finite capacity</a>: <a href="#Algorithms-for-non-Product_002dform-QNs">Algorithms for non Product-form QNs</a></li> -<li><a href="#index-closed-network_002c-multiple-classes-277">closed network, multiple classes</a>: <a href="#Utility-functions">Utility functions</a></li> -<li><a href="#index-closed-network_002c-multiple-classes-227">closed network, multiple classes</a>: <a href="#Algorithms-for-non-Product_002dform-QNs">Algorithms for non Product-form QNs</a></li> -<li><a href="#index-Closed-network_002c-multiple-classes-202">Closed network, multiple classes</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> -<li><a href="#index-closed-network_002c-multiple-classes-184">closed network, multiple classes</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> -<li><a href="#index-Closed-network_002c-single-class-171">Closed network, single class</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> -<li><a href="#index-closed-network_002c-single-class-141">closed network, single class</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> -<li><a href="#index-CMVA-162">CMVA</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> -<li><a href="#index-Continuous-time-Markov-chain-17">Continuous time Markov chain</a>: <a href="#State-occupancy-probabilities">State occupancy probabilities</a></li> -<li><a href="#index-convolution-algorithm-104">convolution algorithm</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> -<li><a href="#index-copyright-286">copyright</a>: <a href="#Copying">Copying</a></li> -<li><a href="#index-Discrete-time-Markov-chain-4">Discrete time Markov chain</a>: <a href="#Discrete_002dTime-Markov-Chains">Discrete-Time Markov Chains</a></li> -<li><a href="#index-Expected-sojourn-time-26">Expected sojourn time</a>: <a href="#Expected-Sojourn-Time">Expected Sojourn Time</a></li> -<li><a href="#index-First-passage-times-40">First passage times</a>: <a href="#First-Passage-Times">First Passage Times</a></li> -<li><a href="#index-First-passage-times-13">First passage times</a>: <a href="#Discrete_002dTime-Markov-Chains">Discrete-Time Markov Chains</a></li> -<li><a href="#index-Jackson-network-95">Jackson network</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> -<li><a href="#index-load_002ddependent-service-center-114">load-dependent service center</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> -<li><a href="#index-g_t_0040math_007bM_002fG_002f1_007d-system-76">M/G/1 system</a>: <a href="#The-M_002fG_002f1-System">The M/G/1 System</a></li> -<li><a href="#index-g_t_0040math_007bM_002fH_005fm_002f1_007d-system-78">M/H_m/1 system</a>: <a href="#The-M_002fHm_002f1-System">The M/Hm/1 System</a></li> -<li><a href="#index-g_t_0040math_007bM_002fM_002f1_007d-system-42">M/M/1 system</a>: <a href="#The-M_002fM_002f1-System">The M/M/1 System</a></li> -<li><a href="#index-g_t_0040math_007bM_002fM_002f1_002fK_007d-system-62">M/M/1/K system</a>: <a href="#The-M_002fM_002f1_002fK-System">The M/M/1/K System</a></li> -<li><a href="#index-g_t_0040math_007bM_002fM_002f_007dinf-system-55">M/M/inf system</a>: <a href="#The-M_002fM_002finf-System">The M/M/inf System</a></li> -<li><a href="#index-g_t_0040math_007bM_002fM_002fm_007d-system-49">M/M/m system</a>: <a href="#The-M_002fM_002fm-System">The M/M/m System</a></li> -<li><a href="#index-g_t_0040math_007bM_002fM_002fm_002fK_007d-system-64">M/M/m/K system</a>: <a href="#The-M_002fM_002fm_002fK-System">The M/M/m/K System</a></li> -<li><a href="#index-Markov-chain_002c-continuous-time-39">Markov chain, continuous time</a>: <a href="#First-Passage-Times">First Passage Times</a></li> -<li><a href="#index-Markov-chain_002c-continuous-time-31">Markov chain, continuous time</a>: <a href="#Expected-Time-to-Absorption">Expected Time to Absorption</a></li> -<li><a href="#index-Markov-chain_002c-continuous-time-28">Markov chain, continuous time</a>: <a href="#Time_002dAveraged-Expected-Sojourn-Time">Time-Averaged Expected Sojourn Time</a></li> -<li><a href="#index-Markov-chain_002c-continuous-time-25">Markov chain, continuous time</a>: <a href="#Expected-Sojourn-Time">Expected Sojourn Time</a></li> -<li><a href="#index-Markov-chain_002c-continuous-time-21">Markov chain, continuous time</a>: <a href="#Birth_002dDeath-process">Birth-Death process</a></li> -<li><a href="#index-Markov-chain_002c-continuous-time-16">Markov chain, continuous time</a>: <a href="#State-occupancy-probabilities">State occupancy probabilities</a></li> -<li><a href="#index-Markov-chain_002c-discrete-time-3">Markov chain, discrete time</a>: <a href="#Discrete_002dTime-Markov-Chains">Discrete-Time Markov Chains</a></li> -<li><a href="#index-Markov-chain_002c-state-occupancy-probabilities-18">Markov chain, state occupancy probabilities</a>: <a href="#State-occupancy-probabilities">State occupancy probabilities</a></li> -<li><a href="#index-Markov-chain_002c-stationary-probabilities-5">Markov chain, stationary probabilities</a>: <a href="#Discrete_002dTime-Markov-Chains">Discrete-Time Markov Chains</a></li> -<li><a href="#index-Mean-time-to-absorption-32">Mean time to absorption</a>: <a href="#Expected-Time-to-Absorption">Expected Time to Absorption</a></li> -<li><a href="#index-Mean-Value-Analysys-_0028MVA_0029-140">Mean Value Analysys (MVA)</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> -<li><a href="#index-Mean-Value-Analysys-_0028MVA_0029_002c-approximate-169">Mean Value Analysys (MVA), approximate</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> -<li><a href="#index-mixed-network-212">mixed network</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> -<li><a href="#index-normalization-constant-103">normalization constant</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> -<li><a href="#index-open-network-272">open network</a>: <a href="#Utility-functions">Utility functions</a></li> -<li><a href="#index-open-network-233">open network</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li> -<li><a href="#index-open-network_002c-multiple-classes-132">open network, multiple classes</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> -<li><a href="#index-open-network_002c-single-class-94">open network, single class</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> -<li><a href="#index-population-mix-276">population mix</a>: <a href="#Utility-functions">Utility functions</a></li> -<li><a href="#index-queueing-network-with-blocking-219">queueing network with blocking</a>: <a href="#Algorithms-for-non-Product_002dform-QNs">Algorithms for non Product-form QNs</a></li> -<li><a href="#index-queueing-networks-79">queueing networks</a>: <a href="#Queueing-Networks">Queueing Networks</a></li> -<li><a href="#index-RS-blocking-230">RS blocking</a>: <a href="#Algorithms-for-non-Product_002dform-QNs">Algorithms for non Product-form QNs</a></li> -<li><a href="#index-Stationary-probabilities-19">Stationary probabilities</a>: <a href="#State-occupancy-probabilities">State occupancy probabilities</a></li> -<li><a href="#index-Stationary-probabilities-6">Stationary probabilities</a>: <a href="#Discrete_002dTime-Markov-Chains">Discrete-Time Markov Chains</a></li> -<li><a href="#index-Time_002dalveraged-sojourn-time-29">Time-alveraged sojourn time</a>: <a href="#Time_002dAveraged-Expected-Sojourn-Time">Time-Averaged Expected Sojourn Time</a></li> -<li><a href="#index-traffic-intensity-56">traffic intensity</a>: <a href="#The-M_002fM_002finf-System">The M/M/inf System</a></li> -<li><a href="#index-warranty-285">warranty</a>: <a href="#Copying">Copying</a></li> +<li><a href="#index-Approximate-MVA-174">Approximate MVA</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> +<li><a href="#index-Asymmetric-_0040math_007bM_002fM_002fm_007d-system-74">Asymmetric M/M/m system</a>: <a href="#The-Asymmetric-M_002fM_002fm-System">The Asymmetric M/M/m System</a></li> +<li><a href="#index-BCMP-network-129">BCMP network</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> +<li><a href="#index-Birth_002ddeath-process-26">Birth-death process</a>: <a href="#Birth_002dDeath-process">Birth-Death process</a></li> +<li><a href="#index-Birth_002ddeath-process-11">Birth-death process</a>: <a href="#Discrete_002dTime-Markov-Chains">Discrete-Time Markov Chains</a></li> +<li><a href="#index-blocking-queueing-network-224">blocking queueing network</a>: <a href="#Algorithms-for-non-Product_002dform-QNs">Algorithms for non Product-form QNs</a></li> +<li><a href="#index-bounds_002c-asymptotic-236">bounds, asymptotic</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li> +<li><a href="#index-bounds_002c-balanced-system-251">bounds, balanced system</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li> +<li><a href="#index-bounds_002c-geometric-268">bounds, geometric</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li> +<li><a href="#index-closed-network-274">closed network</a>: <a href="#Utility-functions">Utility functions</a></li> +<li><a href="#index-closed-network-245">closed network</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li> +<li><a href="#index-closed-network-106">closed network</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> +<li><a href="#index-Closed-network_002c-approximate-analysis-176">Closed network, approximate analysis</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> +<li><a href="#index-closed-network_002c-finite-capacity-225">closed network, finite capacity</a>: <a href="#Algorithms-for-non-Product_002dform-QNs">Algorithms for non Product-form QNs</a></li> +<li><a href="#index-closed-network_002c-multiple-classes-281">closed network, multiple classes</a>: <a href="#Utility-functions">Utility functions</a></li> +<li><a href="#index-closed-network_002c-multiple-classes-231">closed network, multiple classes</a>: <a href="#Algorithms-for-non-Product_002dform-QNs">Algorithms for non Product-form QNs</a></li> +<li><a href="#index-Closed-network_002c-multiple-classes-206">Closed network, multiple classes</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> +<li><a href="#index-closed-network_002c-multiple-classes-188">closed network, multiple classes</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> +<li><a href="#index-Closed-network_002c-single-class-175">Closed network, single class</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> +<li><a href="#index-closed-network_002c-single-class-145">closed network, single class</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> +<li><a href="#index-CMVA-166">CMVA</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> +<li><a href="#index-Continuous-time-Markov-chain-21">Continuous time Markov chain</a>: <a href="#State-occupancy-probabilities">State occupancy probabilities</a></li> +<li><a href="#index-convolution-algorithm-108">convolution algorithm</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> +<li><a href="#index-copyright-290">copyright</a>: <a href="#Copying">Copying</a></li> +<li><a href="#index-Discrete-time-Markov-chain-6">Discrete time Markov chain</a>: <a href="#Discrete_002dTime-Markov-Chains">Discrete-Time Markov Chains</a></li> +<li><a href="#index-Expected-sojourn-time-30">Expected sojourn time</a>: <a href="#Expected-Sojourn-Time">Expected Sojourn Time</a></li> +<li><a href="#index-First-passage-times-44">First passage times</a>: <a href="#First-Passage-Times">First Passage Times</a></li> +<li><a href="#index-First-passage-times-15">First passage times</a>: <a href="#Discrete_002dTime-Markov-Chains">Discrete-Time Markov Chains</a></li> +<li><a href="#index-Jackson-network-99">Jackson network</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> +<li><a href="#index-load_002ddependent-service-center-118">load-dependent service center</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> +<li><a href="#index-g_t_0040math_007bM_002fG_002f1_007d-system-80">M/G/1 system</a>: <a href="#The-M_002fG_002f1-System">The M/G/1 System</a></li> +<li><a href="#index-g_t_0040math_007bM_002fH_005fm_002f1_007d-system-82">M/H_m/1 system</a>: <a href="#The-M_002fHm_002f1-System">The M/Hm/1 System</a></li> +<li><a href="#index-g_t_0040math_007bM_002fM_002f1_007d-system-46">M/M/1 system</a>: <a href="#The-M_002fM_002f1-System">The M/M/1 System</a></li> +<li><a href="#index-g_t_0040math_007bM_002fM_002f1_002fK_007d-system-66">M/M/1/K system</a>: <a href="#The-M_002fM_002f1_002fK-System">The M/M/1/K System</a></li> +<li><a href="#index-g_t_0040math_007bM_002fM_002f_007dinf-system-59">M/M/inf system</a>: <a href="#The-M_002fM_002finf-System">The M/M/inf System</a></li> +<li><a href="#index-g_t_0040math_007bM_002fM_002fm_007d-system-53">M/M/m system</a>: <a href="#The-M_002fM_002fm-System">The M/M/m System</a></li> +<li><a href="#index-g_t_0040math_007bM_002fM_002fm_002fK_007d-system-68">M/M/m/K system</a>: <a href="#The-M_002fM_002fm_002fK-System">The M/M/m/K System</a></li> +<li><a href="#index-Markov-chain_002c-continuous-time-43">Markov chain, continuous time</a>: <a href="#First-Passage-Times">First Passage Times</a></li> +<li><a href="#index-Markov-chain_002c-continuous-time-35">Markov chain, continuous time</a>: <a href="#Expected-Time-to-Absorption">Expected Time to Absorption</a></li> +<li><a href="#index-Markov-chain_002c-continuous-time-32">Markov chain, continuous time</a>: <a href="#Time_002dAveraged-Expected-Sojourn-Time">Time-Averaged Expected Sojourn Time</a></li> +<li><a href="#index-Markov-chain_002c-continuous-time-29">Markov chain, continuous time</a>: <a href="#Expected-Sojourn-Time">Expected Sojourn Time</a></li> +<li><a href="#index-Markov-chain_002c-continuous-time-25">Markov chain, continuous time</a>: <a href="#Birth_002dDeath-process">Birth-Death process</a></li> +<li><a href="#index-Markov-chain_002c-continuous-time-20">Markov chain, continuous time</a>: <a href="#State-occupancy-probabilities">State occupancy probabilities</a></li> +<li><a href="#index-Markov-chain_002c-continuous-time-17">Markov chain, continuous time</a>: <a href="#Continuous_002dTime-Markov-Chains">Continuous-Time Markov Chains</a></li> +<li><a href="#index-Markov-chain_002c-discrete-time-2">Markov chain, discrete time</a>: <a href="#Discrete_002dTime-Markov-Chains">Discrete-Time Markov Chains</a></li> +<li><a href="#index-Markov-chain_002c-state-occupancy-probabilities-22">Markov chain, state occupancy probabilities</a>: <a href="#State-occupancy-probabilities">State occupancy probabilities</a></li> +<li><a href="#index-Markov-chain_002c-stationary-probabilities-7">Markov chain, stationary probabilities</a>: <a href="#Discrete_002dTime-Markov-Chains">Discrete-Time Markov Chains</a></li> +<li><a href="#index-Mean-time-to-absorption-36">Mean time to absorption</a>: <a href="#Expected-Time-to-Absorption">Expected Time to Absorption</a></li> +<li><a href="#index-Mean-Value-Analysys-_0028MVA_0029-144">Mean Value Analysys (MVA)</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> +<li><a href="#index-Mean-Value-Analysys-_0028MVA_0029_002c-approximate-173">Mean Value Analysys (MVA), approximate</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> +<li><a href="#index-mixed-network-216">mixed network</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> +<li><a href="#index-normalization-constant-107">normalization constant</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> +<li><a href="#index-open-network-276">open network</a>: <a href="#Utility-functions">Utility functions</a></li> +<li><a href="#index-open-network-237">open network</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li> +<li><a href="#index-open-network_002c-multiple-classes-136">open network, multiple classes</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> +<li><a href="#index-open-network_002c-single-class-98">open network, single class</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> +<li><a href="#index-population-mix-280">population mix</a>: <a href="#Utility-functions">Utility functions</a></li> +<li><a href="#index-queueing-network-with-blocking-223">queueing network with blocking</a>: <a href="#Algorithms-for-non-Product_002dform-QNs">Algorithms for non Product-form QNs</a></li> +<li><a href="#index-queueing-networks-83">queueing networks</a>: <a href="#Queueing-Networks">Queueing Networks</a></li> +<li><a href="#index-RS-blocking-234">RS blocking</a>: <a href="#Algorithms-for-non-Product_002dform-QNs">Algorithms for non Product-form QNs</a></li> +<li><a href="#index-Stationary-probabilities-23">Stationary probabilities</a>: <a href="#State-occupancy-probabilities">State occupancy probabilities</a></li> +<li><a href="#index-Stationary-probabilities-8">Stationary probabilities</a>: <a href="#Discrete_002dTime-Markov-Chains">Discrete-Time Markov Chains</a></li> +<li><a href="#index-Time_002dalveraged-sojourn-time-33">Time-alveraged sojourn time</a>: <a href="#Time_002dAveraged-Expected-Sojourn-Time">Time-Averaged Expected Sojourn Time</a></li> +<li><a href="#index-traffic-intensity-60">traffic intensity</a>: <a href="#The-M_002fM_002finf-System">The M/M/inf System</a></li> +<li><a href="#index-warranty-289">warranty</a>: <a href="#Copying">Copying</a></li> </ul><div class="node"> <a name="Function-Index"></a> <p><hr> @@ -5472,50 +5501,52 @@ <ul class="index-fn" compact> -<li><a href="#index-ctmc-14"><code>ctmc</code></a>: <a href="#State-occupancy-probabilities">State occupancy probabilities</a></li> -<li><a href="#index-ctmc_005fbd-20"><code>ctmc_bd</code></a>: <a href="#Birth_002dDeath-process">Birth-Death process</a></li> -<li><a href="#index-ctmc_005fexps-23"><code>ctmc_exps</code></a>: <a href="#Expected-Sojourn-Time">Expected Sojourn Time</a></li> -<li><a href="#index-ctmc_005ffpt-37"><code>ctmc_fpt</code></a>: <a href="#First-Passage-Times">First Passage Times</a></li> -<li><a href="#index-ctmc_005fmtta-30"><code>ctmc_mtta</code></a>: <a href="#Expected-Time-to-Absorption">Expected Time to Absorption</a></li> -<li><a href="#index-ctmc_005ftaexps-27"><code>ctmc_taexps</code></a>: <a href="#Time_002dAveraged-Expected-Sojourn-Time">Time-Averaged Expected Sojourn Time</a></li> -<li><a href="#index-dtmc-1"><code>dtmc</code></a>: <a href="#Discrete_002dTime-Markov-Chains">Discrete-Time Markov Chains</a></li> -<li><a href="#index-dtmc_005fbd-7"><code>dtmc_bd</code></a>: <a href="#Discrete_002dTime-Markov-Chains">Discrete-Time Markov Chains</a></li> -<li><a href="#index-dtmc_005ffpt-10"><code>dtmc_fpt</code></a>: <a href="#Discrete_002dTime-Markov-Chains">Discrete-Time Markov Chains</a></li> -<li><a href="#index-population_005fmix-275"><code>population_mix</code></a>: <a href="#Utility-functions">Utility functions</a></li> -<li><a href="#index-qnammm-69"><code>qnammm</code></a>: <a href="#The-Asymmetric-M_002fM_002fm-System">The Asymmetric M/M/m System</a></li> -<li><a href="#index-qnclosed-269"><code>qnclosed</code></a>: <a href="#Utility-functions">Utility functions</a></li> -<li><a href="#index-qnclosedab-238"><code>qnclosedab</code></a>: <a href="#Bounds-on-performance">Bounds on performance</a></li> -<li><a href="#index-qnclosedbsb-253"><code>qnclosedbsb</code></a>: <a href="#Bounds-on-performance">Bounds on performance</a></li> -<li><a href="#index-qnclosedgb-263"><code>qnclosedgb</code></a>: <a href="#Bounds-on-performance">Bounds on performance</a></li> -<li><a href="#index-qnclosedmultimva-177"><code>qnclosedmultimva</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> -<li><a href="#index-qnclosedmultimvaapprox-195"><code>qnclosedmultimvaapprox</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> -<li><a href="#index-qnclosedpb-257"><code>qnclosedpb</code></a>: <a href="#Bounds-on-performance">Bounds on performance</a></li> -<li><a href="#index-qnclosedsinglemva-137"><code>qnclosedsinglemva</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> -<li><a href="#index-qnclosedsinglemvaapprox-164"><code>qnclosedsinglemvaapprox</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> -<li><a href="#index-qnclosedsinglemvald-150"><code>qnclosedsinglemvald</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> -<li><a href="#index-qncmva-159"><code>qncmva</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> -<li><a href="#index-qnconvolution-100"><code>qnconvolution</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> -<li><a href="#index-qnconvolutionld-110"><code>qnconvolutionld</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> -<li><a href="#index-qnjackson-91"><code>qnjackson</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> -<li><a href="#index-qnmarkov-223"><code>qnmarkov</code></a>: <a href="#Algorithms-for-non-Product_002dform-QNs">Algorithms for non Product-form QNs</a></li> -<li><a href="#index-qnmg1-75"><code>qnmg1</code></a>: <a href="#The-M_002fG_002f1-System">The M/G/1 System</a></li> -<li><a href="#index-qnmh1-77"><code>qnmh1</code></a>: <a href="#The-M_002fHm_002f1-System">The M/Hm/1 System</a></li> -<li><a href="#index-qnmix-210"><code>qnmix</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> -<li><a href="#index-qnmknode-80"><code>qnmknode</code></a>: <a href="#Generic-Algorithms">Generic Algorithms</a></li> -<li><a href="#index-qnmm1-41"><code>qnmm1</code></a>: <a href="#The-M_002fM_002f1-System">The M/M/1 System</a></li> -<li><a href="#index-qnmm1k-61"><code>qnmm1k</code></a>: <a href="#The-M_002fM_002f1_002fK-System">The M/M/1/K System</a></li> -<li><a href="#index-qnmminf-54"><code>qnmminf</code></a>: <a href="#The-M_002fM_002finf-System">The M/M/inf System</a></li> -<li><a href="#index-qnmmm-47"><code>qnmmm</code></a>: <a href="#The-M_002fM_002fm-System">The M/M/m System</a></li> -<li><a href="#index-qnmmmk-63"><code>qnmmmk</code></a>: <a href="#The-M_002fM_002fm_002fK-System">The M/M/m/K System</a></li> -<li><a href="#index-qnmvablo-218"><code>qnmvablo</code></a>: <a href="#Algorithms-for-non-Product_002dform-QNs">Algorithms for non Product-form QNs</a></li> -<li><a href="#index-qnmvapop-280"><code>qnmvapop</code></a>: <a href="#Utility-functions">Utility functions</a></li> -<li><a href="#index-qnopen-271"><code>qnopen</code></a>: <a href="#Utility-functions">Utility functions</a></li> -<li><a href="#index-qnopenab-231"><code>qnopenab</code></a>: <a href="#Bounds-on-performance">Bounds on performance</a></li> -<li><a href="#index-qnopenbsb-246"><code>qnopenbsb</code></a>: <a href="#Bounds-on-performance">Bounds on performance</a></li> -<li><a href="#index-qnopenmulti-130"><code>qnopenmulti</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> -<li><a href="#index-qnopensingle-122"><code>qnopensingle</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> -<li><a href="#index-qnsolve-87"><code>qnsolve</code></a>: <a href="#Generic-Algorithms">Generic Algorithms</a></li> -<li><a href="#index-qnvisits-273"><code>qnvisits</code></a>: <a href="#Utility-functions">Utility functions</a></li> +<li><a href="#index-ctmc-18"><code>ctmc</code></a>: <a href="#State-occupancy-probabilities">State occupancy probabilities</a></li> +<li><a href="#index-ctmc_005fbd-24"><code>ctmc_bd</code></a>: <a href="#Birth_002dDeath-process">Birth-Death process</a></li> +<li><a href="#index-ctmc_005fcheck_005fQ-16"><code>ctmc_check_Q</code></a>: <a href="#Continuous_002dTime-Markov-Chains">Continuous-Time Markov Chains</a></li> +<li><a href="#index-ctmc_005fexps-27"><code>ctmc_exps</code></a>: <a href="#Expected-Sojourn-Time">Expected Sojourn Time</a></li> +<li><a href="#index-ctmc_005ffpt-41"><code>ctmc_fpt</code></a>: <a href="#First-Passage-Times">First Passage Times</a></li> +<li><a href="#index-ctmc_005fmtta-34"><code>ctmc_mtta</code></a>: <a href="#Expected-Time-to-Absorption">Expected Time to Absorption</a></li> +<li><a href="#index-ctmc_005ftaexps-31"><code>ctmc_taexps</code></a>: <a href="#Time_002dAveraged-Expected-Sojourn-Time">Time-Averaged Expected Sojourn Time</a></li> +<li><a href="#index-dtmc-3"><code>dtmc</code></a>: <a href="#Discrete_002dTime-Markov-Chains">Discrete-Time Markov Chains</a></li> +<li><a href="#index-dtmc_005fbd-9"><code>dtmc_bd</code></a>: <a href="#Discrete_002dTime-Markov-Chains">Discrete-Time Markov Chains</a></li> +<li><a href="#index-dtmc_005fcheck_005fP-1"><code>dtmc_check_P</code></a>: <a href="#Discrete_002dTime-Markov-Chains">Discrete-Time Markov Chains</a></li> +<li><a href="#index-dtmc_005ffpt-12"><code>dtmc_fpt</code></a>: <a href="#Discrete_002dTime-Markov-Chains">Discrete-Time Markov Chains</a></li> +<li><a href="#index-population_005fmix-279"><code>population_mix</code></a>: <a href="#Utility-functions">Utility functions</a></li> +<li><a href="#index-qnammm-73"><code>qnammm</code></a>: <a href="#The-Asymmetric-M_002fM_002fm-System">The Asymmetric M/M/m System</a></li> +<li><a href="#index-qnclosed-273"><code>qnclosed</code></a>: <a href="#Utility-functions">Utility functions</a></li> +<li><a href="#index-qnclosedab-242"><code>qnclosedab</code></a>: <a href="#Bounds-on-performance">Bounds on performance</a></li> +<li><a href="#index-qnclosedbsb-257"><code>qnclosedbsb</code></a>: <a href="#Bounds-on-performance">Bounds on performance</a></li> +<li><a href="#index-qnclosedgb-267"><code>qnclosedgb</code></a>: <a href="#Bounds-on-performance">Bounds on performance</a></li> +<li><a href="#index-qnclosedmultimva-181"><code>qnclosedmultimva</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> +<li><a href="#index-qnclosedmultimvaapprox-199"><code>qnclosedmultimvaapprox</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> +<li><a href="#index-qnclosedpb-261"><code>qnclosedpb</code></a>: <a href="#Bounds-on-performance">Bounds on performance</a></li> +<li><a href="#index-qnclosedsinglemva-141"><code>qnclosedsinglemva</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> +<li><a href="#index-qnclosedsinglemvaapprox-168"><code>qnclosedsinglemvaapprox</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> +<li><a href="#index-qnclosedsinglemvald-154"><code>qnclosedsinglemvald</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> +<li><a href="#index-qncmva-163"><code>qncmva</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> +<li><a href="#index-qnconvolution-104"><code>qnconvolution</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> +<li><a href="#index-qnconvolutionld-114"><code>qnconvolutionld</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> +<li><a href="#index-qnjackson-95"><code>qnjackson</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> +<li><a href="#index-qnmarkov-227"><code>qnmarkov</code></a>: <a href="#Algorithms-for-non-Product_002dform-QNs">Algorithms for non Product-form QNs</a></li> +<li><a href="#index-qnmg1-79"><code>qnmg1</code></a>: <a href="#The-M_002fG_002f1-System">The M/G/1 System</a></li> +<li><a href="#index-qnmh1-81"><code>qnmh1</code></a>: <a href="#The-M_002fHm_002f1-System">The M/Hm/1 System</a></li> +<li><a href="#index-qnmix-214"><code>qnmix</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> +<li><a href="#index-qnmknode-84"><code>qnmknode</code></a>: <a href="#Generic-Algorithms">Generic Algorithms</a></li> +<li><a href="#index-qnmm1-45"><code>qnmm1</code></a>: <a href="#The-M_002fM_002f1-System">The M/M/1 System</a></li> +<li><a href="#index-qnmm1k-65"><code>qnmm1k</code></a>: <a href="#The-M_002fM_002f1_002fK-System">The M/M/1/K System</a></li> +<li><a href="#index-qnmminf-58"><code>qnmminf</code></a>: <a href="#The-M_002fM_002finf-System">The M/M/inf System</a></li> +<li><a href="#index-qnmmm-51"><code>qnmmm</code></a>: <a href="#The-M_002fM_002fm-System">The M/M/m System</a></li> +<li><a href="#index-qnmmmk-67"><code>qnmmmk</code></a>: <a href="#The-M_002fM_002fm_002fK-System">The M/M/m/K System</a></li> +<li><a href="#index-qnmvablo-222"><code>qnmvablo</code></a>: <a href="#Algorithms-for-non-Product_002dform-QNs">Algorithms for non Product-form QNs</a></li> +<li><a href="#index-qnmvapop-284"><code>qnmvapop</code></a>: <a href="#Utility-functions">Utility functions</a></li> +<li><a href="#index-qnopen-275"><code>qnopen</code></a>: <a href="#Utility-functions">Utility functions</a></li> +<li><a href="#index-qnopenab-235"><code>qnopenab</code></a>: <a href="#Bounds-on-performance">Bounds on performance</a></li> +<li><a href="#index-qnopenbsb-250"><code>qnopenbsb</code></a>: <a href="#Bounds-on-performance">Bounds on performance</a></li> +<li><a href="#index-qnopenmulti-134"><code>qnopenmulti</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> +<li><a href="#index-qnopensingle-126"><code>qnopensingle</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> +<li><a href="#index-qnsolve-91"><code>qnsolve</code></a>: <a href="#Generic-Algorithms">Generic Algorithms</a></li> +<li><a href="#index-qnvisits-277"><code>qnvisits</code></a>: <a href="#Utility-functions">Utility functions</a></li> </ul><div class="node"> <a name="Author-Index"></a> <p><hr> @@ -5529,60 +5560,60 @@ <ul class="index-au" compact> -<li><a href="#index-Akyildiz_002c-I_002e-F_002e-222">Akyildiz, I. F.</a>: <a href="#Algorithms-for-non-Product_002dform-QNs">Algorithms for non Product-form QNs</a></li> -<li><a href="#index-Bard_002c-Y_002e-204">Bard, Y.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> -<li><a href="#index-Bolch_002c-G_002e-96">Bolch, G.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> -<li><a href="#index-Bolch_002c-G_002e-71">Bolch, G.</a>: <a href="#The-Asymmetric-M_002fM_002fm-System">The Asymmetric M/M/m System</a></li> -<li><a href="#index-Bolch_002c-G_002e-65">Bolch, G.</a>: <a href="#The-M_002fM_002fm_002fK-System">The M/M/m/K System</a></li> -<li><a href="#index-Bolch_002c-G_002e-57">Bolch, G.</a>: <a href="#The-M_002fM_002finf-System">The M/M/inf System</a></li> -<li><a href="#index-Bolch_002c-G_002e-50">Bolch, G.</a>: <a href="#The-M_002fM_002fm-System">The M/M/m System</a></li> -<li><a href="#index-Bolch_002c-G_002e-43">Bolch, G.</a>: <a href="#The-M_002fM_002f1-System">The M/M/1 System</a></li> -<li><a href="#index-Bolch_002c-G_002e-33">Bolch, G.</a>: <a href="#Expected-Time-to-Absorption">Expected Time to Absorption</a></li> -<li><a href="#index-Buzen_002c-J_002e-P_002e-105">Buzen, J. P.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> -<li><a href="#index-Casale_002c-G_002e-260">Casale, G.</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li> -<li><a href="#index-Casale_002c-G_002e-163">Casale, G.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> -<li><a href="#index-de-Meer_002c-H_002e-98">de Meer, H.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> -<li><a href="#index-de-Meer_002c-H_002e-73">de Meer, H.</a>: <a href="#The-Asymmetric-M_002fM_002fm-System">The Asymmetric M/M/m System</a></li> -<li><a href="#index-de-Meer_002c-H_002e-67">de Meer, H.</a>: <a href="#The-M_002fM_002fm_002fK-System">The M/M/m/K System</a></li> -<li><a href="#index-de-Meer_002c-H_002e-59">de Meer, H.</a>: <a href="#The-M_002fM_002finf-System">The M/M/inf System</a></li> -<li><a href="#index-de-Meer_002c-H_002e-52">de Meer, H.</a>: <a href="#The-M_002fM_002fm-System">The M/M/m System</a></li> -<li><a href="#index-de-Meer_002c-H_002e-45">de Meer, H.</a>: <a href="#The-M_002fM_002f1-System">The M/M/1 System</a></li> -<li><a href="#index-de-Meer_002c-H_002e-35">de Meer, H.</a>: <a href="#Expected-Time-to-Absorption">Expected Time to Absorption</a></li> -<li><a href="#index-Graham_002c-G_002e-S_002e-236">Graham, G. S.</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li> -<li><a href="#index-Graham_002c-G_002e-S_002e-135">Graham, G. S.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> -<li><a href="#index-Greiner_002c-S_002e-97">Greiner, S.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> -<li><a href="#index-Greiner_002c-S_002e-72">Greiner, S.</a>: <a href="#The-Asymmetric-M_002fM_002fm-System">The Asymmetric M/M/m System</a></li> -<li><a href="#index-Greiner_002c-S_002e-66">Greiner, S.</a>: <a href="#The-M_002fM_002fm_002fK-System">The M/M/m/K System</a></li> -<li><a href="#index-Greiner_002c-S_002e-58">Greiner, S.</a>: <a href="#The-M_002fM_002finf-System">The M/M/inf System</a></li> -<li><a href="#index-Greiner_002c-S_002e-51">Greiner, S.</a>: <a href="#The-M_002fM_002fm-System">The M/M/m System</a></li> -<li><a href="#index-Greiner_002c-S_002e-44">Greiner, S.</a>: <a href="#The-M_002fM_002f1-System">The M/M/1 System</a></li> -<li><a href="#index-Greiner_002c-S_002e-34">Greiner, S.</a>: <a href="#Expected-Time-to-Absorption">Expected Time to Absorption</a></li> -<li><a href="#index-Hsieh_002c-C_002e-H-258">Hsieh, C. H</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li> -<li><a href="#index-Jain_002c-R_002e-145">Jain, R.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> -<li><a href="#index-Kobayashi_002c-H_002e-117">Kobayashi, H.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> -<li><a href="#index-Lam_002c-S_002e-259">Lam, S.</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li> -<li><a href="#index-Lavenberg_002c-S_002e-S_002e-144">Lavenberg, S. S.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> -<li><a href="#index-Lazowska_002c-E_002e-D_002e-234">Lazowska, E. D.</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li> -<li><a href="#index-Lazowska_002c-E_002e-D_002e-133">Lazowska, E. D.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> -<li><a href="#index-Muntz_002c-R_002e-R_002e-261">Muntz, R. R.</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li> -<li><a href="#index-Reiser_002c-M_002e-116">Reiser, M.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> -<li><a href="#index-Santini_002c-S_002e-279">Santini, S.</a>: <a href="#Utility-functions">Utility functions</a></li> -<li><a href="#index-Schweitzer_002c-P_002e-205">Schweitzer, P.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> -<li><a href="#index-Schwetman_002c-H_002e-278">Schwetman, H.</a>: <a href="#Utility-functions">Utility functions</a></li> -<li><a href="#index-Schwetman_002c-H_002e-115">Schwetman, H.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> -<li><a href="#index-Serazzi_002c-G_002e-262">Serazzi, G.</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li> -<li><a href="#index-Sevcik_002c-K_002e-C_002e-237">Sevcik, K. C.</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li> -<li><a href="#index-Sevcik_002c-K_002e-C_002e-136">Sevcik, K. C.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> -<li><a href="#index-Trivedi_002c-K_002e-99">Trivedi, K.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> -<li><a href="#index-Trivedi_002c-K_002e-74">Trivedi, K.</a>: <a href="#The-Asymmetric-M_002fM_002fm-System">The Asymmetric M/M/m System</a></li> -<li><a href="#index-Trivedi_002c-K_002e-68">Trivedi, K.</a>: <a href="#The-M_002fM_002fm_002fK-System">The M/M/m/K System</a></li> -<li><a href="#index-Trivedi_002c-K_002e-60">Trivedi, K.</a>: <a href="#The-M_002fM_002finf-System">The M/M/inf System</a></li> -<li><a href="#index-Trivedi_002c-K_002e-53">Trivedi, K.</a>: <a href="#The-M_002fM_002fm-System">The M/M/m System</a></li> -<li><a href="#index-Trivedi_002c-K_002e-46">Trivedi, K.</a>: <a href="#The-M_002fM_002f1-System">The M/M/1 System</a></li> -<li><a href="#index-Trivedi_002c-K_002e-36">Trivedi, K.</a>: <a href="#Expected-Time-to-Absorption">Expected Time to Absorption</a></li> -<li><a href="#index-Wong_002c-E_002e-284">Wong, E.</a>: <a href="#Utility-functions">Utility functions</a></li> -<li><a href="#index-Zahorjan_002c-J_002e-283">Zahorjan, J.</a>: <a href="#Utility-functions">Utility functions</a></li> -<li><a href="#index-Zahorjan_002c-J_002e-235">Zahorjan, J.</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li> -<li><a href="#index-Zahorjan_002c-J_002e-134">Zahorjan, J.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> +<li><a href="#index-Akyildiz_002c-I_002e-F_002e-226">Akyildiz, I. F.</a>: <a href="#Algorithms-for-non-Product_002dform-QNs">Algorithms for non Product-form QNs</a></li> +<li><a href="#index-Bard_002c-Y_002e-208">Bard, Y.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> +<li><a href="#index-Bolch_002c-G_002e-100">Bolch, G.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> +<li><a href="#index-Bolch_002c-G_002e-75">Bolch, G.</a>: <a href="#The-Asymmetric-M_002fM_002fm-System">The Asymmetric M/M/m System</a></li> +<li><a href="#index-Bolch_002c-G_002e-69">Bolch, G.</a>: <a href="#The-M_002fM_002fm_002fK-System">The M/M/m/K System</a></li> +<li><a href="#index-Bolch_002c-G_002e-61">Bolch, G.</a>: <a href="#The-M_002fM_002finf-System">The M/M/inf System</a></li> +<li><a href="#index-Bolch_002c-G_002e-54">Bolch, G.</a>: <a href="#The-M_002fM_002fm-System">The M/M/m System</a></li> +<li><a href="#index-Bolch_002c-G_002e-47">Bolch, G.</a>: <a href="#The-M_002fM_002f1-System">The M/M/1 System</a></li> +<li><a href="#index-Bolch_002c-G_002e-37">Bolch, G.</a>: <a href="#Expected-Time-to-Absorption">Expected Time to Absorption</a></li> +<li><a href="#index-Buzen_002c-J_002e-P_002e-109">Buzen, J. P.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> +<li><a href="#index-Casale_002c-G_002e-264">Casale, G.</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li> +<li><a href="#index-Casale_002c-G_002e-167">Casale, G.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> +<li><a href="#index-de-Meer_002c-H_002e-102">de Meer, H.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> +<li><a href="#index-de-Meer_002c-H_002e-77">de Meer, H.</a>: <a href="#The-Asymmetric-M_002fM_002fm-System">The Asymmetric M/M/m System</a></li> +<li><a href="#index-de-Meer_002c-H_002e-71">de Meer, H.</a>: <a href="#The-M_002fM_002fm_002fK-System">The M/M/m/K System</a></li> +<li><a href="#index-de-Meer_002c-H_002e-63">de Meer, H.</a>: <a href="#The-M_002fM_002finf-System">The M/M/inf System</a></li> +<li><a href="#index-de-Meer_002c-H_002e-56">de Meer, H.</a>: <a href="#The-M_002fM_002fm-System">The M/M/m System</a></li> +<li><a href="#index-de-Meer_002c-H_002e-49">de Meer, H.</a>: <a href="#The-M_002fM_002f1-System">The M/M/1 System</a></li> +<li><a href="#index-de-Meer_002c-H_002e-39">de Meer, H.</a>: <a href="#Expected-Time-to-Absorption">Expected Time to Absorption</a></li> +<li><a href="#index-Graham_002c-G_002e-S_002e-240">Graham, G. S.</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li> +<li><a href="#index-Graham_002c-G_002e-S_002e-139">Graham, G. S.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> +<li><a href="#index-Greiner_002c-S_002e-101">Greiner, S.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> +<li><a href="#index-Greiner_002c-S_002e-76">Greiner, S.</a>: <a href="#The-Asymmetric-M_002fM_002fm-System">The Asymmetric M/M/m System</a></li> +<li><a href="#index-Greiner_002c-S_002e-70">Greiner, S.</a>: <a href="#The-M_002fM_002fm_002fK-System">The M/M/m/K System</a></li> +<li><a href="#index-Greiner_002c-S_002e-62">Greiner, S.</a>: <a href="#The-M_002fM_002finf-System">The M/M/inf System</a></li> +<li><a href="#index-Greiner_002c-S_002e-55">Greiner, S.</a>: <a href="#The-M_002fM_002fm-System">The M/M/m System</a></li> +<li><a href="#index-Greiner_002c-S_002e-48">Greiner, S.</a>: <a href="#The-M_002fM_002f1-System">The M/M/1 System</a></li> +<li><a href="#index-Greiner_002c-S_002e-38">Greiner, S.</a>: <a href="#Expected-Time-to-Absorption">Expected Time to Absorption</a></li> +<li><a href="#index-Hsieh_002c-C_002e-H-262">Hsieh, C. H</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li> +<li><a href="#index-Jain_002c-R_002e-149">Jain, R.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> +<li><a href="#index-Kobayashi_002c-H_002e-121">Kobayashi, H.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> +<li><a href="#index-Lam_002c-S_002e-263">Lam, S.</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li> +<li><a href="#index-Lavenberg_002c-S_002e-S_002e-148">Lavenberg, S. S.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> +<li><a href="#index-Lazowska_002c-E_002e-D_002e-238">Lazowska, E. D.</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li> +<li><a href="#index-Lazowska_002c-E_002e-D_002e-137">Lazowska, E. D.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> +<li><a href="#index-Muntz_002c-R_002e-R_002e-265">Muntz, R. R.</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li> +<li><a href="#index-Reiser_002c-M_002e-120">Reiser, M.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> +<li><a href="#index-Santini_002c-S_002e-283">Santini, S.</a>: <a href="#Utility-functions">Utility functions</a></li> +<li><a href="#index-Schweitzer_002c-P_002e-209">Schweitzer, P.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> +<li><a href="#index-Schwetman_002c-H_002e-282">Schwetman, H.</a>: <a href="#Utility-functions">Utility functions</a></li> +<li><a href="#index-Schwetman_002c-H_002e-119">Schwetman, H.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> +<li><a href="#index-Serazzi_002c-G_002e-266">Serazzi, G.</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li> +<li><a href="#index-Sevcik_002c-K_002e-C_002e-241">Sevcik, K. C.</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li> +<li><a href="#index-Sevcik_002c-K_002e-C_002e-140">Sevcik, K. C.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> +<li><a href="#index-Trivedi_002c-K_002e-103">Trivedi, K.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> +<li><a href="#index-Trivedi_002c-K_002e-78">Trivedi, K.</a>: <a href="#The-Asymmetric-M_002fM_002fm-System">The Asymmetric M/M/m System</a></li> +<li><a href="#index-Trivedi_002c-K_002e-72">Trivedi, K.</a>: <a href="#The-M_002fM_002fm_002fK-System">The M/M/m/K System</a></li> +<li><a href="#index-Trivedi_002c-K_002e-64">Trivedi, K.</a>: <a href="#The-M_002fM_002finf-System">The M/M/inf System</a></li> +<li><a href="#index-Trivedi_002c-K_002e-57">Trivedi, K.</a>: <a href="#The-M_002fM_002fm-System">The M/M/m System</a></li> +<li><a href="#index-Trivedi_002c-K_002e-50">Trivedi, K.</a>: <a href="#The-M_002fM_002f1-System">The M/M/1 System</a></li> +<li><a href="#index-Trivedi_002c-K_002e-40">Trivedi, K.</a>: <a href="#Expected-Time-to-Absorption">Expected Time to Absorption</a></li> +<li><a href="#index-Wong_002c-E_002e-288">Wong, E.</a>: <a href="#Utility-functions">Utility functions</a></li> +<li><a href="#index-Zahorjan_002c-J_002e-287">Zahorjan, J.</a>: <a href="#Utility-functions">Utility functions</a></li> +<li><a href="#index-Zahorjan_002c-J_002e-239">Zahorjan, J.</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li> +<li><a href="#index-Zahorjan_002c-J_002e-138">Zahorjan, J.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li> </ul></body></html>
--- a/main/queueing/inst/ctmc.m Sun Mar 11 11:20:31 2012 +0000 +++ b/main/queueing/inst/ctmc.m Sun Mar 11 15:45:11 2012 +0000 @@ -80,13 +80,10 @@ print_usage(); endif - issquare(Q) || \ - usage( "Q must be a square matrix" ); + [N err] = ctmc_check_Q(Q); - N = rows(Q); - - ( norm( sum(Q,2), "inf" ) < epsilon ) || \ - usage( "Q is not an infinitesimal generator matrix" ); + ( N>0 ) || \ + usage(err); if ( nargin > 1 ) ( isscalar(t) && t>=0 ) || \
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main/queueing/inst/ctmc_check_Q.m Sun Mar 11 15:45:11 2012 +0000 @@ -0,0 +1,56 @@ +## Copyright (C)2012 Moreno Marzolla +## +## This file is part of the queueing toolbox. +## +## The queueing toolbox is free software: you can redistribute it and/or +## modify it under the terms of the GNU General Public License as +## published by the Free Software Foundation, either version 3 of the +## License, or (at your option) any later version. +## +## The queueing toolbox is distributed in the hope that it will be +## useful, but WITHOUT ANY WARRANTY; without even the implied warranty +## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +## General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with the queueing toolbox. If not, see <http://www.gnu.org/licenses/>. + +## -*- texinfo -*- +## +## @deftypefn {Function File} {[@var{result} @var{err}] =} ctmc_check_Q (@var{Q}) +## +## @cindex Markov chain, continuous time +## +## If @var{Q} is a valid infinitesimal generator matrix, return +## the size (number of rows or columns) of @var{Q}. If @var{Q} is not +## an infinitesimal generator matrix, set @var{result} to zero, and +## @var{err} to an appropriate error string. +## +## @end deftypefn + +## Author: Moreno Marzolla <marzolla(at)cs.unibo.it> +## Web: http://www.moreno.marzolla.name/ + +function [result err] = ctmc_check_Q( Q ) + + persistent epsilon = 10*eps; + + if ( nargin != 1 ) + print_usage(); + endif + + result = 0; + + if ( !issquare(Q) ) + err = "P is not a square matrix"; + return; + endif + + if ( norm( sum(Q,2), "inf" ) > epsilon ) + err = "Q is not an infinitesimal generator matrix"; + return; + endif + + result = rows(Q); + err = ""; +endfunction
--- a/main/queueing/inst/ctmc_exps.m Sun Mar 11 11:20:31 2012 +0000 +++ b/main/queueing/inst/ctmc_exps.m Sun Mar 11 15:45:11 2012 +0000 @@ -76,11 +76,10 @@ print_usage(); endif - issquare(Q) || \ - usage( "Q must be a square matrix" ); + [N err] = ctmc_check_Q(Q); - ( norm( sum(Q,2), "inf" ) < epsilon ) || \ - usage( "Q is not an infinitesimal generator matrix" ); + (N>0) || \ + usage(err); if ( nargin == 2 ) p = varargin{1};
--- a/main/queueing/inst/ctmc_fpt.m Sun Mar 11 11:20:31 2012 +0000 +++ b/main/queueing/inst/ctmc_fpt.m Sun Mar 11 15:45:11 2012 +0000 @@ -77,13 +77,10 @@ print_usage(); endif - issquare(Q) || \ - usage( "Q must be a square matrix" ); - - N = rows(Q); - - ( norm( sum(Q,2), "inf" ) < epsilon ) || \ - usage( "Q is not an infinitesimal generator matrix" ); + [N err] = ctmc_check_Q(Q); + + (N>0) || \ + usage(err); if ( nargin == 1 ) M = zeros(N,N);
--- a/main/queueing/inst/ctmc_mtta.m Sun Mar 11 11:20:31 2012 +0000 +++ b/main/queueing/inst/ctmc_mtta.m Sun Mar 11 15:45:11 2012 +0000 @@ -66,13 +66,10 @@ print_usage(); endif - issquare(Q) || \ - usage( "Q must be a square matrix" ); - - N = rows(Q); + [N err] = ctmc_check_Q(Q); - ( norm( sum(Q,2), "inf" ) < epsilon ) || \ - usage( "Q must be an infinitesimal generator matrix" ); + (N>0) || \ + usage(err); ( isvector(p) && length(p) == N && all(p>=0) && abs(sum(p)-1.0)<epsilon ) || \ usage( "p must be a probability vector" ); @@ -90,7 +87,7 @@ %!test %! Q = [0 1 0; 1 0 1; 0 0 0 ]; -%! fail( "ctmc_mtta(Q,[1 0 0])", "must be an infinitesimal"); +%! fail( "ctmc_mtta(Q,[1 0 0])", "infinitesimal"); %!test %! Q = [ 0 0.1 0 0; \
--- a/main/queueing/inst/ctmc_taexps.m Sun Mar 11 11:20:31 2012 +0000 +++ b/main/queueing/inst/ctmc_taexps.m Sun Mar 11 15:45:11 2012 +0000 @@ -70,13 +70,10 @@ print_usage(); endif - issquare(Q) || \ - usage( "Q must be a square matrix" ); + [N err] = ctmc_check_Q(Q); - N = rows(Q); - - ( norm( sum(Q,2), "inf" ) < epsilon ) || \ - usage( "Q is not an infinitesimal generator matrix" ); + (N>0) || \ + usage(err); ( isvector(p) && length(p) == N && all(p>=0) && abs(sum(p)-1.0)<epsilon ) || \ usage( "p must be a probability vector" );
--- a/main/queueing/inst/dtmc.m Sun Mar 11 11:20:31 2012 +0000 +++ b/main/queueing/inst/dtmc.m Sun Mar 11 15:45:11 2012 +0000 @@ -80,7 +80,10 @@ print_usage(); endif - N = dtmc_check_P(P); + [N err] = dtmc_check_P(P); + + ( N>0 ) || \ + usage( err ); if ( nargin > 1 ) ( isscalar(n) && n>=0 ) || \
--- a/main/queueing/inst/dtmc_check_P.m Sun Mar 11 11:20:31 2012 +0000 +++ b/main/queueing/inst/dtmc_check_P.m Sun Mar 11 15:45:11 2012 +0000 @@ -17,21 +17,21 @@ ## -*- texinfo -*- ## -## @deftypefn {Function File} {@var{result} =} dtmc_check_P (@var{P}) +## @deftypefn {Function File} {[@var{result} @var{err}] =} dtmc_check_P (@var{P}) ## ## @cindex Markov chain, discrete time ## -## Returns the size (number of rows or columns) of square matrix -## @var{P}, if and only if @var{P} is a valid transition probability -## matrix. This means that (i) all elements of @var{P} must be nonnegative, -## and (ii) the sum of each row must be 1.0. +## If @var{P} is a valid transition probability matrix, return +## the size (number of rows or columns) of @var{P}. If @var{P} is not +## a transition probability matrix, set @var{result} to zero, and +## @var{err} to an appropriate error string. ## ## @end deftypefn ## Author: Moreno Marzolla <marzolla(at)cs.unibo.it> ## Web: http://www.moreno.marzolla.name/ -function result = dtmc_check_P( P ) +function [result err] = dtmc_check_P( P ) persistent epsilon = 10*eps; @@ -39,17 +39,30 @@ print_usage(); endif - issquare(P) || \ - usage( "P must be a square matrix" ); + result = 0; + + if ( !issquare(P) ) + err = "P is not a square matrix"; + return; + endif - ( all(all(P >= 0) ) && norm( sum(P,2) - 1, "inf" ) < epsilon ) || \ - error( "P is not a stochastic matrix" ); + if ( any(any(P <0)) || norm( sum(P,2) - 1, "inf" ) > epsilon ) + err = "P is not a stochastic matrix"; + return; + endif result = rows(P); + err = ""; endfunction %!test -%! fail("dtmc_check_P( [1 1 1; 1 1 1] )", "square"); -%! fail("dtmc_check_P( [1 0 0; 0 0.5 0; 0 0 0] )", "stochastic" ); +%! [r err] = dtmc_check_P( [1 1 1; 1 1 1] ); +%! assert( r, 0 ); +%! assert( index(err, "square") > 0 ); + +%!test +%! [r err] = dtmc_check_P( [1 0 0; 0 0.5 0; 0 0 0] ); +%! assert( r, 0 ); +%! assert( index(err, "stochastic") > 0 ); %!test %! P = [0 1; 1 0];
--- a/main/queueing/inst/dtmc_fpt.m Sun Mar 11 11:20:31 2012 +0000 +++ b/main/queueing/inst/dtmc_fpt.m Sun Mar 11 15:45:11 2012 +0000 @@ -54,9 +54,11 @@ ## @table @var ## ## @item M -## If this function is called with a single argument, the result +## If this function is called with a single argument, ## @code{@var{M}(i,j)} is the average number of transitions before state ## @var{j} is reached for the first time, starting from state @var{i}. +## @code{@var{M}(i,i)} is the @emph{mean recurrence time}, and +## represents the average time needed to return to state @var{i}. ## ## @item m ## If this function is called with three arguments, the result @var{m} @@ -77,13 +79,10 @@ print_usage(); endif - issquare(P) || \ - usage( "P must be a square matrix" ); + [N err] = dtmc_check_P(P); - N = rows(P); - - ( all(P >= 0 ) && norm( sum(P,2) - 1, "inf" ) < epsilon ) || \ - usage( "P is not a stochastic matrix" ); + ( N>0 ) || \ + error(err); if ( nargin == 1 ) M = zeros(N,N); @@ -98,8 +97,10 @@ endfor result = M; else - (isscalar(i) && i>=1 && j<=N) || usage("i must be an integer in the range [1,%d]", N); - (isvector(j) && all(j>=1) && all(j<=N)) || usage("j must be an integer or vector with elements in 1..%d", N); + (isscalar(i) && i>=1 && j<=N) || \ + usage("i must be an integer in the range [1,%d]", N); + (isvector(j) && all(j>=1) && all(j<=N)) || \ + usage("j must be an integer or vector with elements in [1,%d]", N); j = j(:)'; # make j a row vector b = ones(N,1); A = -P; @@ -109,6 +110,10 @@ result = res(i); endif endfunction +%!test +%! P = [1 1 1; 1 1 1]; +%! fail( "dtmc_fpt(P)" ); + %!demo %! P = [ 0.0 0.9 0.1; \ %! 0.1 0.0 0.9; \
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main/queueing/inst/dtmc_is_irreducible.m Sun Mar 11 15:45:11 2012 +0000 @@ -0,0 +1,127 @@ +## Copyright (C) 2012 Moreno Marzolla +## +## This file is part of the queueing toolbox. +## +## The queueing toolbox is free software: you can redistribute it and/or +## modify it under the terms of the GNU General Public License as +## published by the Free Software Foundation, either version 3 of the +## License, or (at your option) any later version. +## +## The queueing toolbox is distributed in the hope that it will be +## useful, but WITHOUT ANY WARRANTY; without even the implied warranty +## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +## General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with the queueing toolbox. If not, see <http://www.gnu.org/licenses/>. + +## -*- texinfo -*- +## +## @deftypefn {Function File} {[@var{r} @var{s}] =} dtmc_is_irreducible (@var{P}) +## +## @cindex Markov chain, discrete time +## @cindex Discrete time Markov chain +## +## Check if @var{P} is irreducible, and identify strongly connected +## components in the transition graph of the discrete-time Markov chain +## with transition probability matrix @var{P}. +## +## @strong{INPUTS} +## +## @table @var +## +## @item P +## @code{@var{P}(i,j)} is the transition probability from state @math{i} +## to state @math{j}. This function does not currently check whether +## @var{P} is a valid transition probability matrix. +## +## @end table +## +## @strong{OUTPUTS} +## +## @table @var +## +## @item r +## 1 if @var{P} irreducible, 0 otherwise. +## +## @item s +## @code{@var{s}(i)} is the strongly connected component that state @math{i} +## belongs to. Strongly connected components are numbered as 1, 2, +## @dots{}. If the graph is strongly connected, then there is a single +## SCC and the predicate @code{all(s == 1)} evaluates to true. +## +## @end table +## +## @end deftypefn + +## Author: Moreno Marzolla <marzolla(at)cs.unibo.it> +## Web: http://www.moreno.marzolla.name/ + +function [r s] = dtmc_is_irreducible( P ) + + persistent epsilon = 10*eps; + + if ( nargin != 1 ) + print_usage(); + endif + + # dtmc_check_P(P); + + s = __scc(P); + r = (max(s) == 1); + +endfunction +%!test +%! P = [0 1 0; 0 .5 .5; 0 1 0]; +%! [r s] = dtmc_is_irreducible(P); +%! assert( r == 0 ); +%! assert( max(s), 2 ); +%! assert( min(s), 1 ); + +%!test +%! P = [.5 .5 0; .2 .3 .5; 0 .2 .8]; +%! [r s] = dtmc_is_irreducible(P); +%! assert( r == 1 ); +%! assert( max(s), 1 ); +%! assert( min(s), 1 ); + +## FIXME: (mosty) copied from qnvisits.m; use a better algorithm for SCC +## (e.g., +## http://pmtksupport.googlecode.com/svn/trunk/gaimc1.0-graphAlgo/scomponents.m +function s = __scc(G) + assert(issquare(G)); + N = rows(G); + GF = (G>0); + GB = (G'>0); + s = zeros(N,1); + c=1; + for n=1:N + if (s(n) == 0) + fw = __dfs(GF,n); + bw = __dfs(GB,n); + r = (fw & bw); + s(r) = c++; + endif + endfor +endfunction + +## FIXME: (mosty) copied from qnvisits.m +function v = __dfs(G, s) + assert( issquare(G) ); + N = rows(G); + v = stack = zeros(1,N); ## v(i) == 1 iff node i has been visited + q = 1; # first empty slot in queue + stack(q++) = s; v(s) = 1; + while( q>1 ) + n = stack(--q); + ## explore neighbors of n: all f in G(n,:) such that v(f) == 0 + + ## The following instruction is equivalent to: + ## for f=find(G(n,:)) + ## if ( v(f) == 0 ) + for f = find ( G(n,:) & (v==0) ) + stack(q++) = f; + v(f) = 1; + endfor + endwhile +endfunction
--- a/main/queueing/inst/qnmvablo.m Sun Mar 11 11:20:31 2012 +0000 +++ b/main/queueing/inst/qnmvablo.m Sun Mar 11 15:45:11 2012 +0000 @@ -104,7 +104,11 @@ (K < sum(M)) || \ error( "The population size K=%d exceeds the total system capacity %d", K, sum(M) ); - dtmc_check_P(P); + + [na err] = dtmc_check_P(P); + ( na>0 ) || \ + error( err ); + rows(P) == N || \ error("The number of rows of P must be equal to the length of S");
--- a/main/queueing/inst/qnvisits.m Sun Mar 11 11:20:31 2012 +0000 +++ b/main/queueing/inst/qnvisits.m Sun Mar 11 15:45:11 2012 +0000 @@ -489,7 +489,8 @@ ## ## Closed network ## - ( all( all(P>=0) ) && norm( sum(P,2) - 1, "inf" ) < epsilon ) || \ + [res err] = dtmc_check_P(P); + (res>0) || \ usage( "P is not a transition probability matrix for closed networks" ); A = P-eye(N);