From: <mma...@us...> - 2012-03-11 11:20:42
|
Revision: 9813 http://octave.svn.sourceforge.net/octave/?rev=9813&view=rev Author: mmarzolla Date: 2012-03-11 11:20:31 +0000 (Sun, 11 Mar 2012) Log Message: ----------- New function dtmc_bd() added; misc fixes and improvements Modified Paths: -------------- trunk/octave-forge/main/queueing/ChangeLog trunk/octave-forge/main/queueing/DESCRIPTION trunk/octave-forge/main/queueing/Makefile trunk/octave-forge/main/queueing/NEWS trunk/octave-forge/main/queueing/doc/INSTALL trunk/octave-forge/main/queueing/doc/markovchains.txi trunk/octave-forge/main/queueing/doc/queueing.html trunk/octave-forge/main/queueing/doc/queueing.pdf trunk/octave-forge/main/queueing/doc/summary.txi trunk/octave-forge/main/queueing/inst/ctmc_bd.m trunk/octave-forge/main/queueing/inst/ctmc_exps.m trunk/octave-forge/main/queueing/inst/qnmm1k.m trunk/octave-forge/main/queueing/inst/qnmmmk.m trunk/octave-forge/main/queueing/inst/qnvisits.m Added Paths: ----------- trunk/octave-forge/main/queueing/inst/dtmc_bd.m Removed Paths: ------------- trunk/octave-forge/main/queueing/inst/ctmc_bd_solve.m Modified: trunk/octave-forge/main/queueing/ChangeLog =================================================================== --- trunk/octave-forge/main/queueing/ChangeLog 2012-03-10 20:51:31 UTC (rev 9812) +++ trunk/octave-forge/main/queueing/ChangeLog 2012-03-11 11:20:31 UTC (rev 9813) @@ -1,6 +1,6 @@ 2012-02-XX Moreno Marzolla <mar...@cs...> - * Version 1.0.X released + * 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) @@ -9,6 +9,10 @@ * Function 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 + of the birth-death process, not the steady-state solution. + * Function ctmc_bd_solve() has been removed + * New function dtmc_bd() * Miscellaneous fixes/improvements to the documentation 2012-02-04 Moreno Marzolla <mar...@cs...> Modified: trunk/octave-forge/main/queueing/DESCRIPTION =================================================================== --- trunk/octave-forge/main/queueing/DESCRIPTION 2012-03-10 20:51:31 UTC (rev 9812) +++ trunk/octave-forge/main/queueing/DESCRIPTION 2012-03-11 11:20:31 UTC (rev 9813) @@ -1,6 +1,6 @@ Name: queueing -Version: 1.0.0 -Date: 2012-02-04 +Version: 1.X.0 +Date: 2012-02-XX Author: Moreno Marzolla <mar...@cs...> Maintainer: Moreno Marzolla <mar...@cs...> Title: Queueing networks and Markov chains analysis package for GNU Octave Modified: trunk/octave-forge/main/queueing/Makefile =================================================================== --- trunk/octave-forge/main/queueing/Makefile 2012-03-10 20:51:31 UTC (rev 9812) +++ trunk/octave-forge/main/queueing/Makefile 2012-03-11 11:20:31 UTC (rev 9813) @@ -1,5 +1,5 @@ -VERSIONNUM=1.0.0 -VERSIONDATE="2012-02-04" +VERSIONNUM=1.X.0 +VERSIONDATE="2012-02-XX" PROGNAME=queueing DISTNAME=$(PROGNAME)-$(VERSIONNUM) Modified: trunk/octave-forge/main/queueing/NEWS =================================================================== --- trunk/octave-forge/main/queueing/NEWS 2012-03-10 20:51:31 UTC (rev 9812) +++ trunk/octave-forge/main/queueing/NEWS 2012-03-11 11:20:31 UTC (rev 9813) @@ -1,4 +1,4 @@ -Summary of important user-visible changes for queueing-1.0.X +Summary of important user-visible changes for queueing-1.X.0 ** Function ctmc_exps() can now compute the expected sojourn time until absorption for absorming CTMC @@ -7,6 +7,14 @@ the second argument (time). The old syntax is still supported, but may be deprecated in the future. +** Function ctmc_bd() now returns the infinitesimal generator matrix Q + of the birth-death process with given rates, not the steady-state + solution. + +** New function dtmc_bd() added + +** Function ctmc_bd_solve() has been removed + Summary of important user-visible changes for queueing-1.0.0 ------------------------------------------------------------------------------ Modified: trunk/octave-forge/main/queueing/doc/INSTALL =================================================================== --- trunk/octave-forge/main/queueing/doc/INSTALL 2012-03-10 20:51:31 UTC (rev 9812) +++ trunk/octave-forge/main/queueing/doc/INSTALL 2012-03-11 11:20:31 UTC (rev 9813) @@ -16,7 +16,7 @@ 1.1 Installation through Octave package management system ========================================================= -The most recent version of `queueing' is 1.0.0 and can be downloaded +The most recent version of `queueing' is 1.X.0 and can be downloaded from Octave-Forge `http://octave.sourceforge.net/queueing/' @@ -37,13 +37,13 @@ octave:1>pkg list queueing Package Name | Version | Installation directory --------------+---------+----------------------- - queueing *| 1.0.0 | /home/moreno/octave/queueing-1.0.0 + queueing *| 1.X.0 | /home/moreno/octave/queueing-1.X.0 Alternatively, you can first download `queueing' from Octave-Forge; then, to install the package in the system-wide location issue this command at the Octave prompt: - octave:1> pkg install _queueing-1.0.0.tar.gz_ + octave:1> pkg install _queueing-1.X.0.tar.gz_ (you may need to start Octave as root in order to allow the installation to copy the files to the target locations). After this, @@ -52,7 +52,7 @@ If you do not have root access, you can do a local install using: - octave:1> pkg install -local queueing-1.0.0.tar.gz + octave:1> pkg install -local queueing-1.X.0.tar.gz This will install `queueing' within your home directory, and the package will be available to your user only. *Note:* Octave version @@ -69,8 +69,8 @@ If you want to manually install `queueing' in a custom location, you can download the tarball and unpack it somewhere: - tar xvfz queueing-1.0.0.tar.gz - cd queueing-1.0.0/queueing/ + tar xvfz queueing-1.X.0.tar.gz + cd queueing-1.X.0/queueing/ Copy all `.m' files from the `inst/' directory to some target location. Then, start Octave with the `-p' option to add the target Modified: trunk/octave-forge/main/queueing/doc/markovchains.txi =================================================================== --- trunk/octave-forge/main/queueing/doc/markovchains.txi 2012-03-10 20:51:31 UTC (rev 9812) +++ trunk/octave-forge/main/queueing/doc/markovchains.txi 2012-03-11 11:20:31 UTC (rev 9813) @@ -66,6 +66,9 @@ @math{n}. @math{\pi_i(n)} denotes the probability that the system is in state @math{i} at step @math{n}. +@c +@subsection State occupancy probabilities + Given the transition probability matrix @math{\bf P} and the initial state occupancy probability vector @math{{\bf \pi}(0) = (\pi_1(0), \pi_2(0), @dots{}, \pi_N(0))} at step 0, the state occupancy @@ -91,6 +94,7 @@ @math{{\bf \pi}(0)}. The stationary state occupancy probability vector @math{\bf \pi} satisfies @math{{\bf \pi} = {\bf \pi} {\bf P}}. +@c @DOCSTRING(dtmc) @noindent @strong{EXAMPLE} @@ -101,6 +105,13 @@ @end group @end example +@subsection Birth-Death process + +@c +@DOCSTRING(dtmc_bd) + +@subsection First passage times + The First Passage Time @math{M_{i j}} is defined as the average number of transitions needed to visit state @math{j} for the first time, starting from state @math{i}. Matrix @math{\bf M} satisfies the @@ -123,6 +134,7 @@ @end example @end ifnottex +@c @DOCSTRING(dtmc_fpt) @c @@ -132,16 +144,16 @@ @section Continuous-Time Markov Chains @menu -* CTMC Stationary Probability:: +* State occupancy probabilities:: * Birth-Death process:: * Expected Sojourn Time:: * Time-Averaged Expected Sojourn Time:: * Expected Time to Absorption:: -* CTMC First Passage Times:: +* First Passage Times:: @end menu -@node CTMC Stationary Probability -@subsection Stationary Probability +@node State occupancy probabilities +@subsection State occupancy probabilities @DOCSTRING(ctmc) @@ -305,7 +317,7 @@ @c @c @c -@node CTMC First Passage Times +@node First Passage Times @subsection First Passage Times @DOCSTRING(ctmc_fpt) Modified: trunk/octave-forge/main/queueing/doc/queueing.html =================================================================== --- trunk/octave-forge/main/queueing/doc/queueing.html 2012-03-10 20:51:31 UTC (rev 9812) +++ trunk/octave-forge/main/queueing/doc/queueing.html 2012-03-11 11:20:31 UTC (rev 9813) @@ -55,14 +55,19 @@ <li><a name="toc_Markov-Chains" href="#Markov-Chains">4 Markov Chains</a> <ul> <li><a href="#Discrete_002dTime-Markov-Chains">4.1 Discrete-Time Markov Chains</a> +<ul> +<li><a href="#Discrete_002dTime-Markov-Chains">4.1.1 State occupancy probabilities</a> +<li><a href="#Discrete_002dTime-Markov-Chains">4.1.2 Birth-Death process</a> +<li><a href="#Discrete_002dTime-Markov-Chains">4.1.3 First passage times</a> +</li></ul> <li><a href="#Continuous_002dTime-Markov-Chains">4.2 Continuous-Time Markov Chains</a> <ul> -<li><a href="#CTMC-Stationary-Probability">4.2.1 Stationary Probability</a> +<li><a href="#State-occupancy-probabilities">4.2.1 State occupancy probabilities</a> <li><a href="#Birth_002dDeath-process">4.2.2 Birth-Death process</a> <li><a href="#Expected-Sojourn-Time">4.2.3 Expected Sojourn Time</a> <li><a href="#Time_002dAveraged-Expected-Sojourn-Time">4.2.4 Time-Averaged Expected Sojourn Time</a> <li><a href="#Expected-Time-to-Absorption">4.2.5 Expected Time to Absorption</a> -<li><a href="#CTMC-First-Passage-Times">4.2.6 First Passage Times</a> +<li><a href="#First-Passage-Times">4.2.6 First Passage Times</a> </li></ul> </li></ul> <li><a name="toc_Single-Station-Queueing-Systems" href="#Single-Station-Queueing-Systems">5 Single Station Queueing Systems</a> @@ -121,7 +126,7 @@ <h2 class="unnumbered">queueing</h2> <p>This manual documents how to install and run the Queueing Toolbox. -It corresponds to version 1.0.0 of the package. +It corresponds to version 1.X.0 of the package. <!-- --> <ul class="menu"> @@ -189,8 +194,7 @@ <li>Approximate MVA for closed, single-class networks with blocking (MVABLO algorithm by F. Akyildiz); - <li>Computation of Asymptotic Bounds, Balanced System Bounds -and Geometric Bounds; + <li>Asymptotic Bounds, Balanced System Bounds and Geometric Bounds; </ul> @@ -209,15 +213,15 @@ <li>M/H_m/1 (Hyperexponential service time distribution) </ul> - <p>Functions for Markov chain analysis are also provided (discrete and -continuous time Markov chains are supported): + <p>Functions for Markov chain analysis are also provided, for discrete-time +chains (DTMC) or continuous-time chains (CTMC): <ul> -<li>Birth-death process; -<li>Computation of transient and steady-state occupancy probabilities; -<li>Computation of mean time to absorption; -<li>Computation of time-averages sojourn time. -<li>Computation of mean passage times +<li>Birth-death process (DTMC and CTMC); +<li>Transient and steady-state occupancy probabilities (DTMC and CTMC); +<li>Mean time to absorption (CTMC); +<li>Time-averaged sojourn times (CTMC); +<li>First passage times (DTMC and CTMC). </ul> @@ -308,7 +312,7 @@ <h3 class="section">2.1 Installation through Octave package management system</h3> -<p>The most recent version of <code>queueing</code> is 1.0.0 and can +<p>The most recent version of <code>queueing</code> is 1.X.0 and can be downloaded from Octave-Forge <p><a href="http://octave.sourceforge.net/queueing/">http://octave.sourceforge.net/queueing/</a> @@ -330,13 +334,13 @@ <pre class="example"> octave:1><kbd>pkg list queueing</kbd> Package Name | Version | Installation directory --------------+---------+----------------------- - queueing *| 1.0.0 | /home/moreno/octave/queueing-1.0.0 + queueing *| 1.X.0 | /home/moreno/octave/queueing-1.X.0 </pre> <p>Alternatively, you can first download <code>queueing</code> from Octave-Forge; then, to install the package in the system-wide location issue this command at the Octave prompt: -<pre class="example"> octave:1> <kbd>pkg install </kbd><em>queueing-1.0.0.tar.gz</em> +<pre class="example"> octave:1> <kbd>pkg install </kbd><em>queueing-1.X.0.tar.gz</em> </pre> <p class="noindent">(you may need to start Octave as root in order to allow the installation to copy the files to the target locations). After this, @@ -345,7 +349,7 @@ <p>If you do not have root access, you can do a local install using: -<pre class="example"> octave:1> <kbd>pkg install -local queueing-1.0.0.tar.gz</kbd> +<pre class="example"> octave:1> <kbd>pkg install -local queueing-1.X.0.tar.gz</kbd> </pre> <p>This will install <code>queueing</code> within your home directory, and the package will be available to your user only. <strong>Note:</strong> Octave @@ -371,8 +375,8 @@ <p>If you want to manually install <code>queueing</code> in a custom location, you can download the tarball and unpack it somewhere: -<pre class="example"> <kbd>tar xvfz queueing-1.0.0.tar.gz</kbd> - <kbd>cd queueing-1.0.0/queueing/</kbd> +<pre class="example"> <kbd>tar xvfz queueing-1.X.0.tar.gz</kbd> + <kbd>cd queueing-1.X.0/queueing/</kbd> </pre> <p>Copy all <code>.m</code> files from the <samp><span class="file">inst/</span></samp> directory to some target location. Then, start Octave with the <samp><span class="option">-p</span></samp> option to add @@ -813,7 +817,9 @@ n. \pi_i(n) denotes the probability that the system is in state i at step n. - <p>Given the transition probability matrix \bf P and the initial +<h4 class="subsection">4.1.1 State occupancy probabilities</h4> + +<p>Given the transition probability matrix \bf P and the initial state occupancy probability vector \bf \pi(0) = (\pi_1(0), \pi_2(0), <small class="dots">...</small>, \pi_N(0)) at step 0, the state occupancy probability vector \bf \pi(n) at step n can be @@ -889,7 +895,40 @@ T, ss(2)*ones(size(T)), "r;Steady State;" ); xlabel("Time Step");</pre> </pre> - <p>The First Passage Time M_i j is defined as the average + <h4 class="subsection">4.1.2 Birth-Death process</h4> + +<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> +<blockquote> + <p><a name="index-Markov-chain_002c-discrete-time-8"></a><a name="index-Birth_002ddeath-process-9"></a> +Returns the N \times N transition probability matrix P +for a birth-death process with given rates. + + <p><strong>INPUTS</strong> + + <dl> +<dt><var>birth</var><dd>Vector with N-1 elements, where <var>birth</var><code>(i)</code> is the +transition probability from state i to state i+1. + + <br><dt><var>death</var><dd>Vector with N-1 elements, where <var>death</var><code>(i)</code> is the +transition probability from state i+1 to state i. + + </dl> + + <p><strong>OUTPUTS</strong> + + <dl> +<dt><var>P</var><dd>Transition probability matrix for the birth-death process. + + </dl> + + </blockquote></div> + +<h4 class="subsection">4.1.3 First passage times</h4> + +<p>The First Passage Time M_i j is defined as the average number of transitions needed to visit state j for the first time, starting from state i. Matrix \bf M satisfies the property that @@ -903,10 +942,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-7"></a></var><br> -— Function File: <var>m</var> = <b>dtmc_fpt</b> (<var>P, i, j</var>)<var><a name="index-dtmc_005ffpt-8"></a></var><br> +— 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> <blockquote> - <p><a name="index-Markov-chain_002c-discrete-time-9"></a><a name="index-First-passage-times-10"></a> + <p><a name="index-Markov-chain_002c-discrete-time-12"></a><a name="index-First-passage-times-13"></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 @@ -956,31 +995,31 @@ <h3 class="section">4.2 Continuous-Time Markov Chains</h3> <ul class="menu"> -<li><a accesskey="1" href="#CTMC-Stationary-Probability">CTMC Stationary Probability</a> +<li><a accesskey="1" href="#State-occupancy-probabilities">State occupancy probabilities</a> <li><a accesskey="2" href="#Birth_002dDeath-process">Birth-Death process</a> <li><a accesskey="3" href="#Expected-Sojourn-Time">Expected Sojourn Time</a> <li><a accesskey="4" href="#Time_002dAveraged-Expected-Sojourn-Time">Time-Averaged Expected Sojourn Time</a> <li><a accesskey="5" href="#Expected-Time-to-Absorption">Expected Time to Absorption</a> -<li><a accesskey="6" href="#CTMC-First-Passage-Times">CTMC First Passage Times</a> +<li><a accesskey="6" href="#First-Passage-Times">First Passage Times</a> </ul> <div class="node"> -<a name="CTMC-Stationary-Probability"></a> +<a name="State-occupancy-probabilities"></a> <p><hr> Next: <a rel="next" accesskey="n" href="#Birth_002dDeath-process">Birth-Death process</a>, Up: <a rel="up" accesskey="u" href="#Continuous_002dTime-Markov-Chains">Continuous-Time Markov Chains</a> </div> -<h4 class="subsection">4.2.1 Stationary Probability</h4> +<h4 class="subsection">4.2.1 State occupancy probabilities</h4> <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-11"></a></var><br> -— Function File: <var>p</var> = <b>ctmc</b> (<var>Q, t. q0</var>)<var><a name="index-ctmc-12"></a></var><br> +— 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> <blockquote> - <p><a name="index-Markov-chain_002c-continuous-time-13"></a><a name="index-Continuous-time-Markov-chain-14"></a><a name="index-Markov-chain_002c-state-occupancy-probabilities-15"></a><a name="index-Stationary-probabilities-16"></a> + <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> 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 @@ -1033,7 +1072,7 @@ <a name="Birth_002dDeath-process"></a> <p><hr> Next: <a rel="next" accesskey="n" href="#Expected-Sojourn-Time">Expected Sojourn Time</a>, -Previous: <a rel="previous" accesskey="p" href="#CTMC-Stationary-Probability">CTMC Stationary Probability</a>, +Previous: <a rel="previous" accesskey="p" href="#State-occupancy-probabilities">State occupancy probabilities</a>, Up: <a rel="up" accesskey="u" href="#Continuous_002dTime-Markov-Chains">Continuous-Time Markov Chains</a> </div> @@ -1043,11 +1082,11 @@ <p><a name="doc_002dctmc_005fbd"></a> <div class="defun"> -— Function File: <var>p</var> = <b>ctmc_bd</b> (<var>birth, death</var>)<var><a name="index-ctmc_005fbd-17"></a></var><br> +— Function File: <var>Q</var> = <b>ctmc_bd</b> (<var>birth, death</var>)<var><a name="index-ctmc_005fbd-20"></a></var><br> <blockquote> - <p><a name="index-Markov-chain_002c-continuous-time-18"></a><a name="index-Birth_002ddeath-process-19"></a> -Compute the steady-state solution of a birth-death process with state -space (1, <small class="dots">...</small>, N). + <p><a name="index-Markov-chain_002c-continuous-time-21"></a><a name="index-Birth_002ddeath-process-22"></a> +Returns the N \times N infinitesimal generator matrix Q +for a birth-death process with given rates. <p><strong>INPUTS</strong> @@ -1063,8 +1102,7 @@ <p><strong>OUTPUTS</strong> <dl> -<dt><var>p</var><dd><var>p</var><code>(i)</code> is the steady-state probability that the system is -in state i, i=1, <small class="dots">...</small>, N. +<dt><var>Q</var><dd>Infinitesimal generator matrix for the birth-death process. </dl> @@ -1100,10 +1138,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-20"></a></var><br> -— Function File: <var>L</var> = <b>ctmc_exps</b> (<var>Q, p</var>)<var><a name="index-ctmc_005fexps-21"></a></var><br> +— 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> <blockquote> - <p><a name="index-Markov-chain_002c-continuous-time-22"></a><a name="index-Expected-sojourn-time-23"></a> + <p><a name="index-Markov-chain_002c-continuous-time-25"></a><a name="index-Expected-sojourn-time-26"></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 @@ -1130,9 +1168,9 @@ <dl> <dt><var>L</var><dd>If this function is called with three arguments, <var>L</var><code>(i)</code> is -the expected time spent in state j during the interval +the expected time spent in state i during the interval [0,t]. If this function is called with two arguments -<var>L</var><code>(i)</code> is the expected time spent in state i until +<var>L</var><code>(i)</code> is either the expected time spent in state i until absorption (if i is a transient state), or zero (if <var>i</var> is an absorbing state). @@ -1183,9 +1221,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-24"></a></var><br> +— Function File: <var>M</var> = <b>ctmc_taexps</b> (<var>Q, t, p</var>)<var><a name="index-ctmc_005ftaexps-27"></a></var><br> <blockquote> - <p><a name="index-Markov-chain_002c-continuous-time-25"></a><a name="index-Time_002dalveraged-sojourn-time-26"></a> + <p><a name="index-Markov-chain_002c-continuous-time-28"></a><a name="index-Time_002dalveraged-sojourn-time-29"></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 @@ -1242,7 +1280,7 @@ <div class="node"> <a name="Expected-Time-to-Absorption"></a> <p><hr> -Next: <a rel="next" accesskey="n" href="#CTMC-First-Passage-Times">CTMC First Passage Times</a>, +Next: <a rel="next" accesskey="n" href="#First-Passage-Times">First Passage Times</a>, Previous: <a rel="previous" accesskey="p" href="#Time_002dAveraged-Expected-Sojourn-Time">Time-Averaged Expected Sojourn Time</a>, Up: <a rel="up" accesskey="u" href="#Continuous_002dTime-Markov-Chains">Continuous-Time Markov Chains</a> @@ -1268,9 +1306,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-27"></a></var><br> +— Function File: <var>t</var> = <b>ctmc_mtta</b> (<var>Q, p</var>)<var><a name="index-ctmc_005fmtta-30"></a></var><br> <blockquote> - <p><a name="index-Markov-chain_002c-continuous-time-28"></a><a name="index-Mean-time-to-absorption-29"></a> + <p><a name="index-Markov-chain_002c-continuous-time-31"></a><a name="index-Mean-time-to-absorption-32"></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 @@ -1331,9 +1369,9 @@ Performance Evaluation with Computer Science Applications</cite>, Wiley, 1998. - <p><a name="index-Bolch_002c-G_002e-30"></a><a name="index-Greiner_002c-S_002e-31"></a><a name="index-de-Meer_002c-H_002e-32"></a><a name="index-Trivedi_002c-K_002e-33"></a> + <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> <div class="node"> -<a name="CTMC-First-Passage-Times"></a> +<a name="First-Passage-Times"></a> <p><hr> Previous: <a rel="previous" accesskey="p" href="#Expected-Time-to-Absorption">Expected Time to Absorption</a>, Up: <a rel="up" accesskey="u" href="#Continuous_002dTime-Markov-Chains">Continuous-Time Markov Chains</a> @@ -1345,10 +1383,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-34"></a></var><br> -— Function File: <var>m</var> = <b>ctmc_fpt</b> (<var>Q, i, j</var>)<var><a name="index-ctmc_005ffpt-35"></a></var><br> +— 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> <blockquote> - <p><a name="index-Markov-chain_002c-continuous-time-36"></a><a name="index-First-passage-times-37"></a> + <p><a name="index-Markov-chain_002c-continuous-time-39"></a><a name="index-First-passage-times-40"></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 @@ -1454,9 +1492,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-38"></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-41"></a></var><br> <blockquote> - <p><a name="index-g_t_0040math_007bM_002fM_002f1_007d-system-39"></a> + <p><a name="index-g_t_0040math_007bM_002fM_002f1_007d-system-42"></a> Compute utilization, response time, average number of requests and throughput for a M/M/1 queue. @@ -1501,7 +1539,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-40"></a><a name="index-Greiner_002c-S_002e-41"></a><a name="index-de-Meer_002c-H_002e-42"></a><a name="index-Trivedi_002c-K_002e-43"></a> + <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> <!-- M/M/m --> <div class="node"> <a name="The-M%2fM%2fm-System"></a> @@ -1527,10 +1565,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-44"></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-45"></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-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> <blockquote> - <p><a name="index-g_t_0040math_007bM_002fM_002fm_007d-system-46"></a> + <p><a name="index-g_t_0040math_007bM_002fM_002fm_007d-system-49"></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. @@ -1582,7 +1620,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-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> + <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> <!-- M/M/inf --> <div class="node"> <a name="The-M%2fM%2finf-System"></a> @@ -1605,7 +1643,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-51"></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-54"></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 @@ -1613,7 +1651,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-52"></a> + <p><a name="index-g_t_0040math_007bM_002fM_002f_007dinf-system-55"></a> <p><strong>INPUTS</strong> @@ -1631,7 +1669,7 @@ different from the utilization, which in the case of M/M/\infty centers is always zero. - <p><a name="index-traffic-intensity-53"></a> + <p><a name="index-traffic-intensity-56"></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 @@ -1659,7 +1697,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-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> + <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> <!-- M/M/1/k --> <div class="node"> <a name="The-M%2fM%2f1%2fK-System"></a> @@ -1683,9 +1721,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-58"></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-61"></a></var><br> <blockquote> - <p><a name="index-g_t_0040math_007bM_002fM_002f1_002fK_007d-system-59"></a> + <p><a name="index-g_t_0040math_007bM_002fM_002f1_002fK_007d-system-62"></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 @@ -1752,9 +1790,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-60"></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-63"></a></var><br> <blockquote> - <p><a name="index-g_t_0040math_007bM_002fM_002fm_002fK_007d-system-61"></a> + <p><a name="index-g_t_0040math_007bM_002fM_002fm_002fK_007d-system-64"></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 @@ -1812,7 +1850,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-62"></a><a name="index-Greiner_002c-S_002e-63"></a><a name="index-de-Meer_002c-H_002e-64"></a><a name="index-Trivedi_002c-K_002e-65"></a> + <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> <!-- Approximate M/M/m --> <div class="node"> @@ -1834,9 +1872,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-66"></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-69"></a></var><br> <blockquote> - <p><a name="index-Asymmetric-_0040math_007bM_002fM_002fm_007d-system-67"></a> + <p><a name="index-Asymmetric-_0040math_007bM_002fM_002fm_007d-system-70"></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 @@ -1883,7 +1921,7 @@ and Markov Chains: Modeling and Performance Evaluation with Computer Science Applications</cite>, Wiley, 1998 - <p><a name="index-Bolch_002c-G_002e-68"></a><a name="index-Greiner_002c-S_002e-69"></a><a name="index-de-Meer_002c-H_002e-70"></a><a name="index-Trivedi_002c-K_002e-71"></a> + <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> <div class="node"> <a name="The-M%2fG%2f1-System"></a> <a name="The-M_002fG_002f1-System"></a> @@ -1899,9 +1937,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-72"></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-75"></a></var><br> <blockquote> - <p><a name="index-g_t_0040math_007bM_002fG_002f1_007d-system-73"></a> + <p><a name="index-g_t_0040math_007bM_002fG_002f1_007d-system-76"></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 @@ -1958,9 +1996,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-74"></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-77"></a></var><br> <blockquote> - <p><a name="index-g_t_0040math_007bM_002fH_005fm_002f1_007d-system-75"></a> + <p><a name="index-g_t_0040math_007bM_002fH_005fm_002f1_007d-system-78"></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: @@ -2042,7 +2080,7 @@ <li><a accesskey="6" href="#Utility-functions">Utility functions</a>: Utility functions to compute miscellaneous quantities </ul> -<p><a name="index-queueing-networks-76"></a> +<p><a name="index-queueing-networks-79"></a> <!-- INTRODUCTION --> <div class="node"> <a name="Introduction-to-QNs"></a> @@ -2303,13 +2341,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-77"></a></var><br> -— Function File: <var>Q</var> = <b>qnmknode</b> (<var>"m/m/m-fcfs", S, m</var>)<var><a name="index-qnmknode-78"></a></var><br> -— Function File: <var>Q</var> = <b>qnmknode</b> (<var>"m/m/1-lcfs-pr", S</var>)<var><a name="index-qnmknode-79"></a></var><br> -— Function File: <var>Q</var> = <b>qnmknode</b> (<var>"-/g/1-ps", S</var>)<var><a name="index-qnmknode-80"></a></var><br> -— Function File: <var>Q</var> = <b>qnmknode</b> (<var>"-/g/1-ps", S, s2</var>)<var><a name="index-qnmknode-81"></a></var><br> -— Function File: <var>Q</var> = <b>qnmknode</b> (<var>"-/g/inf", S</var>)<var><a name="index-qnmknode-82"></a></var><br> -— Function File: <var>Q</var> = <b>qnmknode</b> (<var>"-/g/inf", S, s2</var>)<var><a name="index-qnmknode-83"></a></var><br> +— 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> <blockquote> <p>Creates a node; this function can be used together with <code>qnsolve</code>. It is possible to create either single-class nodes @@ -2378,10 +2416,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-84"></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-85"></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-86"></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-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</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> <blockquote> <p>General evaluator of QN models. Networks can be open, closed or mixed; single as well as multiclass networks are supported. @@ -2559,11 +2597,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-88"></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-89"></a></var><br> -— Function File: <var>pr</var> = <b>qnjackson</b> (<var>lambda, S, P, m, k</var>)<var><a name="index-qnjackson-90"></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-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> <blockquote> - <p><a name="index-open-network_002c-single-class-91"></a><a name="index-Jackson-network-92"></a> + <p><a name="index-open-network_002c-single-class-94"></a><a name="index-Jackson-network-95"></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 @@ -2645,7 +2683,7 @@ Performance Evaluation with Computer Science Applications</cite>, Wiley, 1998, pp. 284–287. - <p><a name="index-Bolch_002c-G_002e-93"></a><a name="index-Greiner_002c-S_002e-94"></a><a name="index-de-Meer_002c-H_002e-95"></a><a name="index-Trivedi_002c-K_002e-96"></a> + <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> <h4 class="subsection">6.3.2 The Convolution Algorithm</h4> @@ -2679,10 +2717,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-97"></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-98"></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-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> <blockquote> - <p><a name="index-closed-network-99"></a><a name="index-normalization-constant-100"></a><a name="index-convolution-algorithm-101"></a> + <p><a name="index-closed-network-102"></a><a name="index-normalization-constant-103"></a><a name="index-convolution-algorithm-104"></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 @@ -2773,20 +2811,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-102"></a> + <p><a name="index-Buzen_002c-J_002e-P_002e-105"></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-103"></a><a name="index-Greiner_002c-S_002e-104"></a><a name="index-de-Meer_002c-H_002e-105"></a><a name="index-Trivedi_002c-K_002e-106"></a> + <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> <!-- 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-107"></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-110"></a></var><br> <blockquote> - <p><a name="index-closed-network-108"></a><a name="index-normalization-constant-109"></a><a name="index-convolution-algorithm-110"></a><a name="index-load_002ddependent-service-center-111"></a> + <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> This function implements the <em>convolution algorithm</em> for product-form, single-class closed queueing networks with general load-dependent service centers. @@ -2846,7 +2884,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-112"></a> + <p><a name="index-Schwetman_002c-H_002e-115"></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 @@ -2854,7 +2892,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-113"></a><a name="index-Kobayashi_002c-H_002e-114"></a> + <p><a name="index-Reiser_002c-M_002e-116"></a><a name="index-Kobayashi_002c-H_002e-117"></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, @@ -2866,7 +2904,7 @@ function f_i defined in Schwetman, <code>Some Computational Aspects of Queueing Network Models</code>. - <p><a name="index-Bolch_002c-G_002e-115"></a><a name="index-Greiner_002c-S_002e-116"></a><a name="index-de-Meer_002c-H_002e-117"></a><a name="index-Trivedi_002c-K_002e-118"></a> + <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> <h4 class="subsection">6.3.3 Open networks</h4> @@ -2874,10 +2912,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-119"></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-120"></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-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> <blockquote> - <p><a name="index-open-network_002c-single-class-121"></a><a name="index-BCMP-network-122"></a> + <p><a name="index-open-network_002c-single-class-124"></a><a name="index-BCMP-network-125"></a> Analyze open, single class BCMP queueing networks. <p>This function works for a subset of BCMP single-class open networks @@ -2970,16 +3008,16 @@ Networks and Markov Chains: Modeling and Performance Evaluation with Computer Science Applications</cite>, Wiley, 1998. - <p><a name="index-Bolch_002c-G_002e-123"></a><a name="index-Greiner_002c-S_002e-124"></a><a name="index-de-Meer_002c-H_002e-125"></a><a name="index-Trivedi_002c-K_002e-126"></a> + <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> <!-- 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-127"></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-128"></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-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> <blockquote> - <p><a name="index-open-network_002c-multiple-classes-129"></a> + <p><a name="index-open-network_002c-multiple-classes-132"></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 @@ -3044,7 +3082,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-130"></a><a name="index-Zahorjan_002c-J_002e-131"></a><a name="index-Graham_002c-G_002e-S_002e-132"></a><a name="index-Sevcik_002c-K_002e-C_002e-133"></a> + <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> <h4 class="subsection">6.3.4 Closed Networks</h4> @@ -3052,11 +3090,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-134"></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-135"></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-136"></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-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> <blockquote> - <p><a name="index-Mean-Value-Analysys-_0028MVA_0029-137"></a><a name="index-closed-network_002c-single-class-138"></a><a name="index-normalization-constant-139"></a> + <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> 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 @@ -3157,7 +3195,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-140"></a><a name="index-Lavenberg_002c-S_002e-S_002e-141"></a> + <p><a name="index-Reiser_002c-M_002e-143"></a><a name="index-Lavenberg_002c-S_002e-S_002e-144"></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)}, --> @@ -3166,15 +3204,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-142"></a><a name="index-Bolch_002c-G_002e-143"></a><a name="index-Greiner_002c-S_002e-144"></a><a name="index-de-Meer_002c-H_002e-145"></a><a name="index-Trivedi_002c-K_002e-146"></a> + <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> <!-- 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-147"></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-148"></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-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> <blockquote> - <p><a name="index-Mean-Value-Analysys-_0028MVA_0029-149"></a><a name="index-closed-network_002c-single-class-150"></a><a name="index-load_002ddependent-service-center-151"></a> + <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> 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 @@ -3232,15 +3270,15 @@ 1998, Section 8.2.4.1, “Networks with Load-Deèpendent Service: Closed Networks”. - <p><a name="index-Bolch_002c-G_002e-152"></a><a name="index-Greiner_002c-S_002e-153"></a><a name="index-de-Meer_002c-H_002e-154"></a><a name="index-Trivedi_002c-K_002e-155"></a> + <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> <!-- 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-156"></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-157"></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-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> <blockquote> - <p><a name="index-Mean-Value-Analysys-_0028MVA_0029-158"></a><a name="index-CMVA-159"></a> + <p><a name="index-Mean-Value-Analysys-_0028MVA_0029-161"></a><a name="index-CMVA-162"></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 @@ -3294,19 +3332,19 @@ closed networks</cite>. Queueing Syst. Theory Appl., 60:193–202, December 2008. - <p><a name="index-Casale_002c-G_002e-160"></a> + <p><a name="index-Casale_002c-G_002e-163"></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-161"></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-162"></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-163"></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-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, Z, tol, iter_max</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</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> <blockquote> - <p><a name="index-Mean-Value-Analysys-_0028MVA_0029_002c-approximate-166"></a><a name="index-Approximate-MVA-167"></a><a name="index-Closed-network_002c-single-class-168"></a><a name="index-Closed-network_002c-approximate-analysis-169"></a> + <p><a name="index-Mean-Value-Analysys-_0028MVA_0029_002c-approximate-169"></a><a name="index-Approximate-MVA-170"></a><a name="index-Closed-n... [truncated message content] |