|
From: <mma...@us...> - 2012-02-03 22:01:39
|
Revision: 9578
http://octave.svn.sourceforge.net/octave/?rev=9578&view=rev
Author: mmarzolla
Date: 2012-02-03 22:01:31 +0000 (Fri, 03 Feb 2012)
Log Message:
-----------
Package restructuring
Modified Paths:
--------------
trunk/octave-forge/main/queueing/doc/Makefile
Added Paths:
-----------
trunk/octave-forge/main/queueing/doc/README
Removed Paths:
-------------
trunk/octave-forge/main/queueing/README
trunk/octave-forge/main/queueing/examples/demo_1_ctmc.m
trunk/octave-forge/main/queueing/examples/demo_1_ctmc_exps.m
trunk/octave-forge/main/queueing/examples/demo_1_ctmc_fpt.m
trunk/octave-forge/main/queueing/examples/demo_1_ctmc_mtta.m
trunk/octave-forge/main/queueing/examples/demo_1_ctmc_taexps.m
trunk/octave-forge/main/queueing/examples/demo_1_dtmc.m
trunk/octave-forge/main/queueing/examples/demo_1_dtmc_fpt.m
trunk/octave-forge/main/queueing/examples/demo_1_qnclosed.m
trunk/octave-forge/main/queueing/examples/demo_1_qnclosedmultimva.m
trunk/octave-forge/main/queueing/examples/demo_1_qnclosedmultimvaapprox.m
trunk/octave-forge/main/queueing/examples/demo_1_qnclosedsinglemva.m
trunk/octave-forge/main/queueing/examples/demo_1_qnclosedsinglemvaapprox.m
trunk/octave-forge/main/queueing/examples/demo_1_qnconvolution.m
trunk/octave-forge/main/queueing/examples/demo_1_qnmmm.m
trunk/octave-forge/main/queueing/examples/demo_1_qnopensingle.m
trunk/octave-forge/main/queueing/examples/demo_1_qnsolve.m
trunk/octave-forge/main/queueing/examples/demo_1_qnvisits.m
trunk/octave-forge/main/queueing/examples/demo_2_ctmc.m
trunk/octave-forge/main/queueing/examples/demo_2_ctmc_mtta.m
trunk/octave-forge/main/queueing/examples/demo_2_ctmc_taexps.m
trunk/octave-forge/main/queueing/examples/demo_3_ctmc.m
Deleted: trunk/octave-forge/main/queueing/README
===================================================================
--- trunk/octave-forge/main/queueing/README 2012-02-03 12:07:15 UTC (rev 9577)
+++ trunk/octave-forge/main/queueing/README 2012-02-03 22:01:31 UTC (rev 9578)
@@ -1,52 +0,0 @@
-===============================================================================
- The Octave queueing toolbox
-===============================================================================
-
-Copyright (C) 2008, 2009, 2010, 2011, 2012
-Moreno Marzolla <marzolla (at) cs.unibo.it>
-
-The queueing toolbox ("queueing", in short) is a collection of GNU
-Octave scripts for numerical evaluation of queueing network
-models. Open, closed and mixed networks are supported, with single or
-multiple classes of customers. The queueing toolbox also provides
-functions for steady-state and transient analysis of Markov chains, as
-well as fo single station queueing systems.
-
-The latest version of the queueing package can be downloaded from
-
-http://www.moreno.marzolla.name/software/queueing/
-
-This package requires GNU Octave; version 3.0.0 or later should work.
-The package contains the following directories:
-
-inst/
- Contains the Octave m-scripts implementing all functions
- provided by the queueing toolbox.
-
-doc/
- Contains the user documentation, which is automatically
- generated from the texinfo strings embedded in the m-scripts.
-
-scripts/
- This directory contains some scripts used to extract
- documentation strings from the m-files. The scripts here have
- been taken almost verbatim from the GNU Octave distribution.
-
-examples/
- This directory contains demo functions which are automatically
- extracted from the scripts included in the inst/
- directory. The demo functions are put in this directory so
- that they can be easily embedded into the package documentation.
-
-test/
- This directory contains the script used to execute all
- tests embedded within functions in the inst/ directory.
-
-broken/
- This directory contains scripts which are currently known
- not to work correctly, or which are work-in-progress.
-
-This package can be distributed according to the terms of the GNU
-General Public License, version 3 or later. See the file COPYING for
-details.
-
Modified: trunk/octave-forge/main/queueing/doc/Makefile
===================================================================
--- trunk/octave-forge/main/queueing/doc/Makefile 2012-02-03 12:07:15 UTC (rev 9577)
+++ trunk/octave-forge/main/queueing/doc/Makefile 2012-02-03 22:01:31 UTC (rev 9578)
@@ -1,6 +1,6 @@
DOC=queueing
CHAPTERS=summary.texi installation.texi markovchains.texi singlestation.texi queueingnetworks.texi conf.texi ack.texi contributing.texi gpl.texi gettingstarted.texi
-DISTFILES=$(wildcard *.txi) Makefile $(DOC).pdf $(DOC).html $(DOC).texi
+DISTFILES=README $(DOC).pdf $(DOC).html $(DOC).texi
.PHONY: clean
Copied: trunk/octave-forge/main/queueing/doc/README (from rev 9577, trunk/octave-forge/main/queueing/README)
===================================================================
--- trunk/octave-forge/main/queueing/doc/README (rev 0)
+++ trunk/octave-forge/main/queueing/doc/README 2012-02-03 22:01:31 UTC (rev 9578)
@@ -0,0 +1,52 @@
+===============================================================================
+ The Octave queueing toolbox
+===============================================================================
+
+Copyright (C) 2008, 2009, 2010, 2011, 2012
+Moreno Marzolla <marzolla (at) cs.unibo.it>
+
+The queueing toolbox ("queueing", in short) is a collection of GNU
+Octave scripts for numerical evaluation of queueing network
+models. Open, closed and mixed networks are supported, with single or
+multiple classes of customers. The queueing toolbox also provides
+functions for steady-state and transient analysis of Markov chains, as
+well as fo single station queueing systems.
+
+The latest version of the queueing package can be downloaded from
+
+http://www.moreno.marzolla.name/software/queueing/
+
+This package requires GNU Octave; version 3.0.0 or later should work.
+The package contains the following directories:
+
+inst/
+ Contains the Octave m-scripts implementing all functions
+ provided by the queueing toolbox.
+
+doc/
+ Contains the user documentation, which is automatically
+ generated from the texinfo strings embedded in the m-scripts.
+
+scripts/
+ This directory contains some scripts used to extract
+ documentation strings from the m-files. The scripts here have
+ been taken almost verbatim from the GNU Octave distribution.
+
+examples/
+ This directory contains demo functions which are automatically
+ extracted from the scripts included in the inst/
+ directory. The demo functions are put in this directory so
+ that they can be easily embedded into the package documentation.
+
+test/
+ This directory contains the script used to execute all
+ tests embedded within functions in the inst/ directory.
+
+broken/
+ This directory contains scripts which are currently known
+ not to work correctly, or which are work-in-progress.
+
+This package can be distributed according to the terms of the GNU
+General Public License, version 3 or later. See the file COPYING for
+details.
+
Deleted: trunk/octave-forge/main/queueing/examples/demo_1_ctmc.m
===================================================================
--- trunk/octave-forge/main/queueing/examples/demo_1_ctmc.m 2012-02-03 12:07:15 UTC (rev 9577)
+++ trunk/octave-forge/main/queueing/examples/demo_1_ctmc.m 2012-02-03 22:01:31 UTC (rev 9578)
@@ -1,3 +0,0 @@
- Q = [ -1 1; \
- 1 -1 ];
- q = ctmc(Q)
\ No newline at end of file
Deleted: trunk/octave-forge/main/queueing/examples/demo_1_ctmc_exps.m
===================================================================
--- trunk/octave-forge/main/queueing/examples/demo_1_ctmc_exps.m 2012-02-03 12:07:15 UTC (rev 9577)
+++ trunk/octave-forge/main/queueing/examples/demo_1_ctmc_exps.m 2012-02-03 22:01:31 UTC (rev 9578)
@@ -1,16 +0,0 @@
- lambda = 0.5;
- N = 4;
- birth = lambda*linspace(1,N-1,N-1);
- death = zeros(1,N-1);
- Q = diag(birth,1)+diag(death,-1);
- Q -= diag(sum(Q,2));
- tt = linspace(0,10,100);
- p0 = zeros(1,N); p0(1)=1;
- L = ctmc_exps(Q,tt,p0);
- plot( tt, L(:,1), ";State 1;", "linewidth", 2, \
- tt, L(:,2), ";State 2;", "linewidth", 2, \
- tt, L(:,3), ";State 3;", "linewidth", 2, \
- tt, L(:,4), ";State 4 (absorbing);", "linewidth", 2);
- legend("location","northwest");
- xlabel("Time");
- ylabel("Expected sojourn time");
\ No newline at end of file
Deleted: trunk/octave-forge/main/queueing/examples/demo_1_ctmc_fpt.m
===================================================================
--- trunk/octave-forge/main/queueing/examples/demo_1_ctmc_fpt.m 2012-02-03 12:07:15 UTC (rev 9577)
+++ trunk/octave-forge/main/queueing/examples/demo_1_ctmc_fpt.m 2012-02-03 22:01:31 UTC (rev 9578)
@@ -1,5 +0,0 @@
- Q = [ -1.0 0.9 0.1; \
- 0.1 -1.0 0.9; \
- 0.9 0.1 -1.0 ];
- M = ctmc_fpt(Q)
- m = ctmc_fpt(Q,1,3)
\ No newline at end of file
Deleted: trunk/octave-forge/main/queueing/examples/demo_1_ctmc_mtta.m
===================================================================
--- trunk/octave-forge/main/queueing/examples/demo_1_ctmc_mtta.m 2012-02-03 12:07:15 UTC (rev 9577)
+++ trunk/octave-forge/main/queueing/examples/demo_1_ctmc_mtta.m 2012-02-03 22:01:31 UTC (rev 9578)
@@ -1,5 +0,0 @@
- mu = 0.01;
- death = [ 3 4 5 ] * mu;
- Q = diag(death,-1);
- Q -= diag(sum(Q,2));
- t = ctmc_mtta(Q,[0 0 0 1])
\ No newline at end of file
Deleted: trunk/octave-forge/main/queueing/examples/demo_1_ctmc_taexps.m
===================================================================
--- trunk/octave-forge/main/queueing/examples/demo_1_ctmc_taexps.m 2012-02-03 12:07:15 UTC (rev 9577)
+++ trunk/octave-forge/main/queueing/examples/demo_1_ctmc_taexps.m 2012-02-03 22:01:31 UTC (rev 9578)
@@ -1,16 +0,0 @@
- lambda = 0.5;
- N = 4;
- birth = lambda*linspace(1,N-1,N-1);
- death = zeros(1,N-1);
- Q = diag(birth,1)+diag(death,-1);
- Q -= diag(sum(Q,2));
- t = linspace(1e-3,50,500);
- p = zeros(1,N); p(1)=1;
- M = ctmc_taexps(Q,t,p);
- plot(t, M(:,1), ";State 1;", "linewidth", 2, \
- t, M(:,2), ";State 2;", "linewidth", 2, \
- t, M(:,3), ";State 3;", "linewidth", 2, \
- t, M(:,4), ";State 4 (absorbing);", "linewidth", 2 );
- legend("location","east");
- xlabel("Time");
- ylabel("Time-averaged Expected sojourn time");
\ No newline at end of file
Deleted: trunk/octave-forge/main/queueing/examples/demo_1_dtmc.m
===================================================================
--- trunk/octave-forge/main/queueing/examples/demo_1_dtmc.m 2012-02-03 12:07:15 UTC (rev 9577)
+++ trunk/octave-forge/main/queueing/examples/demo_1_dtmc.m 2012-02-03 22:01:31 UTC (rev 9578)
@@ -1,14 +0,0 @@
- a = 0.2;
- b = 0.15;
- P = [ 1-a a; b 1-b];
- T = 0:14;
- pp = zeros(2,length(T));
- for i=1:length(T)
- pp(:,i) = dtmc(P,T(i),[1 0]);
- endfor
- ss = dtmc(P); # compute steady state probabilities
- plot( T, pp(1,:), "b+;p_0(t);", "linewidth", 2, \
- T, ss(1)*ones(size(T)), "b;Steady State;", \
- T, pp(2,:), "r+;p_1(t);", "linewidth", 2, \
- T, ss(2)*ones(size(T)), "r;Steady State;" );
- xlabel("Time Step");
\ No newline at end of file
Deleted: trunk/octave-forge/main/queueing/examples/demo_1_dtmc_fpt.m
===================================================================
--- trunk/octave-forge/main/queueing/examples/demo_1_dtmc_fpt.m 2012-02-03 12:07:15 UTC (rev 9577)
+++ trunk/octave-forge/main/queueing/examples/demo_1_dtmc_fpt.m 2012-02-03 22:01:31 UTC (rev 9578)
@@ -1,4 +0,0 @@
- P = [ 0.0 0.9 0.1; \
- 0.1 0.0 0.9; \
- 0.9 0.1 0.0 ];
- M = dtmc_fpt(P);
\ No newline at end of file
Deleted: trunk/octave-forge/main/queueing/examples/demo_1_qnclosed.m
===================================================================
--- trunk/octave-forge/main/queueing/examples/demo_1_qnclosed.m 2012-02-03 12:07:15 UTC (rev 9577)
+++ trunk/octave-forge/main/queueing/examples/demo_1_qnclosed.m 2012-02-03 22:01:31 UTC (rev 9578)
@@ -1,27 +0,0 @@
- P = [0 0.3 0.7; 1 0 0; 1 0 0]; # Transition probability matrix
- S = [1 0.6 0.2]; # Average service times
- m = ones(1,3); # All centers are single-server
- Z = 2; # External delay
- N = 15; # Maximum population to consider
-
- V = qnvisits(P); # Compute number of visits from P
- D = V .* S; # Compute service demand from S and V
- X_bsb_lower = X_bsb_upper = zeros(1,N);
- X_ab_lower = X_ab_upper = zeros(1,N);
- X_mva = zeros(1,N);
- for n=1:N
- [X_bsb_lower(n) X_bsb_upper(n)] = qnclosedbsb(n, D, Z);
- [X_ab_lower(n) X_ab_upper(n)] = qnclosedab(n, D, Z);
- [U R Q X] = qnclosed( n, S, V, m, Z );
- X_mva(n) = X(1)/V(1);
- endfor
- close all;
- plot(1:N, X_ab_lower,"g;Asymptotic Bounds;", \
- 1:N, X_bsb_lower,"k;Balanced System Bounds;", \
- 1:N, X_mva,"b;MVA;", "linewidth", 2, \
- 1:N, X_bsb_upper,"k", \
- 1:N, X_ab_upper,"g" );
- axis([1,N,0,1]);
- xlabel("Number of Requests n");
- ylabel("System Throughput X(n)");
- legend("location","southeast");
\ No newline at end of file
Deleted: trunk/octave-forge/main/queueing/examples/demo_1_qnclosedmultimva.m
===================================================================
--- trunk/octave-forge/main/queueing/examples/demo_1_qnclosedmultimva.m 2012-02-03 12:07:15 UTC (rev 9577)
+++ trunk/octave-forge/main/queueing/examples/demo_1_qnclosedmultimva.m 2012-02-03 22:01:31 UTC (rev 9578)
@@ -1,31 +0,0 @@
- Ntot = 100; # total population size
- b = linspace(0.1,0.9,10); # fractions of class-1 requests
- S = [20 80 31 14 23 12; \
- 90 30 33 20 14 7];
- V = ones(size(S));
- X1 = X1 = XX = zeros(size(b));
- R1 = R2 = RR = zeros(size(b));
- for i=1:length(b)
- N = [fix(b(i)*Ntot) Ntot-fix(b(i)*Ntot)];
- # printf("[%3d %3d]\n", N(1), N(2) );
- [U R Q X] = qnclosedmultimva( N, S, V );
- X1(i) = X(1,1) / V(1,1);
- X2(i) = X(2,1) / V(2,1);
- XX(i) = X1(i) + X2(i);
- R1(i) = dot(R(1,:), V(1,:));
- R2(i) = dot(R(2,:), V(2,:));
- RR(i) = Ntot / XX(i);
- endfor
- subplot(2,1,1);
- plot(b, X1, "linewidth", 2, \
- b, X2, "linewidth", 2, \
- b, XX, "linewidth", 2 );
- legend("location","south");
- ylabel("Throughput");
- subplot(2,1,2);
- plot(b, R1, ";Class 1;", "linewidth", 2, \
- b, R2, ";Class 2;", "linewidth", 2, \
- b, RR, ";System;", "linewidth", 2 );
- legend("location","south");
- xlabel("Population mix \\beta for Class 1");
- ylabel("Resp. Time");
\ No newline at end of file
Deleted: trunk/octave-forge/main/queueing/examples/demo_1_qnclosedmultimvaapprox.m
===================================================================
--- trunk/octave-forge/main/queueing/examples/demo_1_qnclosedmultimvaapprox.m 2012-02-03 12:07:15 UTC (rev 9577)
+++ trunk/octave-forge/main/queueing/examples/demo_1_qnclosedmultimvaapprox.m 2012-02-03 22:01:31 UTC (rev 9578)
@@ -1,5 +0,0 @@
- S = [ 1, 1, 1, 1; 2, 1, 3, 1; 4, 2, 3, 3 ];
- V = ones(3,4);
- N = [10 5 1];
- m = [1 0 1 1];
- [U R Q X] = qnclosedmultimvaapprox(N,S,V,m);
\ No newline at end of file
Deleted: trunk/octave-forge/main/queueing/examples/demo_1_qnclosedsinglemva.m
===================================================================
--- trunk/octave-forge/main/queueing/examples/demo_1_qnclosedsinglemva.m 2012-02-03 12:07:15 UTC (rev 9577)
+++ trunk/octave-forge/main/queueing/examples/demo_1_qnclosedsinglemva.m 2012-02-03 22:01:31 UTC (rev 9578)
@@ -1,14 +0,0 @@
- S = [ 0.125 0.3 0.2 ];
- V = [ 16 10 5 ];
- N = 20;
- m = ones(1,3);
- Z = 4;
- [U R Q X] = qnclosedsinglemva(N,S,V,m,Z);
- X_s = X(1)/V(1); # System throughput
- R_s = dot(R,V); # System response time
- printf("\t Util Qlen RespT Tput\n");
- printf("\t-------- -------- -------- --------\n");
- for k=1:length(S)
- printf("Dev%d\t%8.4f %8.4f %8.4f %8.4f\n", k, U(k), Q(k), R(k), X(k) );
- endfor
- printf("\nSystem\t %8.4f %8.4f %8.4f\n\n", N-X_s*Z, R_s, X_s );
\ No newline at end of file
Deleted: trunk/octave-forge/main/queueing/examples/demo_1_qnclosedsinglemvaapprox.m
===================================================================
--- trunk/octave-forge/main/queueing/examples/demo_1_qnclosedsinglemvaapprox.m 2012-02-03 12:07:15 UTC (rev 9577)
+++ trunk/octave-forge/main/queueing/examples/demo_1_qnclosedsinglemvaapprox.m 2012-02-03 22:01:31 UTC (rev 9578)
@@ -1,23 +0,0 @@
- S = [ 0.125 0.3 0.2 ];
- V = [ 16 10 5 ];
- N = 30;
- m = ones(1,3);
- Z = 4;
- Xmva = Xapp = Rmva = Rapp = zeros(1,N);
- for n=1:N
- [U R Q X] = qnclosedsinglemva(n,S,V,m,Z);
- Xmva(n) = X(1)/V(1);
- Rmva(n) = dot(R,V);
- [U R Q X] = qnclosedsinglemvaapprox(n,S,V,m,Z);
- Xapp(n) = X(1)/V(1);
- Rapp(n) = dot(R,V);
- endfor
- subplot(2,1,1);
- plot(1:N, Xmva, ";Exact;", "linewidth", 2, 1:N, Xapp, "x;Approximate;", "markersize", 7);
- legend("location","southeast");
- ylabel("Throughput X(n)");
- subplot(2,1,2);
- plot(1:N, Rmva, ";Exact;", "linewidth", 2, 1:N, Rapp, "x;Approximate;", "markersize", 7);
- legend("location","southeast");
- ylabel("Response Time R(n)");
- xlabel("Number of Requests n");
\ No newline at end of file
Deleted: trunk/octave-forge/main/queueing/examples/demo_1_qnconvolution.m
===================================================================
--- trunk/octave-forge/main/queueing/examples/demo_1_qnconvolution.m 2012-02-03 12:07:15 UTC (rev 9577)
+++ trunk/octave-forge/main/queueing/examples/demo_1_qnconvolution.m 2012-02-03 22:01:31 UTC (rev 9578)
@@ -1,13 +0,0 @@
- k = [1 2 0];
- K = sum(k); # Total population size
- S = [ 1/0.8 1/0.6 1/0.4 ];
- m = [ 2 3 1 ];
- V = [ 1 .667 .2 ];
- [U R Q X G] = qnconvolution( K, S, V, m );
- p = [0 0 0]; # initialize p
- # Compute the probability to have k(i) jobs at service center i
- for i=1:3
- p(i) = (V(i)*S(i))^k(i) / G(K+1) * \
- (G(K-k(i)+1) - V(i)*S(i)*G(K-k(i)) );
- printf("k(%d)=%d prob=%f\n", i, k(i), p(i) );
- endfor
\ No newline at end of file
Deleted: trunk/octave-forge/main/queueing/examples/demo_1_qnmmm.m
===================================================================
--- trunk/octave-forge/main/queueing/examples/demo_1_qnmmm.m 2012-02-03 12:07:15 UTC (rev 9577)
+++ trunk/octave-forge/main/queueing/examples/demo_1_qnmmm.m 2012-02-03 22:01:31 UTC (rev 9578)
@@ -1,13 +0,0 @@
- disp("This is figure 6.4 on p. 220 Bolch et al.");
- rho = 0.9;
- ntics = 21;
- lambda = 0.9;
- m = linspace(1,ntics,ntics);
- mu = lambda./(rho .* m);
- [U R Q X] = qnmmm(lambda, mu, m);
- qlen = X.*(R-1./mu);
- plot(m,Q,"o",qlen,"*");
- axis([0,ntics,0,25]);
- legend("Jobs in the system","Queue Length","location","northwest");
- xlabel("Number of servers (m)");
- title("\lambda = 0.9, \mu = 0.9");
\ No newline at end of file
Deleted: trunk/octave-forge/main/queueing/examples/demo_1_qnopensingle.m
===================================================================
--- trunk/octave-forge/main/queueing/examples/demo_1_qnopensingle.m 2012-02-03 12:07:15 UTC (rev 9577)
+++ trunk/octave-forge/main/queueing/examples/demo_1_qnopensingle.m 2012-02-03 22:01:31 UTC (rev 9578)
@@ -1,6 +0,0 @@
- lambda = 3;
- V = [16 7 8];
- S = [0.01 0.02 0.03];
- [U R Q X] = qnopensingle( lambda, S, V );
- R_s = dot(R,V) # System response time
- N = sum(Q) # Average number in system
\ No newline at end of file
Deleted: trunk/octave-forge/main/queueing/examples/demo_1_qnsolve.m
===================================================================
--- trunk/octave-forge/main/queueing/examples/demo_1_qnsolve.m 2012-02-03 12:07:15 UTC (rev 9577)
+++ trunk/octave-forge/main/queueing/examples/demo_1_qnsolve.m 2012-02-03 22:01:31 UTC (rev 9578)
@@ -1,7 +0,0 @@
- QQ = { qnmknode( "m/m/m-fcfs", [0.2 0.1 0.1; 0.2 0.1 0.1] ), \
- qnmknode( "-/g/1-ps", [0.4; 0.6] ), \
- qnmknode( "-/g/inf", [1; 2] ) };
- V = [ 1 0.6 0.4; \
- 1 0.3 0.7 ];
- N = [ 2 1 ];
- [U R Q X] = qnsolve( "closed", N, QQ, V );
\ No newline at end of file
Deleted: trunk/octave-forge/main/queueing/examples/demo_1_qnvisits.m
===================================================================
--- trunk/octave-forge/main/queueing/examples/demo_1_qnvisits.m 2012-02-03 12:07:15 UTC (rev 9577)
+++ trunk/octave-forge/main/queueing/examples/demo_1_qnvisits.m 2012-02-03 22:01:31 UTC (rev 9578)
@@ -1,9 +0,0 @@
- P = [ 0 0.4 0.6 0; \
- 0.2 0 0.2 0.6; \
- 0 0 0 1; \
- 0 0 0 0 ];
- lambda = [0.1 0 0 0.3];
- V = qnvisits(P,lambda);
- S = [2 1 2 1.8];
- m = [3 1 1 2];
- [U R Q X] = qnopensingle( sum(lambda), S, V, m );
\ No newline at end of file
Deleted: trunk/octave-forge/main/queueing/examples/demo_2_ctmc.m
===================================================================
--- trunk/octave-forge/main/queueing/examples/demo_2_ctmc.m 2012-02-03 12:07:15 UTC (rev 9577)
+++ trunk/octave-forge/main/queueing/examples/demo_2_ctmc.m 2012-02-03 22:01:31 UTC (rev 9578)
@@ -1,14 +0,0 @@
- a = 0.2;
- b = 0.15;
- Q = [ -a a; b -b];
- T = linspace(0,14,50);
- pp = zeros(2,length(T));
- for i=1:length(T)
- pp(:,i) = ctmc(Q,T(i),[1 0]);
- endfor
- ss = ctmc(Q); # compute steady state probabilities
- plot( T, pp(1,:), "b;p_0(t);", "linewidth", 2, \
- T, ss(1)*ones(size(T)), "b;Steady State;", \
- T, pp(2,:), "r;p_1(t);", "linewidth", 2, \
- T, ss(2)*ones(size(T)), "r;Steady State;" );
- xlabel("Time");
\ No newline at end of file
Deleted: trunk/octave-forge/main/queueing/examples/demo_2_ctmc_mtta.m
===================================================================
--- trunk/octave-forge/main/queueing/examples/demo_2_ctmc_mtta.m 2012-02-03 12:07:15 UTC (rev 9577)
+++ trunk/octave-forge/main/queueing/examples/demo_2_ctmc_mtta.m 2012-02-03 22:01:31 UTC (rev 9578)
@@ -1,13 +0,0 @@
- N = 100;
- birth = death = ones(1,N-1); birth(1) = death(N-1) = 0;
- Q = diag(birth,1)+diag(death,-1);
- Q -= diag(sum(Q,2));
- t = zeros(1,N/2);
- initial_state = 1:(N/2);
- for i=initial_state
- p = zeros(1,N); p(i) = 1;
- t(i) = ctmc_mtta(Q,p);
- endfor
- plot(initial_state,t,"+");
- xlabel("Initial state");
- ylabel("MTTA");
\ No newline at end of file
Deleted: trunk/octave-forge/main/queueing/examples/demo_2_ctmc_taexps.m
===================================================================
--- trunk/octave-forge/main/queueing/examples/demo_2_ctmc_taexps.m 2012-02-03 12:07:15 UTC (rev 9577)
+++ trunk/octave-forge/main/queueing/examples/demo_2_ctmc_taexps.m 2012-02-03 22:01:31 UTC (rev 9578)
@@ -1,34 +0,0 @@
- sec = 1;
- min = sec*60;
- hour = 60*min;
- day = 24*hour;
-
- # state space enumeration {2, RC, RB, 1, 0}
- a = 1/(10*min); # 1/a = duration of reboot (10 min)
- b = 1/(30*sec); # 1/b = reconfiguration time (30 sec)
- g = 1/(5000*hour); # 1/g = processor MTTF (5000 hours)
- d = 1/(4*hour); # 1/d = processor MTTR (4 hours)
- c = 0.9; # coverage
- Q = [ -2*g 2*c*g 2*(1-c)*g 0 0; \
- 0 -b 0 b 0; \
- 0 0 -a a 0; \
- d 0 0 -(g+d) g; \
- 0 0 0 d -d];
- p = ctmc(Q);
- printf("System availability: %f\n",p(1)+p(4));
- TT = linspace(1e-5,1*day,101);
- PP = ctmc_taexps(Q,TT,[1 0 0 0 0]);
- A = At = Abart = zeros(size(TT));
- A(:) = p(1) + p(4); # steady-state availability
- for n=1:length(TT)
- t = TT(n);
- p = ctmc(Q,t,[1 0 0 0 0]);
- At(n) = p(1) + p(4); # instantaneous availability
- Abart(n) = PP(n,1) + PP(n,4); # interval base availability
- endfor
- semilogy(TT,A,";Steady-state;", \
- TT,At,";Instantaneous;", \
- TT,Abart,";Interval base;");
- ax = axis();
- ax(3) = 1-1e-5;
- axis(ax);
\ No newline at end of file
Deleted: trunk/octave-forge/main/queueing/examples/demo_3_ctmc.m
===================================================================
--- trunk/octave-forge/main/queueing/examples/demo_3_ctmc.m 2012-02-03 12:07:15 UTC (rev 9577)
+++ trunk/octave-forge/main/queueing/examples/demo_3_ctmc.m 2012-02-03 22:01:31 UTC (rev 9578)
@@ -1,26 +0,0 @@
- sec = 1;
- min = 60*sec;
- hour = 60*min;
- day = 24*hour;
- year = 365*day;
- # state space enumeration {2, RC, RB, 1, 0}
- a = 1/(10*min); # 1/a = duration of reboot (10 min)
- b = 1/(30*sec); # 1/b = reconfiguration time (30 sec)
- g = 1/(5000*hour); # 1/g = processor MTTF (5000 hours)
- d = 1/(4*hour); # 1/d = processor MTTR (4 hours)
- c = 0.9; # coverage
- Q = [ -2*g 2*c*g 2*(1-c)*g 0 0; \
- 0 -b 0 b 0; \
- 0 0 -a a 0; \
- d 0 0 -(g+d) g; \
- 0 0 0 d -d];
- p = ctmc(Q);
- A = p(1) + p(4);
- printf("System availability %9.2f min/year\n",A*year/min);
- printf("Mean time in RB state %9.2f min/year\n",p(3)*year/min);
- printf("Mean time in RC state %9.2f min/year\n",p(2)*year/min);
- printf("Mean time in 0 state %9.2f min/year\n",p(5)*year/min);
- Q(3,:) = Q(5,:) = 0; # make states 3 and 5 absorbing
- p0 = [1 0 0 0 0];
- MTBF = ctmc_mtta(Q, p0) / hour;
- printf("System MTBF %.2f hours\n",MTBF);
\ No newline at end of file
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <mma...@us...> - 2012-02-03 22:15:38
|
Revision: 9579
http://octave.svn.sourceforge.net/octave/?rev=9579&view=rev
Author: mmarzolla
Date: 2012-02-03 22:15:32 +0000 (Fri, 03 Feb 2012)
Log Message:
-----------
Package restructuring
Modified Paths:
--------------
trunk/octave-forge/main/queueing/Makefile
trunk/octave-forge/main/queueing/doc/queueing.pdf
trunk/octave-forge/main/queueing/examples/Makefile
Added Paths:
-----------
trunk/octave-forge/main/queueing/NEWS
trunk/octave-forge/main/queueing/devel/
Removed Paths:
-------------
trunk/octave-forge/main/queueing/broken/
Modified: trunk/octave-forge/main/queueing/Makefile
===================================================================
--- trunk/octave-forge/main/queueing/Makefile 2012-02-03 22:01:31 UTC (rev 9578)
+++ trunk/octave-forge/main/queueing/Makefile 2012-02-03 22:15:32 UTC (rev 9579)
@@ -4,7 +4,8 @@
DISTNAME=$(PROGNAME)-$(VERSIONNUM)
SUBDIRS=inst scripts examples doc test broken
-DISTFILES=COPYING README Makefile DESCRIPTION DESCRIPTION.in INSTALL
+DISTFILES=COPYING NEWS Makefile DESCRIPTION INSTALL
+DISTSUBDIRS=inst doc
.PHONY: clean check
@@ -44,7 +45,7 @@
\rm -r -f $(DISTNAME) fname
mkdir $(DISTNAME)
echo "$(DISTNAME)" > fname
- for d in $(SUBDIRS); do \
+ for d in $(DISTSUBDIRS); do \
mkdir -p $(DISTNAME)/$$d; \
$(MAKE) -C $$d dist; \
done
Added: trunk/octave-forge/main/queueing/NEWS
===================================================================
--- trunk/octave-forge/main/queueing/NEWS (rev 0)
+++ trunk/octave-forge/main/queueing/NEWS 2012-02-03 22:15:32 UTC (rev 9579)
@@ -0,0 +1,8 @@
+Summary of important user-visible changes for releases of the queueing package
+
+===============================================================================
+queueing-1.0.0 Release Date: 2012-02-03 Release Manager: Moreno Marzolla
+===============================================================================
+
+** First release of the queueing package
+
Modified: trunk/octave-forge/main/queueing/doc/queueing.pdf
===================================================================
(Binary files differ)
Modified: trunk/octave-forge/main/queueing/examples/Makefile
===================================================================
--- trunk/octave-forge/main/queueing/examples/Makefile 2012-02-03 22:01:31 UTC (rev 9578)
+++ trunk/octave-forge/main/queueing/examples/Makefile 2012-02-03 22:15:32 UTC (rev 9579)
@@ -1,4 +1,4 @@
-DISTFILES=$(wildcard *.m) Makefile
+DISTFILES=grabdemo.m Makefile
.PHONY: clean distclean check
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <mma...@us...> - 2012-02-03 22:34:27
|
Revision: 9580
http://octave.svn.sourceforge.net/octave/?rev=9580&view=rev
Author: mmarzolla
Date: 2012-02-03 22:34:20 +0000 (Fri, 03 Feb 2012)
Log Message:
-----------
Package restructuring
Modified Paths:
--------------
trunk/octave-forge/main/queueing/INSTALL
trunk/octave-forge/main/queueing/Makefile
trunk/octave-forge/main/queueing/doc/README
trunk/octave-forge/main/queueing/doc/installation.txi
trunk/octave-forge/main/queueing/doc/queueing.html
trunk/octave-forge/main/queueing/doc/queueing.pdf
trunk/octave-forge/main/queueing/inst/ctmc_fpt.m
Added Paths:
-----------
trunk/octave-forge/main/queueing/devel/README
Modified: trunk/octave-forge/main/queueing/INSTALL
===================================================================
--- trunk/octave-forge/main/queueing/INSTALL 2012-02-03 22:15:32 UTC (rev 9579)
+++ trunk/octave-forge/main/queueing/INSTALL 2012-02-03 22:34:20 UTC (rev 9580)
@@ -106,7 +106,7 @@
This directory contains examples which are automatically extracted
from the `demo' blocks of the function files.
-`broken/'
+`devel/'
This directory contains function files which are either not working
properly, or need additional testing before they can be moved to
the `inst/' directory.
Modified: trunk/octave-forge/main/queueing/Makefile
===================================================================
--- trunk/octave-forge/main/queueing/Makefile 2012-02-03 22:15:32 UTC (rev 9579)
+++ trunk/octave-forge/main/queueing/Makefile 2012-02-03 22:34:20 UTC (rev 9580)
@@ -3,7 +3,7 @@
PROGNAME=queueing
DISTNAME=$(PROGNAME)-$(VERSIONNUM)
-SUBDIRS=inst scripts examples doc test broken
+SUBDIRS=inst scripts examples doc test devel
DISTFILES=COPYING NEWS Makefile DESCRIPTION INSTALL
DISTSUBDIRS=inst doc
Added: trunk/octave-forge/main/queueing/devel/README
===================================================================
--- trunk/octave-forge/main/queueing/devel/README (rev 0)
+++ trunk/octave-forge/main/queueing/devel/README 2012-02-03 22:34:20 UTC (rev 9580)
@@ -0,0 +1,3 @@
+This directory contains scripts which are currently under development;
+therefore they may not work correctly, or could be not fully
+tested. The content of this directory is ignored by pkg install.
Modified: trunk/octave-forge/main/queueing/doc/README
===================================================================
--- trunk/octave-forge/main/queueing/doc/README 2012-02-03 22:15:32 UTC (rev 9579)
+++ trunk/octave-forge/main/queueing/doc/README 2012-02-03 22:34:20 UTC (rev 9580)
@@ -42,7 +42,7 @@
This directory contains the script used to execute all
tests embedded within functions in the inst/ directory.
-broken/
+devel/
This directory contains scripts which are currently known
not to work correctly, or which are work-in-progress.
Modified: trunk/octave-forge/main/queueing/doc/installation.txi
===================================================================
--- trunk/octave-forge/main/queueing/doc/installation.txi 2012-02-03 22:15:32 UTC (rev 9579)
+++ trunk/octave-forge/main/queueing/doc/installation.txi 2012-02-03 22:34:20 UTC (rev 9580)
@@ -168,7 +168,7 @@
This directory contains examples which are automatically extracted
from the @samp{demo} blocks of the function files.
-@item broken/
+@item devel/
This directory contains function files which are either not working
properly, or need additional testing before they can be moved to the
@file{inst/} directory.
Modified: trunk/octave-forge/main/queueing/doc/queueing.html
===================================================================
--- trunk/octave-forge/main/queueing/doc/queueing.html 2012-02-03 22:15:32 UTC (rev 9579)
+++ trunk/octave-forge/main/queueing/doc/queueing.html 2012-02-03 22:34:20 UTC (rev 9580)
@@ -416,7 +416,7 @@
<br><dt><samp><span class="file">examples/</span></samp><dd>This directory contains examples which are automatically extracted
from the ‘<samp><span class="samp">demo</span></samp>’ blocks of the function files.
- <br><dt><samp><span class="file">broken/</span></samp><dd>This directory contains function files which are either not working
+ <br><dt><samp><span class="file">devel/</span></samp><dd>This directory contains function files which are either not working
properly, or need additional testing before they can be moved to the
<samp><span class="file">inst/</span></samp> directory.
Modified: trunk/octave-forge/main/queueing/doc/queueing.pdf
===================================================================
(Binary files differ)
Modified: trunk/octave-forge/main/queueing/inst/ctmc_fpt.m
===================================================================
--- trunk/octave-forge/main/queueing/inst/ctmc_fpt.m 2012-02-03 22:15:32 UTC (rev 9579)
+++ trunk/octave-forge/main/queueing/inst/ctmc_fpt.m 2012-02-03 22:34:20 UTC (rev 9580)
@@ -112,17 +112,17 @@
%! M = ctmc_fpt(Q)
%! m = ctmc_fpt(Q,1,3)
-%!test
+%!xtest
%! Q = unifrnd(0.1,0.9,10,10);
%! Q -= diag(sum(Q,2));
%! M = ctmc_fpt(Q);
-%!test
+%!xtest
%! Q = unifrnd(0.1,0.9,10,10);
%! Q -= diag(sum(Q,2));
%! m = ctmc_fpt(Q,1,3);
-%!test
+%!xtest
%! Q = unifrnd(0.1,0.9,10,10);
%! Q -= diag(sum(Q,2));
%! m = ctmc_fpt(Q,1,[3 5 6]);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <mma...@us...> - 2012-02-04 11:10:42
|
Revision: 9581
http://octave.svn.sourceforge.net/octave/?rev=9581&view=rev
Author: mmarzolla
Date: 2012-02-04 11:10:35 +0000 (Sat, 04 Feb 2012)
Log Message:
-----------
Package restructuring
Modified Paths:
--------------
trunk/octave-forge/main/queueing/DESCRIPTION
trunk/octave-forge/main/queueing/DESCRIPTION.in
trunk/octave-forge/main/queueing/Makefile
trunk/octave-forge/main/queueing/NEWS
trunk/octave-forge/main/queueing/doc/Makefile
trunk/octave-forge/main/queueing/doc/README
trunk/octave-forge/main/queueing/doc/installation.txi
trunk/octave-forge/main/queueing/doc/queueing.html
trunk/octave-forge/main/queueing/doc/queueing.pdf
Added Paths:
-----------
trunk/octave-forge/main/queueing/doc/INSTALL
Removed Paths:
-------------
trunk/octave-forge/main/queueing/INSTALL
Modified: trunk/octave-forge/main/queueing/DESCRIPTION
===================================================================
--- trunk/octave-forge/main/queueing/DESCRIPTION 2012-02-03 22:34:20 UTC (rev 9580)
+++ trunk/octave-forge/main/queueing/DESCRIPTION 2012-02-04 11:10:35 UTC (rev 9581)
@@ -3,12 +3,16 @@
Date: 2012-02-03
Author: Moreno Marzolla <mar...@cs...>
Maintainer: Moreno Marzolla <mar...@cs...>
-Title: Queueing Networks and Markov chains analysis package for GNU Octave
-Description: This package provides functions
- for analyzing single station queueing systems,
- Queueing Network and Markov chains. Open, closed and mixed
- networks with single or multiple job classes are supported;
- exact and approximate solution techniques are available.
+Title: Queueing networks and Markov chains analysis package for GNU Octave
+Description: The queueing toolbox provides functions for queueing
+ networks and Markov chains analysis. This package can be used
+ to compute steady-state performance measures for open, closed and mixed
+ networks with single or multiple job classes. Mean Valud Analysis (MVA),
+ convolution and various bounding techniques are implemented. Various
+ transient and steady-state performance measures for Markov chains can als
+ be computed (including state occupancy probabilities, mean time to absorption,
+ time-averaged sojourn times), both for continuous-time and discrete-time
+ chains.
Categories: Misc
Depends: octave (>= 3.0.0)
Autoload: yes
Modified: trunk/octave-forge/main/queueing/DESCRIPTION.in
===================================================================
--- trunk/octave-forge/main/queueing/DESCRIPTION.in 2012-02-03 22:34:20 UTC (rev 9580)
+++ trunk/octave-forge/main/queueing/DESCRIPTION.in 2012-02-04 11:10:35 UTC (rev 9581)
@@ -3,12 +3,16 @@
Date: VERSIONDATE
Author: Moreno Marzolla <mar...@cs...>
Maintainer: Moreno Marzolla <mar...@cs...>
-Title: Queueing Networks and Markov chains analysis package for GNU Octave
-Description: This package provides functions
- for analyzing single station queueing systems,
- Queueing Network and Markov chains. Open, closed and mixed
- networks with single or multiple job classes are supported;
- exact and approximate solution techniques are available.
+Title: Queueing networks and Markov chains analysis package for GNU Octave
+Description: The queueing toolbox provides functions for queueing
+ networks and Markov chains analysis. This package can be used
+ to compute steady-state performance measures for open, closed and mixed
+ networks with single or multiple job classes. Mean Valud Analysis (MVA),
+ convolution and various bounding techniques are implemented. Various
+ transient and steady-state performance measures for Markov chains can als
+ be computed (including state occupancy probabilities, mean time to absorption,
+ time-averaged sojourn times), both for continuous-time and discrete-time
+ chains.
Categories: Misc
Depends: octave (>= 3.0.0)
Autoload: yes
Deleted: trunk/octave-forge/main/queueing/INSTALL
===================================================================
--- trunk/octave-forge/main/queueing/INSTALL 2012-02-03 22:34:20 UTC (rev 9580)
+++ trunk/octave-forge/main/queueing/INSTALL 2012-02-04 11:10:35 UTC (rev 9581)
@@ -1,167 +0,0 @@
-This file documents the installation procedure of the `queueing'
-toolbox.
-
- `queueing' is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License, version 3 or
-later, as published by the Free Software Foundation.
-
- Note: This file (`INSTALL') is automatically generated from
- `doc/installation.txi' in the `queueing' sources. Do not modify
- this document directly, as changes will be lost. Modify the source
- `doc/installation.txi' instead.
-
-1 Installing the queueing toolbox
-*********************************
-
-1.1 Installation through Octave package management system
-=========================================================
-
-The most recent version of `queueing' is 1.0.0 and can be downloaded
-from
-
-`http://www.moreno.marzolla.name/software/queueing/queueing-1.0.0.tar.gz'
-
- To install `queueing' in the system-wide location, such that all
-functions are automatically available when Octave starts, you can use
-`pkg install' command. At the Octave prompt, type the following:
-
- octave:1> pkg install queueing-1.0.0.tar.gz
-
- (Note: you may need to start Octave as root in order to allow the
-installation to copy the files to the target locations). After this,
-all functions will be readily available each time Octave starts,
-without the need to tweak the search path. To uninstall `queueing', use
-the `pkg uninstall queueing' command.
-
- If you do not have root access, you can do a local installation by
-issuing the following command at the Octave prompt:
-
- octave:1> pkg install -local queueing-1.0.0.tar.gz
-
- This will install `queueing' within the user's home directory, and
-the package will be available to that user only. *Note:* Octave version
-3.2.3 as shipped with Ubuntu 10.04 seems to ignore `-local' and always
-tries to install the package on the system directory.
-
-1.2 Manual installation
-=======================
-
-If you want to install `queueing' in a custom location, you can
-download the source tarball from the URL above, and unpack it somewhere:
-
- tar xfz queueing-1.0.0.tar.gz
- cd queueing-1.0.0/
-
- Copy all `.m' files from the `inst/' directory to some target
-location. Then, you can start Octave with the `-p' option to add the
-target location to the search path, so that Octave will find all
-`queueing' functions automatically:
-
- octave -p _/path/to/queueing_
-
- For example, if all `queueing' m-files are in `/usr/local/queueing',
-you can start Octave as follows:
-
- octave -p `/usr/local/queueing'
-
- If you want, you can add the following line to `~/.octaverc':
-
- addpath("_/path/to/queueing_");
-
-so that the path `/usr/local/queueing' is automatically added to the
-search path each time Octave is started, and you no longer need to
-specify the `-p' option on the command line.
-
-1.3 Content of the source distribution
-======================================
-
-The `queueing' source distribution contains the following
-subdirectories:
-
-`doc/'
- Documentation source. Most of the documentation is extracted from
- the comment blocks of individual function files from the `inst/'
- directory.
-
-`inst/'
- This directory contains the m-files which implement the various
- Queueing Network algorithms provided by `queueing'. As a
- notational convention, the names of source files containing
- functions for Queueing Networks start with the `qn' prefix; the
- name of source files containing functions for Continuous-Time
- Markov Chains (CTMSs) start with the `ctmc' prefix, and the names
- of files containing functions for Discrete-Time Markov Chains
- (DTMCs) start with the `dtmc' prefix.
-
-`test/'
- This directory contains the test functions used to invoke all
- tests on all function files.
-
-`scripts/'
- This directory contains some utility scripts mostly from GNU
- Octave, which extract the documentation from the
- specially-formatted comments in the m-files.
-
-`examples/'
- This directory contains examples which are automatically extracted
- from the `demo' blocks of the function files.
-
-`devel/'
- This directory contains function files which are either not working
- properly, or need additional testing before they can be moved to
- the `inst/' directory.
-
-
- The `queueing' package ships with a Makefile which can be used to
-produce the documentation (in PDF and HTML format), and automatically
-execute all function tests. Specifically, the following targets are
-defined:
-
-`all'
- Running `make' (or `make all') on the top-level directory builds
- the programs used to extract the documentation from the comments
- embedded in the m-files, and then produce the documentation in PDF
- and HTML format (`doc/queueing.pdf' and `doc/queueing.html',
- respectively).
-
-`check'
- Running `make check' will execute all tests contained in the
- m-files. If you modify the code of any function in the `inst/'
- directory, you should run the tests to ensure that no errors have
- been introduced. You are also encouraged to contribute new tests,
- especially for functions which are not adequately validated.
-
-`clean'
-`distclean'
-`dist'
- The `make clean', `make distclean' and `make dist' commands are
- used to clean up the source directory and prepare the distribution
- archive in compressed tar format.
-
-
-1.4 Using the queueing toolbox
-==============================
-
-You can use all functions by simply invoking their name with the
-appropriate parameters; the `queueing' package should display an error
-message in case of missing/wrong parameters. You can display the help
-text for any function using the `help' command. For example:
-
- octave:2> help qnmvablo
-
- prints the documentation for the `qnmvablo' function. Additional
-information can be found in the `queueing' manual, which is available
-in PDF format in `doc/queueing.pdf' and in HTML format in
-`doc/queueing.html'.
-
- Within GNU Octave, you can also run the test and demo blocks
-associated to the functions, using the `test' and `demo' commands
-respectively. To run all the tests of, say, the `qnmvablo' function:
-
- octave:3> test qnmvablo
- -| PASSES 4 out of 4 tests
-
- To execute the demos of the `qnclosed' function, use the following:
-
- octave:4> demo qnclosed
-
Modified: trunk/octave-forge/main/queueing/Makefile
===================================================================
--- trunk/octave-forge/main/queueing/Makefile 2012-02-03 22:34:20 UTC (rev 9580)
+++ trunk/octave-forge/main/queueing/Makefile 2012-02-04 11:10:35 UTC (rev 9581)
@@ -4,7 +4,7 @@
DISTNAME=$(PROGNAME)-$(VERSIONNUM)
SUBDIRS=inst scripts examples doc test devel
-DISTFILES=COPYING NEWS Makefile DESCRIPTION INSTALL
+DISTFILES=COPYING NEWS DESCRIPTION
DISTSUBDIRS=inst doc
.PHONY: clean check
Modified: trunk/octave-forge/main/queueing/NEWS
===================================================================
--- trunk/octave-forge/main/queueing/NEWS 2012-02-03 22:34:20 UTC (rev 9580)
+++ trunk/octave-forge/main/queueing/NEWS 2012-02-04 11:10:35 UTC (rev 9581)
@@ -1,8 +1,5 @@
-Summary of important user-visible changes for releases of the queueing package
+Summary of important user-visible changes for queueing-1.0.0
+------------------------------------------------------------------------------
-===============================================================================
-queueing-1.0.0 Release Date: 2012-02-03 Release Manager: Moreno Marzolla
-===============================================================================
-
** First release of the queueing package
Copied: trunk/octave-forge/main/queueing/doc/INSTALL (from rev 9580, trunk/octave-forge/main/queueing/INSTALL)
===================================================================
--- trunk/octave-forge/main/queueing/doc/INSTALL (rev 0)
+++ trunk/octave-forge/main/queueing/doc/INSTALL 2012-02-04 11:10:35 UTC (rev 9581)
@@ -0,0 +1,172 @@
+This file documents the installation procedure of the `queueing'
+toolbox.
+
+ `queueing' is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License, version 3 or
+later, as published by the Free Software Foundation.
+
+ Note: This file (`INSTALL') is automatically generated from
+ `doc/installation.txi' in the `queueing' sources. Do not modify
+ this document directly, as changes will be lost. Modify the source
+ `doc/installation.txi' instead.
+
+1 Installing the queueing toolbox
+*********************************
+
+1.1 Installation through Octave package management system
+=========================================================
+
+The most recent version of `queueing' is 1.0.0 and can be downloaded
+from Octave-forge
+
+ `http://octave.sourceforge.net/'
+
+ The package Web page is
+
+ `http://www.moreno.marzolla.name/software/queueing/'
+
+ To install `queueing' in the system-wide location, such that all
+functions are automatically available when Octave starts, you can use
+`pkg install' command. At the Octave prompt, type the following:
+
+ octave:1> pkg install queueing-1.0.0.tar.gz
+
+ (Note: you may need to start Octave as root in order to allow the
+installation to copy the files to the target locations). After this,
+all functions will be readily available each time Octave starts,
+without the need to tweak the search path. To uninstall `queueing', use
+the `pkg uninstall queueing' command.
+
+ If you do not have root access, you can do a local installation by
+issuing the following command at the Octave prompt:
+
+ octave:1> pkg install -local queueing-1.0.0.tar.gz
+
+ This will install `queueing' within the user's home directory, and
+the package will be available to that user only. *Note:* Octave version
+3.2.3 as shipped with Ubuntu 10.04 seems to ignore `-local' and always
+tries to install the package on the system directory.
+
+1.2 Manual installation
+=======================
+
+If you want to install `queueing' in a custom location, you can
+download the source tarball from the URL above, and unpack it somewhere:
+
+ tar xfz queueing-1.0.0.tar.gz
+ cd queueing-1.0.0/
+
+ Copy all `.m' files from the `inst/' directory to some target
+location. Then, you can start Octave with the `-p' option to add the
+target location to the search path, so that Octave will find all
+`queueing' functions automatically:
+
+ octave -p _/path/to/queueing_
+
+ For example, if all `queueing' m-files are in `/usr/local/queueing',
+you can start Octave as follows:
+
+ octave -p `/usr/local/queueing'
+
+ If you want, you can add the following line to `~/.octaverc':
+
+ addpath("_/path/to/queueing_");
+
+so that the path `/usr/local/queueing' is automatically added to the
+search path each time Octave is started, and you no longer need to
+specify the `-p' option on the command line.
+
+1.3 Content of the source distribution
+======================================
+
+The `queueing' package source code in the Subversion repository
+contains the following subdirectories (some of which are not included
+in the installation archive):
+
+`doc/'
+ Documentation source. Most of the documentation is extracted from
+ the comment blocks of individual function files from the `inst/'
+ directory.
+
+`inst/'
+ This directory contains the m-files which implement the various
+ Queueing Network algorithms provided by `queueing'. As a
+ notational convention, the names of source files containing
+ functions for Queueing Networks start with the `qn' prefix; the
+ name of source files containing functions for Continuous-Time
+ Markov Chains (CTMSs) start with the `ctmc' prefix, and the names
+ of files containing functions for Discrete-Time Markov Chains
+ (DTMCs) start with the `dtmc' prefix.
+
+`test/'
+ This directory contains the test functions used to invoke all
+ tests on all function files.
+
+`scripts/'
+ This directory contains some utility scripts mostly from GNU
+ Octave, which extract the documentation from the
+ specially-formatted comments in the m-files.
+
+`examples/'
+ This directory contains examples which are automatically extracted
+ from the `demo' blocks of the function files.
+
+`devel/'
+ This directory contains function files which are either not working
+ properly, or need additional testing before they are moved to the
+ `inst/' directory.
+
+
+ The `queueing' package ships with a Makefile which can be used to
+produce the documentation (in PDF and HTML format), and automatically
+execute all function tests. Specifically, the following targets are
+defined:
+
+`all'
+ Running `make' (or `make all') on the top-level directory builds
+ the programs used to extract the documentation from the comments
+ embedded in the m-files, and then produce the documentation in PDF
+ and HTML format (`doc/queueing.pdf' and `doc/queueing.html',
+ respectively).
+
+`check'
+ Running `make check' will execute all tests contained in the
+ m-files. If you modify the code of any function in the `inst/'
+ directory, you should run the tests to ensure that no errors have
+ been introduced. You are also encouraged to contribute new tests,
+ especially for functions which are not adequately validated.
+
+`clean'
+`distclean'
+`dist'
+ The `make clean', `make distclean' and `make dist' commands are
+ used to clean up the source directory and prepare the distribution
+ archive in compressed tar format.
+
+
+1.4 Using the queueing toolbox
+==============================
+
+You can use all functions by simply invoking their name with the
+appropriate parameters; the `queueing' package should display an error
+message in case of missing/wrong parameters. You can display the help
+text for any function using the `help' command. For example:
+
+ octave:2> help qnmvablo
+
+ prints the documentation for the `qnmvablo' function. Additional
+information can be found in the `queueing' manual, which is available
+in PDF format in `doc/queueing.pdf' and in HTML format in
+`doc/queueing.html'.
+
+ Within GNU Octave, you can also run the test and demo blocks
+associated to the functions, using the `test' and `demo' commands
+respectively. To run all the tests of, say, the `qnmvablo' function:
+
+ octave:3> test qnmvablo
+ -| PASSES 4 out of 4 tests
+
+ To execute the demos of the `qnclosed' function, use the following:
+
+ octave:4> demo qnclosed
+
Modified: trunk/octave-forge/main/queueing/doc/Makefile
===================================================================
--- trunk/octave-forge/main/queueing/doc/Makefile 2012-02-03 22:34:20 UTC (rev 9580)
+++ trunk/octave-forge/main/queueing/doc/Makefile 2012-02-04 11:10:35 UTC (rev 9581)
@@ -1,10 +1,10 @@
DOC=queueing
CHAPTERS=summary.texi installation.texi markovchains.texi singlestation.texi queueingnetworks.texi conf.texi ack.texi contributing.texi gpl.texi gettingstarted.texi
-DISTFILES=README $(DOC).pdf $(DOC).html $(DOC).texi
+DISTFILES=README INSTALL $(DOC).pdf $(DOC).html $(DOC).texi
.PHONY: clean
-ALL: pdf html ../INSTALL
+ALL: pdf html INSTALL
html: $(DOC).html
@@ -12,10 +12,10 @@
info: $(DOC).info
-../INSTALL: installation.texi
+INSTALL: installation.texi
rm -f ../INSTALL
-$(MAKEINFO) -D INSTALLONLY \
- --no-validate --no-headers --no-split --output ../INSTALL $<
+ --no-validate --no-headers --no-split --output INSTALL $<
$(DOC).html: $(DOC).texi $(CHAPTERS)
-$(MAKEINFO) --html --no-split $(DOC).texi
Modified: trunk/octave-forge/main/queueing/doc/README
===================================================================
--- trunk/octave-forge/main/queueing/doc/README 2012-02-03 22:34:20 UTC (rev 9580)
+++ trunk/octave-forge/main/queueing/doc/README 2012-02-04 11:10:35 UTC (rev 9581)
@@ -12,41 +12,47 @@
functions for steady-state and transient analysis of Markov chains, as
well as fo single station queueing systems.
-The latest version of the queueing package can be downloaded from
+The Web page of the queueing toolbox is
http://www.moreno.marzolla.name/software/queueing/
+The latest version can be downloaded from Octave-forge
+
+http://octave.sourceforge.net/
+
This package requires GNU Octave; version 3.0.0 or later should work.
-The package contains the following directories:
+The package contains the following directories (note that some of
+these are only available in the SVN repository, and are not included
+in the tarball published on Octave-forge):
inst/
- Contains the Octave m-scripts implementing all functions
- provided by the queueing toolbox.
+ Contains the Octave m-scripts implementing all functions
+ provided by the queueing toolbox.
doc/
Contains the user documentation, which is automatically
generated from the texinfo strings embedded in the m-scripts.
scripts/
- This directory contains some scripts used to extract
- documentation strings from the m-files. The scripts here have
- been taken almost verbatim from the GNU Octave distribution.
+ Contains some scripts used to extract documentation strings
+ from the m-files. The scripts here have been taken almost
+ verbatim from the GNU Octave distribution.
examples/
- This directory contains demo functions which are automatically
- extracted from the scripts included in the inst/
- directory. The demo functions are put in this directory so
- that they can be easily embedded into the package documentation.
+ Contains demo functions which are automatically extracted from
+ the scripts included in the inst/ directory. The demo
+ functions are put in this directory so that they can be
+ embedded into the package documentation.
test/
- This directory contains the script used to execute all
- tests embedded within functions in the inst/ directory.
+ Contains the script used to execute all tests embedded within
+ functions in the inst/ directory.
devel/
- This directory contains scripts which are currently known
- not to work correctly, or which are work-in-progress.
+ Contains scripts which are currently under development, and
+ therefore should not be used.
-This package can be distributed according to the terms of the GNU
+The Octave queueing toolbox is distributed under the terms of the GNU
General Public License, version 3 or later. See the file COPYING for
details.
Modified: trunk/octave-forge/main/queueing/doc/installation.txi
===================================================================
--- trunk/octave-forge/main/queueing/doc/installation.txi 2012-02-03 22:34:20 UTC (rev 9580)
+++ trunk/octave-forge/main/queueing/doc/installation.txi 2012-02-04 11:10:35 UTC (rev 9581)
@@ -56,10 +56,14 @@
@section Installation through Octave package management system
The most recent version of @code{queueing} is @value{VERSION} and can
-be downloaded from
+be downloaded from Octave-forge
-@url{http://www.moreno.marzolla.name/software/queueing/queueing-@value{VERSION}.tar.gz}
+@url{http://octave.sourceforge.net/}
+The package Web page is
+
+@url{http://www.moreno.marzolla.name/software/queueing/}
+
To install @code{queueing} in the system-wide location, such that all
functions are automatically available when Octave starts, you can use
@samp{pkg install} command. At the Octave prompt, type the following:
@@ -136,8 +140,9 @@
@node Content of the source distribution
@section Content of the source distribution
-The @code{queueing} source distribution contains the following
-subdirectories:
+The @code{queueing} package source code in the Subversion repository
+contains the following subdirectories (some of which are not included
+in the installation archive):
@table @file
@item doc/
@@ -170,7 +175,7 @@
@item devel/
This directory contains function files which are either not working
-properly, or need additional testing before they can be moved to the
+properly, or need additional testing before they are moved to the
@file{inst/} directory.
@end table
Modified: trunk/octave-forge/main/queueing/doc/queueing.html
===================================================================
--- trunk/octave-forge/main/queueing/doc/queueing.html 2012-02-03 22:34:20 UTC (rev 9580)
+++ trunk/octave-forge/main/queueing/doc/queueing.html 2012-02-04 11:10:35 UTC (rev 9581)
@@ -313,10 +313,14 @@
<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
-be downloaded from
+be downloaded from Octave-forge
- <p><a href="http://www.moreno.marzolla.name/software/queueing/queueing-1.0.0.tar.gz">http://www.moreno.marzolla.name/software/queueing/queueing-1.0.0.tar.gz</a>
+ <p><a href="http://octave.sourceforge.net/">http://octave.sourceforge.net/</a>
+ <p>The package Web page is
+
+ <p><a href="http://www.moreno.marzolla.name/software/queueing/">http://www.moreno.marzolla.name/software/queueing/</a>
+
<p>To install <code>queueing</code> in the system-wide location, such that all
functions are automatically available when Octave starts, you can use
‘<samp><span class="samp">pkg install</span></samp>’ command. At the Octave prompt, type the following:
@@ -389,8 +393,9 @@
<h3 class="section">2.3 Content of the source distribution</h3>
-<p>The <code>queueing</code> source distribution contains the following
-subdirectories:
+<p>The <code>queueing</code> package source code in the Subversion repository
+contains the following subdirectories (some of which are not included
+in the installation archive):
<dl>
<dt><samp><span class="file">doc/</span></samp><dd>Documentation source. Most of the documentation is extracted from the
@@ -417,7 +422,7 @@
from the ‘<samp><span class="samp">demo</span></samp>’ blocks of the function files.
<br><dt><samp><span class="file">devel/</span></samp><dd>This directory contains function files which are either not working
-properly, or need additional testing before they can be moved to the
+properly, or need additional testing before they are moved to the
<samp><span class="file">inst/</span></samp> directory.
</dl>
Modified: trunk/octave-forge/main/queueing/doc/queueing.pdf
===================================================================
(Binary files differ)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <mma...@us...> - 2012-02-04 15:05:34
|
Revision: 9582
http://octave.svn.sourceforge.net/octave/?rev=9582&view=rev
Author: mmarzolla
Date: 2012-02-04 15:05:28 +0000 (Sat, 04 Feb 2012)
Log Message:
-----------
Package cleanup, ready for first release
Modified Paths:
--------------
trunk/octave-forge/main/queueing/DESCRIPTION
trunk/octave-forge/main/queueing/Makefile
trunk/octave-forge/main/queueing/doc/queueing.pdf
Modified: trunk/octave-forge/main/queueing/DESCRIPTION
===================================================================
--- trunk/octave-forge/main/queueing/DESCRIPTION 2012-02-04 11:10:35 UTC (rev 9581)
+++ trunk/octave-forge/main/queueing/DESCRIPTION 2012-02-04 15:05:28 UTC (rev 9582)
@@ -1,6 +1,6 @@
Name: queueing
Version: 1.0.0
-Date: 2012-02-03
+Date: 2012-02-04
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-02-04 11:10:35 UTC (rev 9581)
+++ trunk/octave-forge/main/queueing/Makefile 2012-02-04 15:05:28 UTC (rev 9582)
@@ -1,5 +1,5 @@
VERSIONNUM=1.0.0
-VERSIONDATE="2012-02-03"
+VERSIONDATE="2012-02-04"
PROGNAME=queueing
DISTNAME=$(PROGNAME)-$(VERSIONNUM)
@@ -31,23 +31,25 @@
clean:
for d in $(SUBDIRS); do \
- $(MAKE) -C $$d clean; \
+ $(MAKE) -C $$d $(MAKECMDGOALS); \
done
- \rm -r -f *~ *.tar.gz $(DISTNAME)
+ \rm -r -f *~ $(DISTNAME).tar.gz $(DISTNAME).tar.gz.uue $(PROGNAME)
distclean: clean
for d in $(SUBDIRS); do \
- $(MAKE) -C $$d distclean; \
+ $(MAKE) -C $$d $(MAKECMDGOALS); \
done
- \rm -r -f doc/conf.texi fname DESCRIPTION $(DISTNAME) $(DISTNAME).tar.gz
+ \rm -r -f doc/conf.texi fname DESCRIPTION
dist: ALL
- \rm -r -f $(DISTNAME) fname
- mkdir $(DISTNAME)
- echo "$(DISTNAME)" > fname
+ \rm -r -f $(PROGNAME) fname
+ echo "$(PROGNAME)" > fname
+ mkdir $(PROGNAME)
for d in $(DISTSUBDIRS); do \
- mkdir -p $(DISTNAME)/$$d; \
- $(MAKE) -C $$d dist; \
+ mkdir -p $(PROGNAME)/$$d; \
+ $(MAKE) -C $$d $(MAKECMDGOALS); \
done
- ln $(DISTFILES) $(DISTNAME)/
- tar cfz $(DISTNAME).tar.gz $(DISTNAME)/
+ ln $(DISTFILES) $(PROGNAME)/
+ tar cfz $(DISTNAME).tar.gz $(PROGNAME)/
+ uuencode $(DISTNAME).tar.gz < $(DISTNAME).tar.gz > $(DISTNAME).tar.gz.uue
+
Modified: trunk/octave-forge/main/queueing/doc/queueing.pdf
===================================================================
(Binary files differ)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <mma...@us...> - 2012-02-08 21:46:49
|
Revision: 9598
http://octave.svn.sourceforge.net/octave/?rev=9598&view=rev
Author: mmarzolla
Date: 2012-02-08 21:46:43 +0000 (Wed, 08 Feb 2012)
Log Message:
-----------
Documentation update
Modified Paths:
--------------
trunk/octave-forge/main/queueing/DESCRIPTION
trunk/octave-forge/main/queueing/DESCRIPTION.in
trunk/octave-forge/main/queueing/doc/markovchains.txi
trunk/octave-forge/main/queueing/doc/queueing.html
trunk/octave-forge/main/queueing/doc/queueing.pdf
Modified: trunk/octave-forge/main/queueing/DESCRIPTION
===================================================================
--- trunk/octave-forge/main/queueing/DESCRIPTION 2012-02-08 21:02:51 UTC (rev 9597)
+++ trunk/octave-forge/main/queueing/DESCRIPTION 2012-02-08 21:46:43 UTC (rev 9598)
@@ -8,11 +8,10 @@
networks and Markov chains analysis. This package can be used
to compute steady-state performance measures for open, closed and mixed
networks with single or multiple job classes. Mean Valud Analysis (MVA),
- convolution and various bounding techniques are implemented. Various
- transient and steady-state performance measures for Markov chains can als
- be computed (including state occupancy probabilities, mean time to absorption,
- time-averaged sojourn times), both for continuous-time and discrete-time
- chains.
+ convolution, and various bounding techniques are implemented. Several
+ transient and steady-state performance measures for discrete-
+ and continuous-time Markov chains can be computed (state occupancy
+ probabilities, mean time to absorption, time-averaged sojourn times).
Categories: Misc
Depends: octave (>= 3.0.0)
Autoload: yes
Modified: trunk/octave-forge/main/queueing/DESCRIPTION.in
===================================================================
--- trunk/octave-forge/main/queueing/DESCRIPTION.in 2012-02-08 21:02:51 UTC (rev 9597)
+++ trunk/octave-forge/main/queueing/DESCRIPTION.in 2012-02-08 21:46:43 UTC (rev 9598)
@@ -8,11 +8,10 @@
networks and Markov chains analysis. This package can be used
to compute steady-state performance measures for open, closed and mixed
networks with single or multiple job classes. Mean Valud Analysis (MVA),
- convolution and various bounding techniques are implemented. Various
- transient and steady-state performance measures for Markov chains can als
- be computed (including state occupancy probabilities, mean time to absorption,
- time-averaged sojourn times), both for continuous-time and discrete-time
- chains.
+ convolution, and various bounding techniques are implemented. Several
+ transient and steady-state performance measures for discrete-
+ and continuous-time Markov chains can be computed (state occupancy
+ probabilities, mean time to absorption, time-averaged sojourn times).
Categories: Misc
Depends: octave (>= 3.0.0)
Autoload: yes
Modified: trunk/octave-forge/main/queueing/doc/markovchains.txi
===================================================================
--- trunk/octave-forge/main/queueing/doc/markovchains.txi 2012-02-08 21:02:51 UTC (rev 9597)
+++ trunk/octave-forge/main/queueing/doc/markovchains.txi 2012-02-08 21:46:43 UTC (rev 9598)
@@ -30,19 +30,81 @@
@node Discrete-Time Markov Chains
@section Discrete-Time Markov Chains
-@menu
-* DTMC Stationary Probability::
-* DTMC First Passage Times::
-@end menu
+Let @math{X_0, X_1, @dots{}, X_n, @dots{} } be a sequence of random
+variables, each one defined over a discete state space @math{0, 1, 2,
+@dots{}}. The sequence @math{X_0, X_1, @dots{}, X_n, @dots{}} is a
+@emph{stochastic process} with discrete time @math{0, 1, 2,
+@dots{}}. A @emph{Markov chain} is a stochastic process @math{@{X_n,
+n=0, 1, 2, @dots{}@}} which satisfies the following Marrkov property:
-@node DTMC Stationary Probability
-@subsection Stationary Probability
+@iftex
+@tex
+$$P(X_{n+1} = x_{n+1}\ |\ X_n = x_n, X_{n-1} = x_{n-1}, \ldots, X_0 = x_0) = P(X_{n+1} = x_{n+1}\ |\ X_n = x_n)$$
+@end tex
+@end iftex
+@ifnottex
+@example
+@group
+P(X_@{n+1@} = x_@{n+1@} | X_n = x_n, X_@{n-1@} = x_@{n-1@}, ..., X_0 = x_0) = P(X_@{n+1@} = x_@{n+1@} | X_n = x_n)
+@end group
+@end example
+@end ifnottex
+@noindent which means that the probability that the system is in
+a particular state at time @math{n+1} only depends on the state the
+system was at time @math{n}.
+
+The evolution of a Markov chain with finite state space @math{@{1, 2,
+@dots{}, N@}} can be fully described by a stochastic matrix @math{{\bf
+P}(n) = P_{i,j}(n)} such that @math{P_{i, j}(n) = P( X_{n+1} = j\ |\
+X_n = j )}. If the Markov chain is homogeneous (that is, the
+transition probability matrix @math{{\bf P}(n)} is time-independent),
+we can simply write @math{{\bf P} = P_{i, j}}, where @math{P_{i, j} =
+P( X_{n+1} = j\ |\ X_n = j )} for all @math{n=0, 1, 2, @dots{}}.
+
+The transition probability matrix @math{\bf P} must satisfy the
+following two properties: (1) @math{P_{i, j} @geq{} 0} for all
+@math{i, j}, and (2) @math{\sum_{j=1}^N P_{i,j} = 1}. We denote with
+@math{{\bf \pi}(n) = (\pi_1(n), \pi_2(n), @dots{}, \pi_N(n) )} the
+@emph{state occupancy probability vector} at step
+@math{n}. @math{\pi_i(n)} denotes the probability that the system is
+in state @math{i} at step @math{n}.
+
+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
+probability vector @math{{\bf \pi}(n)} at step @math{n} can be
+computed as:
+
+@iftex
+@tex
+$${\bf \pi}(n) = {\bf \pi}(0) {\bf P}^n$$
+@end tex
+@end iftex
+@ifnottex
+@example
+@group
+\pi(n) = \pi(0) P^n
+@end group
+@end example
+@end ifnottex
+
+Under certain conditions, there exists a @emph{stationary state
+occupancy probability} @math{{\bf \pi} = \lim_{n \rightarrow +\infty}
+{\bf \pi}(n)}, which is independent from the initial state occupancy
+@math{{\bf \pi}(0)}.
+
@DOCSTRING(dtmc)
-@node DTMC First Passage Times
-@subsection First Passage Times
+@noindent @strong{EXAMPLE}
+@example
+@group
+@verbatiminclude @value{top_srcdir}/examples/demo_1_dtmc.m
+@end group
+@end example
+
+
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
Modified: trunk/octave-forge/main/queueing/doc/queueing.html
===================================================================
--- trunk/octave-forge/main/queueing/doc/queueing.html 2012-02-08 21:02:51 UTC (rev 9597)
+++ trunk/octave-forge/main/queueing/doc/queueing.html 2012-02-08 21:46:43 UTC (rev 9598)
@@ -55,10 +55,6 @@
<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="#DTMC-Stationary-Probability">4.1.1 Stationary Probability</a>
-<li><a href="#DTMC-First-Passage-Times">4.1.2 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>
@@ -788,23 +784,50 @@
<h3 class="section">4.1 Discrete-Time Markov Chains</h3>
-<ul class="menu">
-<li><a accesskey="1" href="#DTMC-Stationary-Probability">DTMC Stationary Probability</a>
-<li><a accesskey="2" href="#DTMC-First-Passage-Times">DTMC First Passage Times</a>
-</ul>
+<p>Let X_0, X_1, <small class="dots">...</small>, X_n, <small class="dots">...</small> be a sequence of random
+variables, each one defined over a discete state space 0, 1, 2,
+<small class="dots">...</small>. The sequence X_0, X_1, <small class="dots">...</small>, X_n, <small class="dots">...</small> is a
+<em>stochastic process</em> with discrete time 0, 1, 2,
+<small class="dots">...</small>. A <em>Markov chain</em> is a stochastic process {X_n,
+n=0, 1, 2, <small class="dots">...</small>} which satisfies the following Marrkov property:
-<div class="node">
-<a name="DTMC-Stationary-Probability"></a>
-<p><hr>
-Next: <a rel="next" accesskey="n" href="#DTMC-First-Passage-Times">DTMC First Passage Times</a>,
-Up: <a rel="up" accesskey="u" href="#Discrete_002dTime-Markov-Chains">Discrete-Time Markov Chains</a>
+<pre class="example"> P(X_{n+1} = x_{n+1} | X_n = x_n, X_{n-1} = x_{n-1}, ..., X_0 = x_0) = P(X_{n+1} = x_{n+1} | X_n = x_n)
+</pre>
+ <p class="noindent">which means that the probability that the system is in
+a particular state at time n+1 only depends on the state the
+system was at time n.
-</div>
+ <p>The evolution of a Markov chain with finite state space {1, 2,
+<small class="dots">...</small>, N} can be fully described by a stochastic matrix \bf
+P(n) = P_i,j(n) such that P_i, j(n) = P( X_n+1 = j\ |\
+X_n = j ). If the Markov chain is homogeneous (that is, the
+transition probability matrix \bf P(n) is time-independent),
+we can simply write \bf P = P_i, j, where P_i, j =
+P( X_n+1 = j\ |\ X_n = j ) for all n=0, 1, 2, <small class="dots">...</small>.
-<h4 class="subsection">4.1.1 Stationary Probability</h4>
+ <p>The transition probability matrix \bf P must satisfy the
+following two properties: (1) P_i, j ≥ 0 for all
+i, j, and (2) \sum_j=1^N P_i,j = 1. We denote with
+\bf \pi(n) = (\pi_1(n), \pi_2(n), <small class="dots">...</small>, \pi_N(n) ) the
+<em>state occupancy probability vector</em> at step
+n. \pi_i(n) denotes the probability that the system is
+in state i at step n.
-<p><a name="doc_002ddtmc"></a>
+ <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
+computed as:
+<pre class="example"> \pi(n) = \pi(0) P^n
+</pre>
+ <p>Under certain conditions, there exists a <em>stationary state
+occupancy probability</em> \bf \pi = \lim_n \rightarrow +\infty
+\bf \pi(n), which is independent from the initial state occupancy
+\bf \pi(0).
+
+ <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>
@@ -848,17 +871,24 @@
</blockquote></div>
-<div class="node">
-<a name="DTMC-First-Passage-Times"></a>
-<p><hr>
-Previous: <a rel="previous" accesskey="p" href="#DTMC-Stationary-Probability">DTMC Stationary Probability</a>,
-Up: <a rel="up" accesskey="u" href="#Discrete_002dTime-Markov-Chains">Discrete-Time Markov Chains</a>
+<p class="noindent"><strong>EXAMPLE</strong>
-</div>
-
-<h4 class="subsection">4.1.2 First Passage Times</h4>
-
-<p>The First Passage Time M_i j is defined as the average
+<pre class="example"><pre class="verbatim"> a = 0.2;
+ b = 0.15;
+ P = [ 1-a a; b 1-b];
+ T = 0:14;
+ pp = zeros(2,length(T));
+ for i=1:length(T)
+ pp(:,i) = dtmc(P,T(i),[1 0]);
+ endfor
+ ss = dtmc(P); # compute steady state probabilities
+ plot( T, pp(1,:), "b+;p_0(t);", "linewidth", 2, \
+ T, ss(1)*ones(size(T)), "b;Steady State;", \
+ T, pp(2,:), "r+;p_1(t);", "linewidth", 2, \
+ 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
number of transitions needed to visit state j for the first
time, starting from state i. Matrix \bf M satisfies the
property that
@@ -5337,10 +5367,10 @@
<li><a href="#index-Continuous-time-Markov-chain-14">Continuous time Markov chain</a>: <a href="#CTMC-Stationary-Probability">CTMC Stationary Probability</a></li>
<li><a href="#index-convolution-algorithm-100">convolution algorithm</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
<li><a href="#index-copyright-282">copyright</a>: <a href="#Copying">Copying</a></li>
-<li><a href="#index-Discrete-time-Markov-chain-4">Discrete time Markov chain</a>: <a href="#DTMC-Stationary-Probability">DTMC Stationary Probability</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-22">Expected sojourn time</a>: <a href="#Expected-Sojourn-Time">Expected Sojourn Time</a></li>
<li><a href="#index-First-passage-times-36">First passage times</a>: <a href="#CTMC-First-Passage-Times">CTMC First Passage Times</a></li>
-<li><a href="#index-First-passage-times-10">First passage times</a>: <a href="#DTMC-First-Passage-Times">DTMC First Passage Times</a></li>
+<li><a href="#index-First-passage-times-10">First passage times</a>: <a href="#Discrete_002dTime-Markov-Chains">Discrete-Time Markov Chains</a></li>
<li><a href="#index-Jackson-network-91">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-110">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-72">M/G/1 system</a>: <a href="#The-M_002fG_002f1-System">The M/G/1 System</a></li>
@@ -5356,10 +5386,9 @@
<li><a href="#index-Markov-chain_002c-continuous-time-21">Markov chain, continuous time</a>: <a href="#Expected-Sojourn-Time">Expected Sojourn Time</a></li>
<li><a href="#index-Markov-chain_002c-continuous-time-18">Markov chain, continuous time</a>: <a href="#Birth_002dDeath-process">Birth-Death process</a></li>
<li><a href="#index-Markov-chain_002c-continuous-time-13">Markov chain, continuous time</a>: <a href="#CTMC-Stationary-Probability">CTMC Stationary Probability</a></li>
-<li><a href="#index-Markov-chain_002c-discrete-time-9">Markov chain, discrete time</a>: <a href="#DTMC-First-Passage-Times">DTMC First Passage Times</a></li>
-<li><a href="#index-Markov-chain_002c-discrete-time-3">Markov chain, discrete time</a>: <a href="#DTMC-Stationary-Probability">DTMC Stationary Probability</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-15">Markov chain, state occupancy probabilities</a>: <a href="#CTMC-Stationary-Probability">CTMC Stationary Probability</a></li>
-<li><a href="#index-Markov-chain_002c-stationary-probabilities-5">Markov chain, stationary probabilities</a>: <a href="#DTMC-Stationary-Probability">DTMC Stationary Probability</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-28">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-136">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-165">Mean Value Analysys (MVA), approximate</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
@@ -5374,7 +5403,7 @@
<li><a href="#index-queueing-networks-75">queueing networks</a>: <a href="#Queueing-Networks">Queueing Networks</a></li>
<li><a href="#index-RS-blocking-226">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-16">Stationary probabilities</a>: <a href="#CTMC-Stationary-Probability">CTMC Stationary Probability</a></li>
-<li><a href="#index-Stationary-probabilities-6">Stationary probabilities</a>: <a href="#DTMC-Stationary-Probability">DTMC Stationary Probability</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-25">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-52">traffic intensity</a>: <a href="#The-M_002fM_002finf-System">The M/M/inf System</a></li>
<li><a href="#index-warranty-281">warranty</a>: <a href="#Copying">Copying</a></li>
@@ -5398,8 +5427,8 @@
<li><a href="#index-ctmc_005ffpt-33"><code>ctmc_fpt</code></a>: <a href="#CTMC-First-Passage-Times">CTMC First Passage Times</a></li>
<li><a href="#index-ctmc_005fmtta-26"><code>ctmc_mtta</code></a>: <a href="#Expected-Time-to-Absorption">Expected Time to Absorption</a></li>
<li><a href="#index-ctmc_005ftaexps-23"><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="#DTMC-Stationary-Probability">DTMC Stationary Probability</a></li>
-<li><a href="#index-dtmc_005ffpt-7"><code>dtmc_fpt</code></a>: <a href="#DTMC-First-Passage-Times">DTMC First Passage Times</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_005ffpt-7"><code>dtmc_fpt</code></a>: <a href="#Discrete_002dTime-Markov-Chains">Discrete-Time Markov Chains</a></li>
<li><a href="#index-population_005fmix-271"><code>population_mix</code></a>: <a href="#Utility-functions">Utility functions</a></li>
<li><a href="#index-qnammm-65"><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-265"><code>qnclosed</code></a>: <a href="#Utility-functions">Utility functions</a></li>
Modified: trunk/octave-forge/main/queueing/doc/queueing.pdf
===================================================================
(Binary files differ)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <mma...@us...> - 2012-02-15 11:54:25
|
Revision: 9625
http://octave.svn.sourceforge.net/octave/?rev=9625&view=rev
Author: mmarzolla
Date: 2012-02-15 11:54:15 +0000 (Wed, 15 Feb 2012)
Log Message:
-----------
fixed typo in the documentation
Modified Paths:
--------------
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/inst/qnclosedmultimva.m
Modified: trunk/octave-forge/main/queueing/doc/markovchains.txi
===================================================================
--- trunk/octave-forge/main/queueing/doc/markovchains.txi 2012-02-15 10:20:36 UTC (rev 9624)
+++ trunk/octave-forge/main/queueing/doc/markovchains.txi 2012-02-15 11:54:15 UTC (rev 9625)
@@ -43,11 +43,7 @@
@end tex
@end iftex
@ifnottex
-@example
-@group
-P(X_@{n+1@} = x_@{n+1@} | X_n = x_n, X_@{n-1@} = x_@{n-1@}, ..., X_0 = x_0) = P(X_@{n+1@} = x_@{n+1@} | X_n = x_n)
-@end group
-@end example
+@math{P(X_{n+1} = x_{n+1} | X_n = x_n, X_{n-1} = x_{n-1}, ..., X_0 = x_0) = P(X_{n+1} = x_{n+1} | X_n = x_n)}
@end ifnottex
@noindent which means that the probability that the system is in
@@ -92,7 +88,8 @@
Under certain conditions, there exists a @emph{stationary state
occupancy probability} @math{{\bf \pi} = \lim_{n \rightarrow +\infty}
{\bf \pi}(n)}, which is independent from the initial state occupancy
-@math{{\bf \pi}(0)}.
+@math{{\bf \pi}(0)}. The stationary state occupancy probability vector
+@math{\bf \pi} satisfies @math{{\bf \pi} = {\bf \pi} {\bf P}}.
@DOCSTRING(dtmc)
@@ -104,7 +101,6 @@
@end group
@end example
-
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
Modified: trunk/octave-forge/main/queueing/doc/queueing.html
===================================================================
--- trunk/octave-forge/main/queueing/doc/queueing.html 2012-02-15 10:20:36 UTC (rev 9624)
+++ trunk/octave-forge/main/queueing/doc/queueing.html 2012-02-15 11:54:15 UTC (rev 9625)
@@ -791,9 +791,9 @@
<small class="dots">...</small>. A <em>Markov chain</em> is a stochastic process {X_n,
n=0, 1, 2, <small class="dots">...</small>} which satisfies the following Marrkov property:
-<pre class="example"> P(X_{n+1} = x_{n+1} | X_n = x_n, X_{n-1} = x_{n-1}, ..., X_0 = x_0) = P(X_{n+1} = x_{n+1} | X_n = x_n)
-</pre>
- <p class="noindent">which means that the probability that the system is in
+ <p>P(X_n+1 = x_n+1 | X_n = x_n, X_n-1 = x_n-1, ..., X_0 = x_0) = P(X_n+1 = x_n+1 | X_n = x_n)
+
+<p class="noindent">which means that the probability that the system is in
a particular state at time n+1 only depends on the state the
system was at time n.
@@ -824,7 +824,8 @@
<p>Under certain conditions, there exists a <em>stationary state
occupancy probability</em> \bf \pi = \lim_n \rightarrow +\infty
\bf \pi(n), which is independent from the initial state occupancy
-\bf \pi(0).
+\bf \pi(0). The stationary state occupancy probability vector
+\bf \pi satisfies \bf \pi = \bf \pi \bf P.
<p><a name="doc_002ddtmc"></a>
@@ -3445,7 +3446,7 @@
<br><dt><var>V</var><dd><var>V</var><code>(c,k)</code> is the average number of visits of class c
customers to service center k; <var>V</var><code>(c,k) ≥ 0</code>,
default is 1.
-<strong>If you pass this parameter, no class switching is not
+<strong>If you pass this parameter, class switching is not
allowed</strong>
<br><dt><var>P</var><dd><var>P</var><code>(r,i,s,j)</code> is the probability that a class r
Modified: trunk/octave-forge/main/queueing/doc/queueing.pdf
===================================================================
(Binary files differ)
Modified: trunk/octave-forge/main/queueing/inst/qnclosedmultimva.m
===================================================================
--- trunk/octave-forge/main/queueing/inst/qnclosedmultimva.m 2012-02-15 10:20:36 UTC (rev 9624)
+++ trunk/octave-forge/main/queueing/inst/qnclosedmultimva.m 2012-02-15 11:54:15 UTC (rev 9625)
@@ -91,7 +91,7 @@
## @code{@var{V}(c,k)} is the average number of visits of class @math{c}
## customers to service center @math{k}; @code{@var{V}(c,k) @geq{} 0},
## default is 1.
-## @strong{If you pass this parameter, no class switching is not
+## @strong{If you pass this parameter, class switching is not
## allowed}
##
## @item P
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <mma...@us...> - 2012-02-22 21:56:12
|
Revision: 9666
http://octave.svn.sourceforge.net/octave/?rev=9666&view=rev
Author: mmarzolla
Date: 2012-02-22 21:56:05 +0000 (Wed, 22 Feb 2012)
Log Message:
-----------
Fixed documentation of qnvisits
Modified Paths:
--------------
trunk/octave-forge/main/queueing/doc/queueing.html
trunk/octave-forge/main/queueing/doc/queueing.pdf
trunk/octave-forge/main/queueing/inst/qnvisits.m
Modified: trunk/octave-forge/main/queueing/doc/queueing.html
===================================================================
--- trunk/octave-forge/main/queueing/doc/queueing.html 2012-02-22 20:48:51 UTC (rev 9665)
+++ trunk/octave-forge/main/queueing/doc/queueing.html 2012-02-22 21:56:05 UTC (rev 9666)
@@ -4396,8 +4396,9 @@
<var>V</var><code>(r,i)</code> is the class r visit ratio at center
i.
- <br><dt><var>ch</var><dd>(For closed networks only). <var>ch</var><code>(c,k)</code> is the
-number of the chain that class c at center k belongs to.
+ <br><dt><var>ch</var><dd>(For closed networks only). <var>ch</var><code>(c)</code> is the chain number
+that class c belongs to. Different classes can belong to the
+same chain. Chains are numbered 1, 2, <small class="dots">...</small>.
The total number of chains is <code>max(</code><var>ch</var><code>)</code>.
</dl>
Modified: trunk/octave-forge/main/queueing/doc/queueing.pdf
===================================================================
(Binary files differ)
Modified: trunk/octave-forge/main/queueing/inst/qnvisits.m
===================================================================
--- trunk/octave-forge/main/queueing/inst/qnvisits.m 2012-02-22 20:48:51 UTC (rev 9665)
+++ trunk/octave-forge/main/queueing/inst/qnvisits.m 2012-02-22 21:56:05 UTC (rev 9666)
@@ -61,8 +61,9 @@
## @math{i}.
##
## @item ch
-## (For closed networks only). @code{@var{ch}(c,k)} is the
-## number of the chain that class @math{c} at center @math{k} belongs to.
+## (For closed networks only). @code{@var{ch}(c)} is the chain number
+## that class @math{c} belongs to. Different classes can belong to the
+## same chain. Chains are numbered @math{1, 2, @dots{}}.
## The total number of chains is @code{max(@var{ch})}.
##
## @end table
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <mma...@us...> - 2012-03-02 14:36:34
|
Revision: 9739
http://octave.svn.sourceforge.net/octave/?rev=9739&view=rev
Author: mmarzolla
Date: 2012-03-02 14:36:24 +0000 (Fri, 02 Mar 2012)
Log Message:
-----------
modifications
Modified Paths:
--------------
trunk/octave-forge/main/queueing/inst/qnclosedgb.m
trunk/octave-forge/main/queueing/inst/qnclosedmultimva.m
trunk/octave-forge/main/queueing/inst/qnclosedsinglemva.m
trunk/octave-forge/main/queueing/test/Makefile
Modified: trunk/octave-forge/main/queueing/inst/qnclosedgb.m
===================================================================
--- trunk/octave-forge/main/queueing/inst/qnclosedgb.m 2012-03-02 11:45:52 UTC (rev 9738)
+++ trunk/octave-forge/main/queueing/inst/qnclosedgb.m 2012-03-02 14:36:24 UTC (rev 9739)
@@ -65,6 +65,13 @@
## Web: http://www.moreno.marzolla.name/
function [X_lower X_upper Q_lower Q_upper] = qnclosedgb( N, L, Z, X_minus, X_plus )
+
+ ## This implementation is based on the paper: G.Casale, R.R.Muntz,
+ ## G.Serazzi. Geometric Bounds: a Noniterative Analysis Technique for
+ ## Closed Queueing Networks IEEE Transactions on Computers,
+ ## 57(6):780-794, Jun 2008.
+ ## http://doi.ieeecomputersociety.org/10.1109/TC.2008.37
+
## The original paper uses the symbol "L" instead of "D" to denote the
## loadings of service centers. In this function we adopt the same
## notation as the paper.
@@ -132,10 +139,8 @@
Q_upper(i) = Y(i)./(1-Y(i)) .- (Y(i).^(N+1))./(1-Y(i)); # Eq. (13)
## now, handle the case of servers with demand equal to the maximum
i=find(L==L_max);
- Q_lower(i) = 1/m_max*(N-Z*X_plus - sum( Q_upper( find(L<L_max) ) ) ); \
- # Eq. (8)
- Q_upper(i) = 1/m_max*(N-Z*X_minus - sum( Q_lower( find(L<L_max) \
- ) ) ); # Eq. (13)
+ Q_lower(i) = 1/m_max*(N-Z*X_plus - sum( Q_upper( L<L_max ))); # Eq. (8)
+ Q_upper(i) = 1/m_max*(N-Z*X_minus - sum( Q_lower( L<L_max ))); # Eq. (13)
endfunction
%!test
@@ -183,16 +188,17 @@
%! m = ones(1,3);
%! V = qnvisits(P);
%! Nmax = 20;
+%! tol = 1e-5; # compensate for numerical errors
%!
%! ## Test case with Z>0
%! for n=1:Nmax
%! [X_gb_lower X_gb_upper Q_gb_lower Q_gb_upper] = qnclosedgb(n, S.*V, 2);
%! [U R Q X] = qnclosed( n, S, V, m, 2 );
%! X_mva = X(1)/V(1);
-%! assert( X_gb_lower <= X_mva );
-%! assert( X_gb_upper >= X_mva );
-%! assert( Q_gb_lower <= Q+1e-5 ); # compensate for numerical errors
-%! assert( Q_gb_upper >= Q-1e-5 ); # compensate for numerical errors
+%! assert( X_gb_lower <= X_mva+tol );
+%! assert( X_gb_upper >= X_mva-tol );
+%! assert( Q_gb_lower <= Q+tol ); # compensate for numerical errors
+%! assert( Q_gb_upper >= Q-tol ); # compensate for numerical errors
%! endfor
%!test
@@ -201,14 +207,15 @@
%! m = ones(1,3);
%! V = qnvisits(P);
%! Nmax = 20;
+%! tol = 1e-5; # compensate for numerical errors
%!
%! ## Test case with Z=0
%! for n=1:Nmax
%! [X_gb_lower X_gb_upper Q_gb_lower Q_gb_upper] = qnclosedgb(n, S.*V, 0);
%! [U R Q X] = qnclosed( n, S, V, m, 0 );
%! X_mva = X(1)/V(1);
-%! assert( X_gb_lower <= X_mva );
-%! assert( X_gb_upper >= X_mva );
-%! assert( Q_gb_lower <= Q );
-%! assert( Q_gb_upper >= Q );
+%! assert( X_gb_lower <= X_mva+tol );
+%! assert( X_gb_upper >= X_mva-tol );
+%! assert( Q_gb_lower <= Q+tol );
+%! assert( Q_gb_upper >= Q-tol );
%! endfor
Modified: trunk/octave-forge/main/queueing/inst/qnclosedmultimva.m
===================================================================
--- trunk/octave-forge/main/queueing/inst/qnclosedmultimva.m 2012-03-02 11:45:52 UTC (rev 9738)
+++ trunk/octave-forge/main/queueing/inst/qnclosedmultimva.m 2012-03-02 14:36:24 UTC (rev 9739)
@@ -128,8 +128,10 @@
##
## @item R
## @code{@var{R}(c,k)} is the class @math{c} response time at
-## center @math{k}. The total class @math{c} system response time
-## can be computed as @code{dot(@var{R}, @var{V}, 2)}.
+## center @math{k}. The class @math{c} @emph{residence time}
+## at center @math{k} is @code{@var{R}(c,k) * @var{C}(c,k)}.
+## The total class @math{c} system response time
+## is @code{dot(@var{R}, @var{V}, 2)}.
##
## @item Q
## @code{@var{Q}(c,k)} is the average number of
@@ -158,12 +160,19 @@
print_usage();
endif
+ ## basic sanity checks
+ isvector(N) && all( N>=0 ) || \
+ usage( "N must be a vector >=0" );
+ C = length(N); ## Number of classes
+ ( ndims(S) == 2 ) || \
+ usage( "S must be a matrix" );
+
if ( nargin == 2 )
V = ones(size(S));
endif
( ismatrix(V) && (ndims(V) == 2 || ndims(V) == 4) ) || \
- usage("The third parameter has %d dimensions (must be 2- or 4-dimensional)", ndims(V) );
+ usage("The third parametermust be a 2- or 4-dimensional matrix" );
if ( ndims(V) == 2 )
[U R Q X] = __qnclosedmultimva_nocs( N, S, V, varargin{:} );
@@ -185,13 +194,13 @@
usage( "N must be >=0" );
N = N(:)'; # make N a row vector
C = length(N); ## Number of classes
+ ( ndims(S) == 2 ) || \
+ usage( "S must be a matrix" );
K = columns(S); ## Number of service centers
- ( ndims(S) == 2 ) || \
- usage( "S must be a %dx%d matrix", C, K );
size(S) == [C,K] || \
usage( "S size mismatch (is %dx%d, should be %dx%d)", rows(S), columns(S), C, K );
ndims(P) == 4 && size(P) == [C,K,C,K] || \
- usage( "P size mismatch" );
+ usage( "P size mismatch (should be %dx%dx%dx%d)",C,K,C,K );
if ( nargin < 4 )
m = ones(1,K);
@@ -205,7 +214,7 @@
## Check consistency of parameters
all( all( S >= 0 ) ) || \
- usage( "S must be >0" );
+ usage( "S must be >= 0" );
all( any(S>0,2) ) || \
usage( "S must contain at least a value >0 for each row" );
all( all( P >= 0 ) ) || \
@@ -217,7 +226,6 @@
[V ch] = qnvisits(P);
## 2. Identify chains
- ## ch = qnchains(P);
nch = max(ch);
## 3. Compute visit counts for the equivalent network
@@ -311,7 +319,7 @@
## Check consistency of parameters
all( all( S >= 0 ) ) || \
- usage( "S must be >=0" );
+ usage( "S must be >= 0" );
all( any(S>0,2) ) || \
usage( "S must contain at least a value >0 for each row" );
all( all( V >= 0 ) ) || \
Modified: trunk/octave-forge/main/queueing/inst/qnclosedsinglemva.m
===================================================================
--- trunk/octave-forge/main/queueing/inst/qnclosedsinglemva.m 2012-03-02 11:45:52 UTC (rev 9738)
+++ trunk/octave-forge/main/queueing/inst/qnclosedsinglemva.m 2012-03-02 14:36:24 UTC (rev 9739)
@@ -79,8 +79,11 @@
##
## @item R
## @code{@var{R}(k)} is the response time at center @math{k}.
+## The @emph{Residence Time} at center @math{k} is
+## @code{@var{R}(k) * @var{V}(k)}.
## The system response time @var{Rsys}
-## can be computed as @code{@var{Rsys} = @var{N}/@var{Xsys} - Z}
+## can be computed either as @code{@var{Rsys} = @var{N}/@var{Xsys} - Z}
+## or as @code{@var{Rsys} = dot(@var{R},@var{V})}
##
## @item Q
## @code{@var{Q}(k)} is the average number of requests at center
Modified: trunk/octave-forge/main/queueing/test/Makefile
===================================================================
--- trunk/octave-forge/main/queueing/test/Makefile 2012-03-02 11:45:52 UTC (rev 9738)
+++ trunk/octave-forge/main/queueing/test/Makefile 2012-03-02 14:36:24 UTC (rev 9739)
@@ -5,7 +5,7 @@
ALL:
check:
- cd ../inst && octave -q ../test/fntests.m
+ cd ../inst && octave -qf ../test/fntests.m
dist:
ln $(DISTFILES) ../`cat ../fname`/test/
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <mma...@us...> - 2012-03-10 16:00:52
|
Revision: 9807
http://octave.svn.sourceforge.net/octave/?rev=9807&view=rev
Author: mmarzolla
Date: 2012-03-10 16:00:45 +0000 (Sat, 10 Mar 2012)
Log Message:
-----------
Bug fix and enhancements in ctmc_exps()
Modified Paths:
--------------
trunk/octave-forge/main/queueing/ChangeLog
trunk/octave-forge/main/queueing/NEWS
trunk/octave-forge/main/queueing/inst/ctmc_exps.m
trunk/octave-forge/main/queueing/inst/ctmc_mtta.m
Modified: trunk/octave-forge/main/queueing/ChangeLog
===================================================================
--- trunk/octave-forge/main/queueing/ChangeLog 2012-03-10 12:44:08 UTC (rev 9806)
+++ trunk/octave-forge/main/queueing/ChangeLog 2012-03-10 16:00:45 UTC (rev 9807)
@@ -1,3 +1,13 @@
+2012-02-XX Moreno Marzolla <mar...@cs...>
+
+ * Version 1.0.X 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
+ until absorption for absorbing CTMCs.
+ * Miscellaneous fixes/improvements to the documentation
+
2012-02-04 Moreno Marzolla <mar...@cs...>
* Version 1.0.0 released under the name "queueing" (initial
Modified: trunk/octave-forge/main/queueing/NEWS
===================================================================
--- trunk/octave-forge/main/queueing/NEWS 2012-03-10 12:44:08 UTC (rev 9806)
+++ trunk/octave-forge/main/queueing/NEWS 2012-03-10 16:00:45 UTC (rev 9807)
@@ -1,3 +1,8 @@
+Summary of important user-visible changes for queueing-1.0.X
+
+** Function ctmc_exps() can now compute the expected sojourn time
+ until absorption for absorming CTMC
+
Summary of important user-visible changes for queueing-1.0.0
------------------------------------------------------------------------------
Modified: trunk/octave-forge/main/queueing/inst/ctmc_exps.m
===================================================================
--- trunk/octave-forge/main/queueing/inst/ctmc_exps.m 2012-03-10 12:44:08 UTC (rev 9806)
+++ trunk/octave-forge/main/queueing/inst/ctmc_exps.m 2012-03-10 16:00:45 UTC (rev 9807)
@@ -17,24 +17,27 @@
## -*- texinfo -*-
##
-## @deftypefn {Function File} {@var{L} =} ctmc_exps (@var{Q}, @var{tt}, @var{p})
+## @deftypefn {Function File} {@var{L} =} ctmc_exps (@var{Q}, @var{tt}, @var{p} )
+## @deftypefnx {Function File} {@var{L} =} ctmc_exps (@var{Q}, @var{p})
##
## @cindex Markov chain, continuous time
## @cindex Expected sojourn time
##
-## Compute the expected total time @code{@var{L}(t,j)} spent in state
-## @math{j} during the time interval @code{[0,@var{tt}(t))}, assuming
-## that at time 0 the state occupancy probability was @var{p}.
+## With three arguments, compute the expected time @code{@var{L}(t,j)}
+## spent in each state @math{j} during the time interval
+## @code{[0,@var{tt}(t))}, assuming that at time 0 the state occupancy
+## probability was @var{p}. With two arguments, compute the expected
+## time @code{@var{L}(j}} spent in each state @math{j} until absorption.
##
## @strong{INPUTS}
##
## @table @var
##
## @item Q
-## Infinitesimal generator matrix. @code{@var{Q}(i,j)} is the transition
-## rate from state @math{i} to state @math{j},
-## @math{1 @leq{} i \neq j @leq{} N}. The matrix @var{Q} must also satisfy the
-## condition @code{sum(@var{Q},2) == 0}
+## @math{N \times N} infinitesimal generator matrix. @code{@var{Q}(i,j)}
+## is the transition rate from state @math{i} to state @math{j}, @math{1
+## @leq{} i \neq j @leq{} N}. The matrix @var{Q} must also satisfy the
+## condition @math{\sum_{j=1}^N Q_{ij} = 0}.
##
## @item tt
## This parameter is a vector used for numerical integration. The first
@@ -43,8 +46,9 @@
## @math{[0,t)} of interest (@code{@var{tt}(end) == @math{t}}).
##
## @item p
-## @code{@var{p}(i)} is the probability that at time 0 the system was in
-## state @math{i}, for all @math{i = 1, @dots{}, N}
+## Initial occupancy probability vector; @code{@var{p}(i)} is the
+## probability the system is in state @math{i} at time 0, @math{i = 1,
+## @dots{}, N}
##
## @end table
##
@@ -53,8 +57,14 @@
## @table @var
##
## @item L
-## @code{@var{L}(t,j)} is the expected time spent in state @math{j}
-## during the interval @code{[0,@var{tt}(t))}. @code{1 @leq{} @var{t} @leq{} length(@var{tt})}
+## If this function is called with three arguments, @var{L} is a matrix
+## of size @code{[length(@var{tt}), N]} where @code{@var{L}(t,j)} is the
+## expected time spent in state @math{j} during the interval
+## @code{[0,@var{tt}(t)]}. If this function is called with two
+## arguments, @var{L} is a vector with @math{N} elements where
+## @code{@var{L}(j)} is the expected time spent in state @math{j} until
+## absorption, if @math{j} is a transient state. If @math{j}
+## is an absorbing state, @code{@var{L}(j) = 0}.
##
## @end table
##
@@ -63,11 +73,11 @@
## Author: Moreno Marzolla <marzolla(at)cs.unibo.it>
## Web: http://www.moreno.marzolla.name/
-function L = ctmc_exps( Q, tt, p )
+function L = ctmc_exps( Q, varargin )
persistent epsilon = 10*eps;
- if ( nargin != 3 )
+ if ( nargin < 2 || nargin > 3 )
print_usage();
endif
@@ -77,16 +87,56 @@
( norm( sum(Q,2), "inf" ) < epsilon ) || \
error( "Q is not an infinitesimal generator matrix" );
+ if ( nargin == 2 )
+ p = varargin{1};
+ else
+ tt = varargin{1};
+ p = varargin{2};
+ endif
+
( isvector(p) && length(p) == size(Q,1) && all(p>=0) && abs(sum(p)-1.0)<epsilon ) || \
usage( "p must be a probability vector" );
- ( isvector(tt) && abs(tt(1)) < epsilon ) || \
- usage( "tt must be a vector, and tt(1) must be 0.0" );
- tt = tt(:)'; # make tt a row vector
- p = p(:)'; # make p a row vector
- ff = @(x,t) (x(:)'*Q+p);
- fj = @(x,t) (Q);
- L = lsode( {ff, fj}, p, tt );
+ if ( nargin == 3 )
+ ( isvector(tt) && abs(tt(1)) < epsilon ) || \
+ usage( "tt must be a vector, and tt(1) must be 0.0" );
+ tt = tt(:)'; # make tt a row vector
+ p = p(:)'; # make p a row vector
+ ff = @(x,t) (x(:)'*Q+p);
+ fj = @(x,t) (Q);
+ L = lsode( {ff, fj}, zeros(size(p)), tt );
+ else
+#{
+ ## F(t) are the transient state occupancy probabilities at time t.
+ ## It is known that F(t) = p*expm(Q*t) (see function ctmc()).
+ ## The expected times spent in each state until absorption can
+ ## be computed as the integral of F(t) from t=0 to t=inf
+ F = @(t) (p*expm(Q*t)); ## FIXME: this must be restricted to transient states ONLY!!!!
+
+ ## Since function quadv does not support infinite integration
+ ## limits, we define a new function G(u) = F(tan(pi/2*u)) such that
+ ## the integral of G(u) on [0,1] is the integral of F(t) on [0,
+ ## +inf].
+ G = @(u) (F(tan(pi/2*u))*pi/2*(1+tan(pi/2*u)**2));
+
+ L = quadv(G,0,1);
+#}
+ ## Find nonzero rows. Nonzero rows correspond to transient states,
+ ## while zero rows are absorbing states. If there are no zero rows,
+ ## then the Markov chain does not contain absorbing states and we
+ ## raise an error
+ N = rows(Q);
+ nzrows = find( any( abs(Q) > epsilon, 2 ) );
+ if ( length( nzrows ) == N )
+ error( "There are no absorbing states" );
+ endif
+
+ QN = Q(nzrows,nzrows);
+ pN = p(nzrows);
+ LN = -pN*inv(QN);
+ L = zeros(1,N);
+ L(nzrows) = LN;
+ endif
endfunction
%!demo
@@ -99,10 +149,25 @@
%! tt = linspace(0,10,100);
%! p0 = zeros(1,N); p0(1)=1;
%! L = ctmc_exps(Q,tt,p0);
+%! #L2 = 0*L;
+%! #for i=1:length(tt)
+%! # L2(i,:) = quadv( @(t) (p0*expm(Q*t)) , 0, tt(i) );
+%! #endfor
%! plot( tt, L(:,1), ";State 1;", "linewidth", 2, \
+%! # tt, L2(:,1), "+;State 1 (quadv);", "markersize", 8, \
%! tt, L(:,2), ";State 2;", "linewidth", 2, \
%! tt, L(:,3), ";State 3;", "linewidth", 2, \
%! tt, L(:,4), ";State 4 (absorbing);", "linewidth", 2);
%! legend("location","northwest");
%! xlabel("Time");
%! ylabel("Expected sojourn time");
+
+%!demo
+%! lambda = 0.5;
+%! N = 4;
+%! birth = lambda*linspace(1,N-1,N-1);
+%! death = 0*birth;
+%! Q = diag(birth,1)+diag(death,-1);
+%! Q -= diag(sum(Q,2));
+%! p0 = zeros(1,N); p0(1)=1;
+%! L = ctmc_exps(Q,p0)
Modified: trunk/octave-forge/main/queueing/inst/ctmc_mtta.m
===================================================================
--- trunk/octave-forge/main/queueing/inst/ctmc_mtta.m 2012-03-10 12:44:08 UTC (rev 9806)
+++ trunk/octave-forge/main/queueing/inst/ctmc_mtta.m 2012-03-10 16:00:45 UTC (rev 9807)
@@ -22,9 +22,10 @@
## @cindex Markov chain, continuous time
## @cindex Mean time to absorption
##
-## Compute the Mean-Time to Absorption (MTTA) starting from initial
-## occupancy probability @var{p} at time 0. If there are no absorbing
-## states, this function fails with an error.
+## Compute the Mean-Time to Absorption (MTTA) of the CTMC described by
+## the infinitesimal generator matrix @var{Q}, starting from initial
+## occupancy probability @var{p}. If there are no absorbing states, this
+## function fails with an error.
##
## @strong{INPUTS}
##
@@ -76,18 +77,7 @@
( isvector(p) && length(p) == N && all(p>=0) && abs(sum(p)-1.0)<epsilon ) || \
usage( "p must be a probability vector" );
- ## Find nonzero rows. Nonzero rows correspond to transient states,
- ## while zero rows are absorbing states. If there are no zero rows,
- ## then the Markov chain does not contain absorbing states and we
- ## raise an error
- nzrows = find( any( abs(Q) > epsilon, 2 ) );
- if ( length( nzrows ) == N )
- error( "There are no absorbing states" );
- endif
-
- QN = Q(nzrows,nzrows);
- pN = p(nzrows);
- L = -pN*inv(QN);
+ L = ctmc_exps(Q,p);
t = sum(L);
endfunction
%!test
@@ -122,7 +112,7 @@
%! death = [ 3 4 5 ] * mu;
%! Q = diag(death,-1);
%! Q -= diag(sum(Q,2));
-%! t = ctmc_mtta(Q,[0 0 0 1])
+%! [t L] = ctmc_mtta(Q,[0 0 0 1])
%!demo
%! N = 100;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <mma...@us...> - 2012-03-10 16:03:56
|
Revision: 9808
http://octave.svn.sourceforge.net/octave/?rev=9808&view=rev
Author: mmarzolla
Date: 2012-03-10 16:03:47 +0000 (Sat, 10 Mar 2012)
Log Message:
-----------
fixed bug in texinfo documentation
Modified Paths:
--------------
trunk/octave-forge/main/queueing/doc/queueing.html
trunk/octave-forge/main/queueing/doc/queueing.pdf
trunk/octave-forge/main/queueing/inst/ctmc_exps.m
Modified: trunk/octave-forge/main/queueing/doc/queueing.html
===================================================================
--- trunk/octave-forge/main/queueing/doc/queueing.html 2012-03-10 16:00:45 UTC (rev 9807)
+++ trunk/octave-forge/main/queueing/doc/queueing.html 2012-03-10 16:03:47 UTC (rev 9808)
@@ -1100,36 +1100,46 @@
<p><a name="doc_002dctmc_005fexps"></a>
<div class="defun">
-— Function File: <var>L</var> = <b>ctmc_exps</b> (<var>Q, tt, p</var>)<var><a name="index-ctmc_005fexps-20"></a></var><br>
+— Function File: <var>L</var> = <b>ctmc_exps</b> (<var>Q, tt, 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>
<blockquote>
- <p><a name="index-Markov-chain_002c-continuous-time-21"></a><a name="index-Expected-sojourn-time-22"></a>
-Compute the expected total time <var>L</var><code>(t,j)</code> spent in state
-j during the time interval <code>[0,</code><var>tt</var><code>(t))</code>, assuming
-that at time 0 the state occupancy probability was <var>p</var>.
+ <p><a name="index-Markov-chain_002c-continuous-time-22"></a><a name="index-Expected-sojourn-time-23"></a>
+With three arguments, compute the expected time <var>L</var><code>(t,j)</code>
+spent in each state j during the time interval
+<code>[0,</code><var>tt</var><code>(t))</code>, assuming that at time 0 the state occupancy
+probability was <var>p</var>. With two arguments, compute the expected
+time <var>L</var><code>(j)</code> spent in each state j until absorption.
<p><strong>INPUTS</strong>
<dl>
-<dt><var>Q</var><dd>Infinitesimal generator matrix. <var>Q</var><code>(i,j)</code> is the transition
-rate from state i to state j,
-1 ≤ i \neq j ≤ N. The matrix <var>Q</var> must also satisfy the
-condition <code>sum(</code><var>Q</var><code>,2) == 0</code>
+<dt><var>Q</var><dd>N \times N infinitesimal generator matrix. <var>Q</var><code>(i,j)</code>
+is the transition rate from state i to state j, 1
+≤ i \neq j ≤ N. The matrix <var>Q</var> must also satisfy the
+condition \sum_j=1^N Q_ij = 0.
<br><dt><var>tt</var><dd>This parameter is a vector used for numerical integration. The first
element <var>tt</var><code>(1)</code> must be 0, and the last element
<var>tt</var><code>(end)</code> must be the upper bound of the interval
[0,t) of interest (<var>tt</var><code>(end) == t</code>).
- <br><dt><var>p</var><dd><var>p</var><code>(i)</code> is the probability that at time 0 the system was in
-state i, for all i = 1, <small class="dots">...</small>, N
+ <br><dt><var>p</var><dd>Initial occupancy probability vector; <var>p</var><code>(i)</code> is the
+probability the system is in state i at time 0, i = 1,
+<small class="dots">...</small>, N
</dl>
<p><strong>OUTPUTS</strong>
<dl>
-<dt><var>L</var><dd><var>L</var><code>(t,j)</code> is the expected time spent in state j
-during the interval <code>[0,</code><var>tt</var><code>(t))</code>. <code>1 ≤ </code><var>t</var><code> ≤ length(</code><var>tt</var><code>)</code>
+<dt><var>L</var><dd>If this function is called with three arguments, <var>L</var> is a matrix
+of size <code>[length(</code><var>tt</var><code>), N]</code> where <var>L</var><code>(t,j)</code> is the
+expected time spent in state j during the interval
+<code>[0,</code><var>tt</var><code>(t)]</code>. If this function is called with two
+arguments, <var>L</var> is a vector with N elements where
+<var>L</var><code>(j)</code> is the expected time spent in state j until
+absorption, if j is a transient state. If j
+is an absorbing state, <var>L</var><code>(j) = 0</code>.
</dl>
@@ -1175,9 +1185,9 @@
<p><a name="doc_002dctmc_005ftaexps"></a>
<div class="defun">
-— Function File: <var>M</var> = <b>ctmc_taexps</b> (<var>Q, tt, p</var>)<var><a name="index-ctmc_005ftaexps-23"></a></var><br>
+— Function File: <var>M</var> = <b>ctmc_taexps</b> (<var>Q, tt, p</var>)<var><a name="index-ctmc_005ftaexps-24"></a></var><br>
<blockquote>
- <p><a name="index-Markov-chain_002c-continuous-time-24"></a><a name="index-Time_002dalveraged-sojourn-time-25"></a>
+ <p><a name="index-Markov-chain_002c-continuous-time-25"></a><a name="index-Time_002dalveraged-sojourn-time-26"></a>
Compute the <em>time-averaged sojourn time</em> <var>M</var><code>(t,j)</code>,
defined as the fraction of the time interval <code>[0,</code><var>tt</var><code>(t))</code> spent in
state j, assuming that at time 0 the state occupancy
@@ -1264,12 +1274,13 @@
<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-26"></a></var><br>
+— Function File: <var>t</var> = <b>ctmc_mtta</b> (<var>Q, p</var>)<var><a name="index-ctmc_005fmtta-27"></a></var><br>
<blockquote>
- <p><a name="index-Markov-chain_002c-continuous-time-27"></a><a name="index-Mean-time-to-absorption-28"></a>
-Compute the Mean-Time to Absorption (MTTA) starting from initial
-occupancy probability <var>p</var> at time 0. If there are no absorbing
-states, this function fails with an error.
+ <p><a name="index-Markov-chain_002c-continuous-time-28"></a><a name="index-Mean-time-to-absorption-29"></a>
+Compute the Mean-Time to Absorption (MTTA) of the CTMC described by
+the infinitesimal generator matrix <var>Q</var>, starting from initial
+occupancy probability <var>p</var>. If there are no absorbing states, this
+function fails with an error.
<p><strong>INPUTS</strong>
@@ -1326,7 +1337,7 @@
Performance Evaluation with Computer Science Applications</cite>, Wiley,
1998.
- <p><a name="index-Bolch_002c-G_002e-29"></a><a name="index-Greiner_002c-S_002e-30"></a><a name="index-de-Meer_002c-H_002e-31"></a><a name="index-Trivedi_002c-K_002e-32"></a>
+ <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>
<div class="node">
<a name="CTMC-First-Passage-Times"></a>
<p><hr>
@@ -1340,10 +1351,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-33"></a></var><br>
-— Function File: <var>m</var> = <b>ctmc_fpt</b> (<var>Q, i, j</var>)<var><a name="index-ctmc_005ffpt-34"></a></var><br>
+— 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>
<blockquote>
- <p><a name="index-Markov-chain_002c-continuous-time-35"></a><a name="index-First-passage-times-36"></a>
+ <p><a name="index-Markov-chain_002c-continuous-time-36"></a><a name="index-First-passage-times-37"></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
@@ -1449,9 +1460,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-37"></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-38"></a></var><br>
<blockquote>
- <p><a name="index-g_t_0040math_007bM_002fM_002f1_007d-system-38"></a>
+ <p><a name="index-g_t_0040math_007bM_002fM_002f1_007d-system-39"></a>
Compute utilization, response time, average number of requests
and throughput for a M/M/1 queue.
@@ -1496,7 +1507,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-39"></a><a name="index-Greiner_002c-S_002e-40"></a><a name="index-de-Meer_002c-H_002e-41"></a><a name="index-Trivedi_002c-K_002e-42"></a>
+ <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>
<!-- M/M/m -->
<div class="node">
<a name="The-M%2fM%2fm-System"></a>
@@ -1522,10 +1533,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-43"></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-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</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>
<blockquote>
- <p><a name="index-g_t_0040math_007bM_002fM_002fm_007d-system-45"></a>
+ <p><a name="index-g_t_0040math_007bM_002fM_002fm_007d-system-46"></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.
@@ -1577,7 +1588,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-46"></a><a name="index-Greiner_002c-S_002e-47"></a><a name="index-de-Meer_002c-H_002e-48"></a><a name="index-Trivedi_002c-K_002e-49"></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/inf -->
<div class="node">
<a name="The-M%2fM%2finf-System"></a>
@@ -1600,7 +1611,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-50"></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-51"></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
@@ -1608,7 +1619,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-51"></a>
+ <p><a name="index-g_t_0040math_007bM_002fM_002f_007dinf-system-52"></a>
<p><strong>INPUTS</strong>
@@ -1626,7 +1637,7 @@
different from the utilization, which in the case of M/M/\infty
centers is always zero.
- <p><a name="index-traffic-intensity-52"></a>
+ <p><a name="index-traffic-intensity-53"></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
@@ -1654,7 +1665,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-53"></a><a name="index-Greiner_002c-S_002e-54"></a><a name="index-de-Meer_002c-H_002e-55"></a><a name="index-Trivedi_002c-K_002e-56"></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/1/k -->
<div class="node">
<a name="The-M%2fM%2f1%2fK-System"></a>
@@ -1678,9 +1689,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-57"></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-58"></a></var><br>
<blockquote>
- <p><a name="index-g_t_0040math_007bM_002fM_002f1_002fK_007d-system-58"></a>
+ <p><a name="index-g_t_0040math_007bM_002fM_002f1_002fK_007d-system-59"></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
@@ -1747,9 +1758,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-59"></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-60"></a></var><br>
<blockquote>
- <p><a name="index-g_t_0040math_007bM_002fM_002fm_002fK_007d-system-60"></a>
+ <p><a name="index-g_t_0040math_007bM_002fM_002fm_002fK_007d-system-61"></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
@@ -1807,7 +1818,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-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>
+ <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>
<!-- Approximate M/M/m -->
<div class="node">
@@ -1829,9 +1840,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-65"></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-66"></a></var><br>
<blockquote>
- <p><a name="index-Asymmetric-_0040math_007bM_002fM_002fm_007d-system-66"></a>
+ <p><a name="index-Asymmetric-_0040math_007bM_002fM_002fm_007d-system-67"></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
@@ -1878,7 +1889,7 @@
and Markov Chains: Modeling and Performance Evaluation with Computer
Science Applications</cite>, Wiley, 1998
- <p><a name="index-Bolch_002c-G_002e-67"></a><a name="index-Greiner_002c-S_002e-68"></a><a name="index-de-Meer_002c-H_002e-69"></a><a name="index-Trivedi_002c-K_002e-70"></a>
+ <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>
<div class="node">
<a name="The-M%2fG%2f1-System"></a>
<a name="The-M_002fG_002f1-System"></a>
@@ -1894,9 +1905,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-71"></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-72"></a></var><br>
<blockquote>
- <p><a name="index-g_t_0040math_007bM_002fG_002f1_007d-system-72"></a>
+ <p><a name="index-g_t_0040math_007bM_002fG_002f1_007d-system-73"></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
@@ -1953,9 +1964,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-73"></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-74"></a></var><br>
<blockquote>
- <p><a name="index-g_t_0040math_007bM_002fH_005fm_002f1_007d-system-74"></a>
+ <p><a name="index-g_t_0040math_007bM_002fH_005fm_002f1_007d-system-75"></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:
@@ -2037,7 +2048,7 @@
<li><a accesskey="6" href="#Utility-functions">Utility functions</a>: Utility functions to compute miscellaneous quantities
</ul>
-<p><a name="index-queueing-networks-75"></a>
+<p><a name="index-queueing-networks-76"></a>
<!-- INTRODUCTION -->
<div class="node">
<a name="Introduction-to-QNs"></a>
@@ -2298,13 +2309,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-76"></a></var><br>
-— Function File: <var>Q</var> = <b>qnmknode</b> (<var>"m/m/m-fcfs", S, m</var>)<var><a name="index-qnmknode-77"></a></var><br>
-— Function File: <var>Q</var> = <b>qnmknode</b> (<var>"m/m/1-lcfs-pr", S</var>)<var><a name="index-qnmknode-78"></a></var><br>
-— Function File: <var>Q</var> = <b>qnmknode</b> (<var>"-/g/1-ps", S</var>)<var><a name="index-qnmknode-79"></a></var><br>
-— Function File: <var>Q</var> = <b>qnmknode</b> (<var>"-/g/1-ps", S, s2</var>)<var><a name="index-qnmknode-80"></a></var><br>
-— Function File: <var>Q</var> = <b>qnmknode</b> (<var>"-/g/inf", S</var>)<var><a name="index-qnmknode-81"></a></var><br>
-— Function File: <var>Q</var> = <b>qnmknode</b> (<var>"-/g/inf", S, s2</var>)<var><a name="index-qnmknode-82"></a></var><br>
+— 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>
<blockquote>
<p>Creates a node; this function can be used together with
<code>qnsolve</code>. It is possible to create either single-class nodes
@@ -2373,10 +2384,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-83"></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-84"></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-85"></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-86"></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-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>
<blockquote>
<p>General evaluator of QN models. Networks can be open,
closed or mixed; single as well as multiclass networks are supported.
@@ -2554,11 +2565,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-87"></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-88"></a></var><br>
-— Function File: <var>pr</var> = <b>qnjackson</b> (<var>lambda, S, P, m, k</var>)<var><a name="index-qnjackson-89"></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-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>
<blockquote>
- <p><a name="index-open-network_002c-single-class-90"></a><a name="index-Jackson-network-91"></a>
+ <p><a name="index-open-network_002c-single-class-91"></a><a name="index-Jackson-network-92"></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
@@ -2640,7 +2651,7 @@
Performance Evaluation with Computer Science Applications</cite>, Wiley,
1998, pp. 284–287.
- <p><a name="index-Bolch_002c-G_002e-92"></a><a name="index-Greiner_002c-S_002e-93"></a><a name="index-de-Meer_002c-H_002e-94"></a><a name="index-Trivedi_002c-K_002e-95"></a>
+ <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>
<h4 class="subsection">6.3.2 The Convolution Algorithm</h4>
@@ -2674,10 +2685,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-96"></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-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</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>
<blockquote>
- <p><a name="index-closed-network-98"></a><a name="index-normalization-constant-99"></a><a name="index-convolution-algorithm-100"></a>
+ <p><a name="index-closed-network-99"></a><a name="index-normalization-constant-100"></a><a name="index-convolution-algorithm-101"></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
@@ -2768,20 +2779,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-101"></a>
+ <p><a name="index-Buzen_002c-J_002e-P_002e-102"></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-102"></a><a name="index-Greiner_002c-S_002e-103"></a><a name="index-de-Meer_002c-H_002e-104"></a><a name="index-Trivedi_002c-K_002e-105"></a>
+ <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>
<!-- 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-106"></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-107"></a></var><br>
<blockquote>
- <p><a name="index-closed-network-107"></a><a name="index-normalization-constant-108"></a><a name="index-convolution-algorithm-109"></a><a name="index-load_002ddependent-service-center-110"></a>
+ <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>
This function implements the <em>convolution algorithm</em> for
product-form, single-class closed queueing networks with general
load-dependent service centers.
@@ -2841,7 +2852,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-111"></a>
+ <p><a name="index-Schwetman_002c-H_002e-112"></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
@@ -2849,7 +2860,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-112"></a><a name="index-Kobayashi_002c-H_002e-113"></a>
+ <p><a name="index-Reiser_002c-M_002e-113"></a><a name="index-Kobayashi_002c-H_002e-114"></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,
@@ -2861,7 +2872,7 @@
function f_i defined in Schwetman, <code>Some Computational
Aspects of Queueing Network Models</code>.
- <p><a name="index-Bolch_002c-G_002e-114"></a><a name="index-Greiner_002c-S_002e-115"></a><a name="index-de-Meer_002c-H_002e-116"></a><a name="index-Trivedi_002c-K_002e-117"></a>
+ <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>
<h4 class="subsection">6.3.3 Open networks</h4>
@@ -2869,10 +2880,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-118"></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-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</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>
<blockquote>
- <p><a name="index-open-network_002c-single-class-120"></a><a name="index-BCMP-network-121"></a>
+ <p><a name="index-open-network_002c-single-class-121"></a><a name="index-BCMP-network-122"></a>
Analyze open, single class BCMP queueing networks.
<p>This function works for a subset of BCMP single-class open networks
@@ -2965,16 +2976,16 @@
Networks and Markov Chains: Modeling and Performance Evaluation with
Computer Science Applications</cite>, Wiley, 1998.
- <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>
+ <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>
<!-- 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-126"></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-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</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>
<blockquote>
- <p><a name="index-open-network_002c-multiple-classes-128"></a>
+ <p><a name="index-open-network_002c-multiple-classes-129"></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
@@ -3039,7 +3050,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-129"></a><a name="index-Zahorjan_002c-J_002e-130"></a><a name="index-Graham_002c-G_002e-S_002e-131"></a><a name="index-Sevcik_002c-K_002e-C_002e-132"></a>
+ <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>
<h4 class="subsection">6.3.4 Closed Networks</h4>
@@ -3047,11 +3058,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-133"></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-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, Z</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</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>
<blockquote>
- <p><a name="index-Mean-Value-Analysys-_0028MVA_0029-136"></a><a name="index-closed-network_002c-single-class-137"></a><a name="index-normalization-constant-138"></a>
+ <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>
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
@@ -3097,8 +3108,11 @@
<var>X</var><code>(k)*</code><var>S</var><code>(k)</code>.
<br><dt><var>R</var><dd><var>R</var><code>(k)</code> is the response time at center k.
+The <em>Residence Time</em> at center k is
+<var>R</var><code>(k) * </code><var>V</var><code>(k)</code>.
The system response time <var>Rsys</var>
-can be computed as <var>Rsys</var><code> = </code><var>N</var><code>/</code><var>Xsys</var><code> - Z</code>
+can be computed either as <var>Rsys</var><code> = </code><var>N</var><code>/</code><var>Xsys</var><code> - Z</code>
+or as <var>Rsys</var><code> = dot(</code><var>R</var><code>,</code><var>V</var><code>)</code>
<br><dt><var>Q</var><dd><var>Q</var><code>(k)</code> is the average number of requests at center
k. The number of requests in the system can be computed
@@ -3149,7 +3163,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-139"></a><a name="index-Lavenberg_002c-S_002e-S_002e-140"></a>
+ <p><a name="index-Reiser_002c-M_002e-140"></a><a name="index-Lavenberg_002c-S_002e-S_002e-141"></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)}, -->
@@ -3158,15 +3172,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-141"></a><a name="index-Bolch_002c-G_002e-142"></a><a name="index-Greiner_002c-S_002e-143"></a><a name="index-de-Meer_002c-H_002e-144"></a><a name="index-Trivedi_002c-K_002e-145"></a>
+ <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>
<!-- 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-146"></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-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</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>
<blockquote>
- <p><a name="index-Mean-Value-Analysys-_0028MVA_0029-148"></a><a name="index-closed-network_002c-single-class-149"></a><a name="index-load_002ddependent-service-center-150"></a>
+ <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>
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
@@ -3224,15 +3238,15 @@
1998, Section 8.2.4.1, “Networks with Load-Deèpendent Service: Closed
Networks”.
- <p><a name="index-Bolch_002c-G_002e-151"></a><a name="index-Greiner_002c-S_002e-152"></a><a name="index-de-Meer_002c-H_002e-153"></a><a name="index-Trivedi_002c-K_002e-154"></a>
+ <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>
<!-- 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-155"></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-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</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>
<blockquote>
- <p><a name="index-Mean-Value-Analysys-_0028MVA_0029-157"></a><a name="index-CMVA-158"></a>
+ <p><a name="index-Mean-Value-Analysys-_0028MVA_0029-158"></a><a name="index-CMVA-159"></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
@@ -3286,19 +3300,19 @@
closed networks</cite>. Queueing Syst. Theory Appl., 60:193–202, December
2008.
- <p><a name="index-Casale_002c-G_002e-159"></a>
+ <p><a name="index-Casale_002c-G_002e-160"></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-160"></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-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, Z</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, tol</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, iter_max</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</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>
<blockquote>
- <p><a name="index-Mean-Value-Analysys-_0028MVA_0029_002c-approximate-165"></a><a name="index-Approximate-MVA-166"></a><a name="index-Closed-network_002c-single-class-167"></a><a name="index-Closed-network_002c-approximate-analysis-168"></a>
+ <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>
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
@@ -3377,20 +3391,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-169"></a><a name="index-Zahorjan_002c-J_002e-170"></a><a name="index-Graham_002c-G_002e-S_002e-171"></a><a name="index-Sevcik_002c-K_002e-C_002e-172"></a>
+ <p><a name="index-Lazowska_002c-E_002e-D_002e-170"></a><a name="index-Zahorjan_002c-J_002e-171"></a><a name="index-Graham_002c-G_002e-S_002e-172"></a><a name="index-Sevcik_002c-K_002e-C_002e-173"></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-173"></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-174"></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-175"></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-176"></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-177"></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-178"></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-174"></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-175"></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-176"></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-177"></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-178"></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-179"></a></var><br>
<blockquote>
- <p><a name="index-Mean-Value-Analysys-_0028MVA_0029-179"></a><a name="index-closed-network_002c-multiple-classes-180"></a>
+ <p><a name="index-Mean-Value-Analysys-_0028MVA_0029-180"></a><a name="index-closed-network_002c-multiple-classes-181"></a>
Analyze closed, multiclass queueing networks with K service
centers and C independent customer classes (chains) using the
Mean Value Analysys (MVA) algorithm.
@@ -3477,8 +3491,10 @@
defined as <var>U</var><code>(c,k) = </code><var>X</var><code>(c,k)*</code><var>S</var><code>(c,k)</code>.
<br><dt><var>R</var><dd><var>R</var><code>(c,k)</code> is the class c response time at
-center k. The total class c system response time
-can be computed as <code>dot(</code><var>R</var><code>, </code><var>V</var><code>, 2)</code>.
+center k. The class c <em>residence time</em>
+at center k is <var>R</var><code>(c,k) * </code><var>C</var><code>(c,k)</code>.
+The total class c system response time
+is <code>dot(</code><var>R</var><code>, </code><var>V</var><code>, 2)</code>.
<br><dt><var>Q</var><dd><var>Q</var><code>(c,k)</code> is the average number of
class c requests at center k. The total number of
@@ -3518,7 +3534,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-181"></a><a name="index-Lavenberg_002c-S_002e-S_002e-182"></a>
+ <p><a name="index-Reiser_002c-M_002e-182"></a><a name="index-Lavenberg_002c-S_002e-S_002e-183"></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,
@@ -3528,18 +3544,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-183"></a><a name="index-Greiner_002c-S_002e-184"></a><a name="index-de-Meer_002c-H_002e-185"></a><a name="index-Trivedi_002c-K_002e-186"></a><a name="index-Lazowska_002c-E_002e-D_002e-187"></a><a name="index-Zahorjan_002c-J_002e-188"></a><a name="index-Graham_002c-G_002e-S_002e-189"></a><a name="index-Sevcik_002c-K_002e-C_002e-190"></a>
+ <p><a name="index-Bolch_002c-G_002e-184"></a><a name="index-Greiner_002c-S_002e-185"></a><a name="index-de-Meer_002c-H_002e-186"></a><a name="index-Trivedi_002c-K_002e-187"></a><a name="index-Lazowska_002c-E_002e-D_002e-188"></a><a name="index-Zahorjan_002c-J_002e-189"></a><a name="index-Graham_002c-G_002e-S_002e-190"></a><a name="index-Sevcik_002c-K_002e-C_002e-191"></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-191"></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-192"></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-193"></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-194"></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-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</var>)<var><a name="index-qnclosedmultimvaapprox-192"></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-193"></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-194"></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-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, Z, tol, iter_max</var>)<var><a name="index-qnclosedmultimvaapprox-196"></a></var><br>
<blockquote>
- <p><a name="index-Mean-Value-Analysys-_0028MVA_0029_002c-approximate-196"></a><a name="index-Approximate-MVA-197"></a><a name="index-Closed-network_002c-multiple-classes-198"></a><a name="index-Closed-network_002c-approximate-analysis-199"></a>
+ <p><a name="index-Mean-Value-Analysys-_0028MVA_0029_002c-approximate-197"></a><a name="index-Approximate-MVA-198"></a><a name="index-Closed-network_002c-multiple-classes-199"></a><a name="index-Closed-network_002c-approximate-analysis-200"></a>
Analyze closed, multiclass queueing networks with K service
centers and C customer classes using the approximate Mean
Value Analysys (MVA) algorithm.
@@ -3624,12 +3640,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-200"></a>
+ <p><a name="index-Bard_002c-Y_002e-201"></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-201"></a>
+ <p><a name="index-Schweitzer_002c-P_002e-202"></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>,
@@ -3640,7 +3656,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-202"></a><a name="index-Zahorjan_002c-J_002e-203"></a><a name="index-Graham_002c-G_002e-S_002e-204"></a><a name="index-Sevcik_002c-K_002e-C_002e-205"></a>
+ <p><a name="index-Lazowska_002c-E_002e-D_002e-203"></a><a name="index-Zahorjan_002c-J_002e-204"></a><a name="index-Graham_002c-G_002e-S_002e-205"></a><a name="index-Sevcik_002c-K_002e-C_002e-206"></a>
<h4 class="subsection">6.3.5 Mixed Networks</h4>
@@ -3648,9 +3664,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-206"></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-207"></a></var><br>
<blockquote>
- <p><a name="index-Mean-Value-Analysys-_0028MVA_0029-207"></a><a name="index-mixed-network-208"></a>
+ <p><a name="index-Mean-Value-Analysys-_0028MVA_0029-208"></a><a name="index-mixed-network-209"></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
@@ -3741,14 +3757,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-209"></a><a name="index-Zahorjan_002c-J_002e-210"></a><a name="index-Graham_002c-G_002e-S_002e-211"></a><a name="index-Sevcik_002c-K_002e-C_002e-212"></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>
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-213"></a>
+ <p><a name="index-Schwetman_002c-H_002e-214"></a>
<div class="node">
<a name="Algorithms-for-non-Product-form-QNs"></a>
@@ -3767,9 +3783,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-214"></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-215"></a></var><br>
<blockquote>
- <p><a name="index-queueing-network-with-blocking-215"></a><a name="index-blocking-queueing-network-216"></a><a name="index-closed-network_002c-finite-capacity-217"></a>
+ <p><a name="index-queueing-network-with-blocking-216"></a><a name="index-blocking-queueing-network-217"></a><a name="index-closed-network_002c-finite-capacity-218"></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.
@@ -3824,16 +3840,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-218"></a>
+ <p><a name="index-Akyildiz_002c-I_002e-F_002e-219"></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-219"></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-220"></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-221"></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-222"></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-220"></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-221"></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-222"></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-223"></a></var><br>
<blockquote>
- <p><a name="index-closed-network_002c-multiple-classes-223"></a><a name="index-closed-network_002c-finite-capacity-224"></a><a name="index-blocking-queueing-network-225"></a><a name="index-RS-blocking-226"></a>
+ <p><a name="index-closed-network_002c-multiple-classes-224"></a><a name="index-closed-network_002c-finite-capacity-225"></a><a name="index-blocking-queueing-network-226"></a><a name="index-RS-blocking-227"></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
@@ -3943,9 +3959,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-227"></a></var><br>
+— Function File: [<var>Xu</var>, <var>Rl</var>] = <b>qnopenab</b> (<var>lambda, D</var>)<var><a name="index-qnopenab-228"></a></var><br>
<blockquote>
- <p><a name="index-bounds_002c-asymptotic-228"></a><a name="index-open-network-229"></a>
+ <p><a name="index-bounds_002c-asymptotic-229"></a><a name="index-open-network-230"></a>
Compute Asymptotic Bounds for single-class, open Queueing Networks
with K service centers.
@@ -3985,14 +4001,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-230"></a><a name="index-Zahorjan_002c-J_002e-231"></a><a name="index-Graham_002c-G_002e-S_002e-232"></a><a name="index-Sevcik_002c-K_002e-C_002e-233"></a>
+ <p><a name="index-Lazowska_002c-E_002e-D_002e-231"></a><a name="index-Zahorjan_002c-J_002e-232"></a><a name="index-Graham_002c-G_002e-S_002e-233"></a><a name="index-Sevcik_002c-K_002e-C_002e-234"></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-234"></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-235"></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-235"></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-236"></a></var><br>
<blockquote>
- <p><a name="index-bounds_002c-asymptotic-236"></a><a name="index-closed-network-237"></a>
+ <p><a name="index-bounds_002c-asymptotic-237"></a><a name="index-closed-network-238"></a>
Compute Asymptotic Bounds for single-class, closed Queueing Networks
wit...
[truncated message content] |
|
From: <mma...@us...> - 2012-03-10 20:27:32
|
Revision: 9811
http://octave.svn.sourceforge.net/octave/?rev=9811&view=rev
Author: mmarzolla
Date: 2012-03-10 20:27:25 +0000 (Sat, 10 Mar 2012)
Log Message:
-----------
New signature for ctmc_exps() and ctmc_taexps()
Modified Paths:
--------------
trunk/octave-forge/main/queueing/ChangeLog
trunk/octave-forge/main/queueing/NEWS
trunk/octave-forge/main/queueing/doc/queueing.html
trunk/octave-forge/main/queueing/doc/queueing.pdf
trunk/octave-forge/main/queueing/inst/ctmc_exps.m
trunk/octave-forge/main/queueing/inst/ctmc_mtta.m
trunk/octave-forge/main/queueing/inst/ctmc_taexps.m
Modified: trunk/octave-forge/main/queueing/ChangeLog
===================================================================
--- trunk/octave-forge/main/queueing/ChangeLog 2012-03-10 19:46:27 UTC (rev 9810)
+++ trunk/octave-forge/main/queueing/ChangeLog 2012-03-10 20:27:25 UTC (rev 9811)
@@ -6,6 +6,9 @@
* Fixed bug in ctmc_exps() (wrong initial value in call to lsode)
* Function 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
+ argument; the old syntax is still supported, but may be deprecated
+ in future releases.
* Miscellaneous fixes/improvements to the documentation
2012-02-04 Moreno Marzolla <mar...@cs...>
Modified: trunk/octave-forge/main/queueing/NEWS
===================================================================
--- trunk/octave-forge/main/queueing/NEWS 2012-03-10 19:46:27 UTC (rev 9810)
+++ trunk/octave-forge/main/queueing/NEWS 2012-03-10 20:27:25 UTC (rev 9811)
@@ -3,6 +3,10 @@
** Function ctmc_exps() can now compute the expected sojourn time
until absorption for absorming CTMC
+** Functions ctmc_exps() and ctmc_taexps() now accept a scalar as
+ the second argument (time). The old syntax is still supported,
+ but may be deprecated in the future.
+
Summary of important user-visible changes for queueing-1.0.0
------------------------------------------------------------------------------
Modified: trunk/octave-forge/main/queueing/doc/queueing.html
===================================================================
--- trunk/octave-forge/main/queueing/doc/queueing.html 2012-03-10 19:46:27 UTC (rev 9810)
+++ trunk/octave-forge/main/queueing/doc/queueing.html 2012-03-10 20:27:25 UTC (rev 9811)
@@ -1100,15 +1100,15 @@
<p><a name="doc_002dctmc_005fexps"></a>
<div class="defun">
-— Function File: <var>L</var> = <b>ctmc_exps</b> (<var>Q, tt, p </var>)<var><a name="index-ctmc_005fexps-20"></a></var><br>
+— 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>
<blockquote>
<p><a name="index-Markov-chain_002c-continuous-time-22"></a><a name="index-Expected-sojourn-time-23"></a>
-With three arguments, compute the expected time <var>L</var><code>(t,j)</code>
-spent in each state j during the time interval
-<code>[0,</code><var>tt</var><code>(t))</code>, assuming that at time 0 the state occupancy
-probability was <var>p</var>. With two arguments, compute the expected
-time <var>L</var><code>(j)</code> spent in each state j until absorption.
+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
+at time 0 are <var>p</var>. With two arguments, compute the expected time
+<var>L</var><code>(i)</code> spent in each state i until absorption.
<p><strong>INPUTS</strong>
@@ -1118,10 +1118,7 @@
≤ i \neq j ≤ N. The matrix <var>Q</var> must also satisfy the
condition \sum_j=1^N Q_ij = 0.
- <br><dt><var>tt</var><dd>This parameter is a vector used for numerical integration. The first
-element <var>tt</var><code>(1)</code> must be 0, and the last element
-<var>tt</var><code>(end)</code> must be the upper bound of the interval
-[0,t) of interest (<var>tt</var><code>(end) == t</code>).
+ <br><dt><var>t</var><dd>Time
<br><dt><var>p</var><dd>Initial occupancy probability vector; <var>p</var><code>(i)</code> is the
probability the system is in state i at time 0, i = 1,
@@ -1132,14 +1129,12 @@
<p><strong>OUTPUTS</strong>
<dl>
-<dt><var>L</var><dd>If this function is called with three arguments, <var>L</var> is a matrix
-of size <code>[length(</code><var>tt</var><code>), N]</code> where <var>L</var><code>(t,j)</code> is the
-expected time spent in state j during the interval
-<code>[0,</code><var>tt</var><code>(t)]</code>. If this function is called with two
-arguments, <var>L</var> is a vector with N elements where
-<var>L</var><code>(j)</code> is the expected time spent in state j until
-absorption, if j is a transient state. If j
-is an absorbing state, <var>L</var><code>(j) = 0</code>.
+<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
+[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
+absorption (if i is a transient state), or zero
+(if <var>i</var> is an absorbing state).
</dl>
@@ -1185,13 +1180,13 @@
<p><a name="doc_002dctmc_005ftaexps"></a>
<div class="defun">
-— Function File: <var>M</var> = <b>ctmc_taexps</b> (<var>Q, tt, 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-24"></a></var><br>
<blockquote>
<p><a name="index-Markov-chain_002c-continuous-time-25"></a><a name="index-Time_002dalveraged-sojourn-time-26"></a>
-Compute the <em>time-averaged sojourn time</em> <var>M</var><code>(t,j)</code>,
-defined as the fraction of the time interval <code>[0,</code><var>tt</var><code>(t))</code> spent in
-state j, assuming that at time 0 the state occupancy
-probability was <var>p</var>.
+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
+time 0 are <var>p</var>.
<p><strong>INPUTS</strong>
@@ -1199,15 +1194,9 @@
<dt><var>Q</var><dd>Infinitesimal generator matrix. <var>Q</var><code>(i,j)</code> is the transition
rate from state i to state j,
1 ≤ i \neq j ≤ N. The
-matrix <var>Q</var> must also satisfy the condition <code>sum(</code><var>Q</var><code>,2) == 0</code>
+matrix <var>Q</var> must also satisfy the condition \sum_j=1^N Q_ij = 0
- <br><dt><var>tt</var><dd>This parameter is a vector used for numerical integration of the
-sujourn time. The first element <var>tt</var><code>(1)</code> must be slightly
-larger than 0, and the
-last element <var>tt</var><code>(end)</code> must be the upper limit of the
-interval [0,t) of interest (<var>tt</var><code>(end) == t</code>).
-This vector is used by the ODE solver to compute the solution
-<var>M</var>.
+ <br><dt><var>t</var><dd>Time
<br><dt><var>p</var><dd><var>p</var><code>(i)</code> is the probability that, at time 0, the system was in
state i, for all i = 1, <small class="dots">...</small>, N
@@ -1217,10 +1206,9 @@
<p><strong>OUTPUTS</strong>
<dl>
-<dt><var>M</var><dd><var>M</var><code>(t,j)</code> is the expected fraction of time spent in state
-j during the interval [0,tt(t)) assuming that the state
-occupancy probability at time zero was <var>p</var>. <code>1 ≤
-</code><var>t</var><code> ≤ length(</code><var>tt</var><code>)</code>
+<dt><var>M</var><dd><var>M</var><code>(i)</code> is the expected fraction of time spent in state
+i during the interval [0,t] assuming that the state
+occupancy probability at time zero is <var>p</var>.
</dl>
@@ -1279,7 +1267,7 @@
<p><a name="index-Markov-chain_002c-continuous-time-28"></a><a name="index-Mean-time-to-absorption-29"></a>
Compute the Mean-Time to Absorption (MTTA) of the CTMC described by
the infinitesimal generator matrix <var>Q</var>, starting from initial
-occupancy probability <var>p</var>. If there are no absorbing states, this
+occupancy probabilities <var>p</var>. If there are no absorbing states, this
function fails with an error.
<p><strong>INPUTS</strong>
Modified: trunk/octave-forge/main/queueing/doc/queueing.pdf
===================================================================
(Binary files differ)
Modified: trunk/octave-forge/main/queueing/inst/ctmc_exps.m
===================================================================
--- trunk/octave-forge/main/queueing/inst/ctmc_exps.m 2012-03-10 19:46:27 UTC (rev 9810)
+++ trunk/octave-forge/main/queueing/inst/ctmc_exps.m 2012-03-10 20:27:25 UTC (rev 9811)
@@ -17,17 +17,17 @@
## -*- texinfo -*-
##
-## @deftypefn {Function File} {@var{L} =} ctmc_exps (@var{Q}, @var{tt}, @var{p} )
+## @deftypefn {Function File} {@var{L} =} ctmc_exps (@var{Q}, @var{t}, @var{p} )
## @deftypefnx {Function File} {@var{L} =} ctmc_exps (@var{Q}, @var{p})
##
## @cindex Markov chain, continuous time
## @cindex Expected sojourn time
##
-## With three arguments, compute the expected time @code{@var{L}(t,j)}
-## spent in each state @math{j} during the time interval
-## @code{[0,@var{tt}(t))}, assuming that at time 0 the state occupancy
-## probability was @var{p}. With two arguments, compute the expected
-## time @code{@var{L}(j)} spent in each state @math{j} until absorption.
+## With three arguments, compute the expected times @code{@var{L}(i)}
+## spent in each state @math{i} during the time interval
+## @math{[0,t]}, assuming that the state occupancy probabilities
+## at time 0 are @var{p}. With two arguments, compute the expected time
+## @code{@var{L}(i)} spent in each state @math{i} until absorption.
##
## @strong{INPUTS}
##
@@ -39,11 +39,8 @@
## @leq{} i \neq j @leq{} N}. The matrix @var{Q} must also satisfy the
## condition @math{\sum_{j=1}^N Q_{ij} = 0}.
##
-## @item tt
-## This parameter is a vector used for numerical integration. The first
-## element @code{@var{tt}(1)} must be 0, and the last element
-## @code{@var{tt}(end)} must be the upper bound of the interval
-## @math{[0,t)} of interest (@code{@var{tt}(end) == @math{t}}).
+## @item t
+## Time
##
## @item p
## Initial occupancy probability vector; @code{@var{p}(i)} is the
@@ -57,14 +54,12 @@
## @table @var
##
## @item L
-## If this function is called with three arguments, @var{L} is a matrix
-## of size @code{[length(@var{tt}), N]} where @code{@var{L}(t,j)} is the
-## expected time spent in state @math{j} during the interval
-## @code{[0,@var{tt}(t)]}. If this function is called with two
-## arguments, @var{L} is a vector with @math{N} elements where
-## @code{@var{L}(j)} is the expected time spent in state @math{j} until
-## absorption, if @math{j} is a transient state. If @math{j}
-## is an absorbing state, @code{@var{L}(j) = 0}.
+## If this function is called with three arguments, @code{@var{L}(i)} is
+## the expected time spent in state @math{j} during the interval
+## @math{[0,t]}. If this function is called with two arguments
+## @code{@var{L}(i)} is the expected time spent in state @math{i} until
+## absorption (if @math{i} is a transient state), or zero
+## (if @var{i} is an absorbing state).
##
## @end table
##
@@ -85,12 +80,12 @@
usage( "Q must be a square matrix" );
( norm( sum(Q,2), "inf" ) < epsilon ) || \
- error( "Q is not an infinitesimal generator matrix" );
+ usage( "Q is not an infinitesimal generator matrix" );
if ( nargin == 2 )
p = varargin{1};
else
- tt = varargin{1};
+ t = varargin{1};
p = varargin{2};
endif
@@ -98,15 +93,27 @@
usage( "p must be a probability vector" );
if ( nargin == 3 )
- ( isvector(tt) && abs(tt(1)) < epsilon ) || \
- usage( "tt must be a vector, and tt(1) must be 0.0" );
- tt = tt(:)'; # make tt a row vector
- p = p(:)'; # make p a row vector
- ff = @(x,t) (x(:)'*Q+p);
- fj = @(x,t) (Q);
- L = lsode( {ff, fj}, zeros(size(p)), tt );
+ if ( isscalar(t) )
+ (t >= 0 ) || \
+ usage( "t must be >= 0" );
+ ## F(x) are the transient state occupancy probabilities at time x.
+ ## It is known that F(x) = p*expm(Q*x) (see function ctmc()).
+ F = @(x) (p*expm(Q*x));
+ L = quadv(F,0,t);
+ else
+ ## FIXME: deprecate this?
+ ( isvector(t) && abs(t(1)) < epsilon ) || \
+ usage( "t must be a vector, and t(1) must be 0.0" );
+ t = t(:)'; # make tt a row vector
+ p = p(:)'; # make p a row vector
+ ff = @(x,t) (x(:)'*Q+p);
+ fj = @(x,t) (Q);
+ L = lsode( {ff, fj}, zeros(size(p)), t );
+ endif
else
#{
+ ## This code is left for information only
+
## F(t) are the transient state occupancy probabilities at time t.
## It is known that F(t) = p*expm(Q*t) (see function ctmc()).
## The expected times spent in each state until absorption can
@@ -138,6 +145,10 @@
L(nzrows) = LN;
endif
endfunction
+%!test
+%! Q = [-1 1; 1 -1];
+%! L = ctmc_exps(Q,10,[1 0]);
+%! L = ctmc_exps(Q,linspace(0,10,100),[1 0]);
%!demo
%! lambda = 0.5;
@@ -146,18 +157,16 @@
%! death = zeros(1,N-1);
%! Q = diag(birth,1)+diag(death,-1);
%! Q -= diag(sum(Q,2));
-%! tt = linspace(0,10,100);
+%! t = linspace(0,10,100);
%! p0 = zeros(1,N); p0(1)=1;
-%! L = ctmc_exps(Q,tt,p0);
-%! #L2 = 0*L;
-%! #for i=1:length(tt)
-%! # L2(i,:) = quadv( @(t) (p0*expm(Q*t)) , 0, tt(i) );
-%! #endfor
-%! plot( tt, L(:,1), ";State 1;", "linewidth", 2, \
-%! # tt, L2(:,1), "+;State 1 (quadv);", "markersize", 8, \
-%! tt, L(:,2), ";State 2;", "linewidth", 2, \
-%! tt, L(:,3), ";State 3;", "linewidth", 2, \
-%! tt, L(:,4), ";State 4 (absorbing);", "linewidth", 2);
+%! L = zeros(length(t),N);
+%! for i=1:length(t)
+%! L(i,:) = ctmc_exps(Q,t(i),p0);
+%! endfor
+%! plot( t, L(:,1), ";State 1;", "linewidth", 2, \
+%! t, L(:,2), ";State 2;", "linewidth", 2, \
+%! t, L(:,3), ";State 3;", "linewidth", 2, \
+%! t, L(:,4), ";State 4;", "linewidth", 2 );
%! legend("location","northwest");
%! xlabel("Time");
%! ylabel("Expected sojourn time");
Modified: trunk/octave-forge/main/queueing/inst/ctmc_mtta.m
===================================================================
--- trunk/octave-forge/main/queueing/inst/ctmc_mtta.m 2012-03-10 19:46:27 UTC (rev 9810)
+++ trunk/octave-forge/main/queueing/inst/ctmc_mtta.m 2012-03-10 20:27:25 UTC (rev 9811)
@@ -24,7 +24,7 @@
##
## Compute the Mean-Time to Absorption (MTTA) of the CTMC described by
## the infinitesimal generator matrix @var{Q}, starting from initial
-## occupancy probability @var{p}. If there are no absorbing states, this
+## occupancy probabilities @var{p}. If there are no absorbing states, this
## function fails with an error.
##
## @strong{INPUTS}
@@ -71,8 +71,8 @@
N = rows(Q);
- all( abs( sum(Q,2) ) < epsilon ) || \
- usage( "Q is not an infinitesimal generator matrix" );
+ ( norm( sum(Q,2), "inf" ) < epsilon ) || \
+ usage( "Q must be an infinitesimal generator matrix" );
( isvector(p) && length(p) == N && all(p>=0) && abs(sum(p)-1.0)<epsilon ) || \
usage( "p must be a probability vector" );
@@ -90,7 +90,7 @@
%!test
%! Q = [0 1 0; 1 0 1; 0 0 0 ];
-%! fail( "ctmc_mtta(Q,[1 0 0])", "not an infinitesimal");
+%! fail( "ctmc_mtta(Q,[1 0 0])", "must be an infinitesimal");
%!test
%! Q = [ 0 0.1 0 0; \
Modified: trunk/octave-forge/main/queueing/inst/ctmc_taexps.m
===================================================================
--- trunk/octave-forge/main/queueing/inst/ctmc_taexps.m 2012-03-10 19:46:27 UTC (rev 9810)
+++ trunk/octave-forge/main/queueing/inst/ctmc_taexps.m 2012-03-10 20:27:25 UTC (rev 9811)
@@ -17,15 +17,15 @@
## -*- texinfo -*-
##
-## @deftypefn {Function File} {@var{M} =} ctmc_taexps (@var{Q}, @var{tt}, @var{p})
+## @deftypefn {Function File} {@var{M} =} ctmc_taexps (@var{Q}, @var{t}, @var{p})
##
## @cindex Markov chain, continuous time
## @cindex Time-alveraged sojourn time
##
-## Compute the @emph{time-averaged sojourn time} @code{@var{M}(t,j)},
-## defined as the fraction of the time interval @code{[0,@var{tt}(t))} spent in
-## state @math{j}, assuming that at time 0 the state occupancy
-## probability was @var{p}.
+## Compute the @emph{time-averaged sojourn time} @code{@var{M}(i)},
+## defined as the fraction of the time interval @math{[0,t]} spent in
+## state @math{i}, assuming that the state occupancy probabilities at
+## time 0 are @var{p}.
##
## @strong{INPUTS}
##
@@ -35,16 +35,10 @@
## Infinitesimal generator matrix. @code{@var{Q}(i,j)} is the transition
## rate from state @math{i} to state @math{j},
## @math{1 @leq{} i \neq j @leq{} N}. The
-## matrix @var{Q} must also satisfy the condition @code{sum(@var{Q},2) == 0}
+## matrix @var{Q} must also satisfy the condition @math{\sum_{j=1}^N Q_{ij} = 0}
##
-## @item tt
-## This parameter is a vector used for numerical integration of the
-## sujourn time. The first element @code{@var{tt}(1)} must be slightly
-## larger than 0, and the
-## last element @code{@var{tt}(end)} must be the upper limit of the
-## interval @math{[0,t)} of interest (@code{@var{tt}(end) == @math{t}}).
-## This vector is used by the ODE solver to compute the solution
-## @var{M}.
+## @item t
+## Time
##
## @item p
## @code{@var{p}(i)} is the probability that, at time 0, the system was in
@@ -57,10 +51,9 @@
## @table @var
##
## @item M
-## @code{@var{M}(t,j)} is the expected fraction of time spent in state
-## @math{j} during the interval @math{[0,tt(t))} assuming that the state
-## occupancy probability at time zero was @var{p}. @code{1 @leq{}
-## @var{t} @leq{} length(@var{tt})}
+## @code{@var{M}(i)} is the expected fraction of time spent in state
+## @math{i} during the interval @math{[0,t]} assuming that the state
+## occupancy probability at time zero is @var{p}.
##
## @end table
##
@@ -87,11 +80,19 @@
( isvector(p) && length(p) == N && all(p>=0) && abs(sum(p)-1.0)<epsilon ) || \
usage( "p must be a probability vector" );
- t = t(:)'; # make t a row vector
- p = p(:)'; # make p a row vector
- ff = @(x,t) (((x')*(Q-eye(N)/t).+p/t)');
- fj = @(x,t) (Q-eye(N)/t);
- M = lsode( {ff, fj}, zeros(size(p)), t );
+ if ( isscalar(t) )
+ (t >= 0) || \
+ usage( "t must be >= 0" );
+ F = @(x) (p*expm(Q*x));
+ M = quadv(F,0,t) / t;
+ else
+ ## FIXME: deprecate this?
+ t = t(:)'; # make t a row vector
+ p = p(:)'; # make p a row vector
+ ff = @(x,t) (((x')*(Q-eye(N)/t).+p/t)');
+ fj = @(x,t) (Q-eye(N)/t);
+ M = lsode( {ff, fj}, zeros(size(p)), t );
+ endif
endfunction
%!demo
@@ -101,9 +102,12 @@
%! death = zeros(1,N-1);
%! Q = diag(birth,1)+diag(death,-1);
%! Q -= diag(sum(Q,2));
-%! t = linspace(1e-3,50,500);
+%! t = linspace(1e-5,30,100);
%! p = zeros(1,N); p(1)=1;
-%! M = ctmc_taexps(Q,t,p);
+%! M = zeros(length(t),N);
+%! for i=1:length(t)
+%! M(i,:) = ctmc_taexps(Q,t(i),p);
+%! endfor
%! plot(t, M(:,1), ";State 1;", "linewidth", 2, \
%! t, M(:,2), ";State 2;", "linewidth", 2, \
%! t, M(:,3), ";State 3;", "linewidth", 2, \
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
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] |
|
From: <mma...@us...> - 2012-09-08 17:17:02
|
Revision: 10985
http://octave.svn.sourceforge.net/octave/?rev=10985&view=rev
Author: mmarzolla
Date: 2012-09-08 17:16:55 +0000 (Sat, 08 Sep 2012)
Log Message:
-----------
Prepare for release
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
Modified: trunk/octave-forge/main/queueing/ChangeLog
===================================================================
--- trunk/octave-forge/main/queueing/ChangeLog 2012-09-08 17:12:40 UTC (rev 10984)
+++ trunk/octave-forge/main/queueing/ChangeLog 2012-09-08 17:16:55 UTC (rev 10985)
@@ -1,3 +1,8 @@
+2012-09-08 Moreno Marzolla <mar...@cs...>
+
+ * Version 1.1.1 released
+ * Increased tolerance in tests for dtmc_fpt and dtmc_mtta
+
2012-04-05 Moreno Marzolla <mar...@cs...>
* Version 1.1.0 released
Modified: trunk/octave-forge/main/queueing/DESCRIPTION
===================================================================
--- trunk/octave-forge/main/queueing/DESCRIPTION 2012-09-08 17:12:40 UTC (rev 10984)
+++ trunk/octave-forge/main/queueing/DESCRIPTION 2012-09-08 17:16:55 UTC (rev 10985)
@@ -1,6 +1,6 @@
Name: queueing
-Version: 1.1.0
-Date: 2012-04-05
+Version: 1.1.1
+Date: 2012-09-08
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-09-08 17:12:40 UTC (rev 10984)
+++ trunk/octave-forge/main/queueing/Makefile 2012-09-08 17:16:55 UTC (rev 10985)
@@ -1,5 +1,5 @@
-VERSIONNUM=1.1.0
-VERSIONDATE="2012-04-05"
+VERSIONNUM=1.1.1
+VERSIONDATE="2012-09-08"
PROGNAME=queueing
DISTNAME=$(PROGNAME)-$(VERSIONNUM)
Modified: trunk/octave-forge/main/queueing/NEWS
===================================================================
--- trunk/octave-forge/main/queueing/NEWS 2012-09-08 17:12:40 UTC (rev 10984)
+++ trunk/octave-forge/main/queueing/NEWS 2012-09-08 17:16:55 UTC (rev 10985)
@@ -1,18 +1,6 @@
-Summary of important user-visible changes for queueing-1.1.0
+Summary of important user-visible changes for queueing-1.1.1
------------------------------------------------------------------------------
-** Function ctmc_exps() can now compute the expected sojourn time
- until absorption for absorbing CTMC
+** Increased tolerance in tests for dtmc_fpt and dtmc_mtta to avoid
+ spurious failures on some platforms.
-** Functions ctmc_exps() and ctmc_taexps() now accept a scalar as
- the second argument (time).
-
-** Function ctmc_bd() now returns the infinitesimal generator matrix Q
- of the birth-death process with given rates, not the steady-state
- solution.
-
-** The following new functions have been added: dtmc_bd(), dtmc_mtta(),
- ctmc_check_Q(), dtmc_exps(), dtmc_taexps()
-
-** The following deprecated functions have been removed: ctmc_bd_solve(),
- ctmc_solve(), dtmc_solve()
Modified: trunk/octave-forge/main/queueing/doc/INSTALL
===================================================================
--- trunk/octave-forge/main/queueing/doc/INSTALL 2012-09-08 17:12:40 UTC (rev 10984)
+++ trunk/octave-forge/main/queueing/doc/INSTALL 2012-09-08 17:16:55 UTC (rev 10985)
@@ -16,7 +16,7 @@
1.1 Installation through Octave package management system
=========================================================
-The most recent version of `queueing' is 1.1.0 and can be downloaded
+The most recent version of `queueing' is 1.1.1 and can be downloaded
from Octave-Forge
`http://octave.sourceforge.net/queueing/'
@@ -38,13 +38,13 @@
octave:1>pkg list queueing
Package Name | Version | Installation directory
--------------+---------+-----------------------
- queueing *| 1.1.0 | /home/moreno/octave/queueing-1.1.0
+ queueing *| 1.1.1 | /home/moreno/octave/queueing-1.1.1
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.1.0.tar.gz_
+ octave:1> pkg install _queueing-1.1.1.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,
@@ -53,7 +53,7 @@
If you do not have root access, you can do a local install using:
- octave:1> pkg install -local queueing-1.1.0.tar.gz
+ octave:1> pkg install -local queueing-1.1.1.tar.gz
This will install `queueing' within your home directory, and the
package will be available to your user only.
@@ -72,8 +72,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.1.0.tar.gz
- cd queueing-1.1.0/queueing/
+ tar xvfz queueing-1.1.1.tar.gz
+ cd queueing-1.1.1/queueing/
Copy all `.m' files from the `inst/' directory to some target
location. Then, start Octave with the `-p' option to add the target
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <mma...@us...> - 2012-09-08 19:57:01
|
Revision: 10986
http://octave.svn.sourceforge.net/octave/?rev=10986&view=rev
Author: mmarzolla
Date: 2012-09-08 19:56:55 +0000 (Sat, 08 Sep 2012)
Log Message:
-----------
Misc fixse for release 1.1.1
Modified Paths:
--------------
trunk/octave-forge/main/queueing/ChangeLog
trunk/octave-forge/main/queueing/DESCRIPTION
trunk/octave-forge/main/queueing/DESCRIPTION.in
trunk/octave-forge/main/queueing/NEWS
trunk/octave-forge/main/queueing/doc/INSTALL
trunk/octave-forge/main/queueing/doc/installation.txi
Modified: trunk/octave-forge/main/queueing/ChangeLog
===================================================================
--- trunk/octave-forge/main/queueing/ChangeLog 2012-09-08 17:16:55 UTC (rev 10985)
+++ trunk/octave-forge/main/queueing/ChangeLog 2012-09-08 19:56:55 UTC (rev 10986)
@@ -2,6 +2,7 @@
* Version 1.1.1 released
* Increased tolerance in tests for dtmc_fpt and dtmc_mtta
+ * Disabled autoloading of this package on Octave startup
2012-04-05 Moreno Marzolla <mar...@cs...>
Modified: trunk/octave-forge/main/queueing/DESCRIPTION
===================================================================
--- trunk/octave-forge/main/queueing/DESCRIPTION 2012-09-08 17:16:55 UTC (rev 10985)
+++ trunk/octave-forge/main/queueing/DESCRIPTION 2012-09-08 19:56:55 UTC (rev 10986)
@@ -14,6 +14,6 @@
probabilities, mean time to absorption, time-averaged sojourn times).
Categories: Misc
Depends: octave (>= 3.2.3)
-Autoload: yes
-License: GPL version 3 or later
+Autoload: no
+License: GPLv3+
Url: http://www.moreno.marzolla.name/software/queueing/
Modified: trunk/octave-forge/main/queueing/DESCRIPTION.in
===================================================================
--- trunk/octave-forge/main/queueing/DESCRIPTION.in 2012-09-08 17:16:55 UTC (rev 10985)
+++ trunk/octave-forge/main/queueing/DESCRIPTION.in 2012-09-08 19:56:55 UTC (rev 10986)
@@ -14,6 +14,6 @@
probabilities, mean time to absorption, time-averaged sojourn times).
Categories: Misc
Depends: octave (>= 3.2.3)
-Autoload: yes
-License: GPL version 3 or later
+Autoload: no
+License: GPLv3+
Url: http://www.moreno.marzolla.name/software/queueing/
Modified: trunk/octave-forge/main/queueing/NEWS
===================================================================
--- trunk/octave-forge/main/queueing/NEWS 2012-09-08 17:16:55 UTC (rev 10985)
+++ trunk/octave-forge/main/queueing/NEWS 2012-09-08 19:56:55 UTC (rev 10986)
@@ -1,6 +1,32 @@
Summary of important user-visible changes for queueing-1.1.1
------------------------------------------------------------------------------
+** queueing-1.1.1 is a bug fix release
+
** Increased tolerance in tests for dtmc_fpt and dtmc_mtta to avoid
- spurious failures on some platforms.
+ spurious failures on some platforms
+** Set "Autoload: no" in the DESCRIPTION file. This means that this
+ package is no longer automatically loaded on Octave startup. To use
+ the queueing package you need to issue the command "pkg load
+ queueing" at the Octave prompt.
+
+
+Summary of important user-visible changes for queueing-1.1.0
+------------------------------------------------------------------------------
+
+** Function ctmc_exps() can now compute the expected sojourn time
+ until absorption for absorbing CTMC
+
+** Functions ctmc_exps() and ctmc_taexps() now accept a scalar as
+ the second argument (time).
+
+** Function ctmc_bd() now returns the infinitesimal generator matrix Q
+ of the birth-death process with given rates, not the steady-state
+ solution.
+
+** The following new functions have been added: dtmc_bd(), dtmc_mtta(),
+ ctmc_check_Q(), dtmc_exps(), dtmc_taexps()
+
+** The following deprecated functions have been removed: ctmc_bd_solve(),
+ ctmc_solve(), dtmc_solve()
Modified: trunk/octave-forge/main/queueing/doc/INSTALL
===================================================================
--- trunk/octave-forge/main/queueing/doc/INSTALL 2012-09-08 17:16:55 UTC (rev 10985)
+++ trunk/octave-forge/main/queueing/doc/INSTALL 2012-09-08 19:56:55 UTC (rev 10986)
@@ -38,8 +38,15 @@
octave:1>pkg list queueing
Package Name | Version | Installation directory
--------------+---------+-----------------------
- queueing *| 1.1.1 | /home/moreno/octave/queueing-1.1.1
+ queueing | 1.1.1 | /home/moreno/octave/queueing-1.1.1
+ Note: Starting from version 1.1.1, `queueing' is no longer
+ automatically loaded on startup. To load the package you need to
+ issue the command `pkg load queueing' at the Octave prompt. To
+ automatically load `queueing' each time Octave starts, you can add
+ the command above to the startup script (`.octaverc' on Unix
+ systems).
+
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:
Modified: trunk/octave-forge/main/queueing/doc/installation.txi
===================================================================
--- trunk/octave-forge/main/queueing/doc/installation.txi 2012-09-08 17:16:55 UTC (rev 10985)
+++ trunk/octave-forge/main/queueing/doc/installation.txi 2012-09-08 19:56:55 UTC (rev 10986)
@@ -80,9 +80,18 @@
octave:1>@kbd{pkg list queueing}
Package Name | Version | Installation directory
--------------+---------+-----------------------
- queueing *| @value{VERSION} | /home/moreno/octave/queueing-@value{VERSION}
+ queueing | @value{VERSION} | /home/moreno/octave/queueing-@value{VERSION}
@end example
+@quotation Note
+Starting from version 1.1.1, @code{queueing} is no longer
+automatically loaded on startup. To load the package you need to issue
+the command @code{pkg load queueing} at the Octave prompt. To
+automatically load @code{queueing} each time Octave starts, you can
+add the command above to the startup script (@file{.octaverc} on Unix
+systems).
+@end quotation
+
Alternatively, you can first download @code{queueing} from
Octave-Forge; then, to install the package in the system-wide
location issue this command at the Octave prompt:
@@ -107,7 +116,7 @@
@quotation Note
Octave version 3.2.3 as shipped with Ubuntu 10.04 seems to ignore
-@code{-local} and always tries to install the package on the system
+@option{-local} and always tries to install the package on the system
directory.
@end quotation
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <mma...@us...> - 2012-03-11 15:45:22
|
Revision: 9814
http://octave.svn.sourceforge.net/octave/?rev=9814&view=rev
Author: mmarzolla
Date: 2012-03-11 15:45:11 +0000 (Sun, 11 Mar 2012)
Log Message:
-----------
added function ctmc_check_Q()
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/markovchains.txi
trunk/octave-forge/main/queueing/doc/queueing.html
trunk/octave-forge/main/queueing/doc/queueing.pdf
trunk/octave-forge/main/queueing/inst/ctmc.m
trunk/octave-forge/main/queueing/inst/ctmc_exps.m
trunk/octave-forge/main/queueing/inst/ctmc_fpt.m
trunk/octave-forge/main/queueing/inst/ctmc_mtta.m
trunk/octave-forge/main/queueing/inst/ctmc_taexps.m
trunk/octave-forge/main/queueing/inst/dtmc.m
trunk/octave-forge/main/queueing/inst/dtmc_check_P.m
trunk/octave-forge/main/queueing/inst/dtmc_fpt.m
trunk/octave-forge/main/queueing/inst/qnmvablo.m
trunk/octave-forge/main/queueing/inst/qnvisits.m
Added Paths:
-----------
trunk/octave-forge/main/queueing/inst/ctmc_check_Q.m
trunk/octave-forge/main/queueing/inst/dtmc_is_irreducible.m
Modified: trunk/octave-forge/main/queueing/ChangeLog
===================================================================
--- trunk/octave-forge/main/queueing/ChangeLog 2012-03-11 11:20:31 UTC (rev 9813)
+++ trunk/octave-forge/main/queueing/ChangeLog 2012-03-11 15:45:11 UTC (rev 9814)
@@ -1,18 +1,19 @@
-2012-02-XX Moreno Marzolla <mar...@cs...>
+2012-03-XX Moreno Marzolla <mar...@cs...>
* 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 <mar...@cs...>
Modified: trunk/octave-forge/main/queueing/DESCRIPTION
===================================================================
--- trunk/octave-forge/main/queueing/DESCRIPTION 2012-03-11 11:20:31 UTC (rev 9813)
+++ trunk/octave-forge/main/queueing/DESCRIPTION 2012-03-11 15:45:11 UTC (rev 9814)
@@ -1,6 +1,6 @@
Name: queueing
Version: 1.X.0
-Date: 2012-02-XX
+Date: 2012-03-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-11 11:20:31 UTC (rev 9813)
+++ trunk/octave-forge/main/queueing/Makefile 2012-03-11 15:45:11 UTC (rev 9814)
@@ -1,5 +1,5 @@
VERSIONNUM=1.X.0
-VERSIONDATE="2012-02-XX"
+VERSIONDATE="2012-03-XX"
PROGNAME=queueing
DISTNAME=$(PROGNAME)-$(VERSIONNUM)
Modified: trunk/octave-forge/main/queueing/NEWS
===================================================================
--- trunk/octave-forge/main/queueing/NEWS 2012-03-11 11:20:31 UTC (rev 9813)
+++ trunk/octave-forge/main/queueing/NEWS 2012-03-11 15:45:11 UTC (rev 9814)
@@ -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
------------------------------------------------------------------------------
Modified: trunk/octave-forge/main/queueing/doc/markovchains.txi
===================================================================
--- trunk/octave-forge/main/queueing/doc/markovchains.txi 2012-03-11 11:20:31 UTC (rev 9813)
+++ trunk/octave-forge/main/queueing/doc/markovchains.txi 2012-03-11 15:45:11 UTC (rev 9814)
@@ -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)
Modified: trunk/octave-forge/main/queueing/doc/queueing.html
===================================================================
--- trunk/octave-forge/main/queueing/doc/queueing.html 2012-03-11 11:20:31 UTC (rev 9813)
+++ trunk/octave-forge/main/queueing/doc/queueing.html 2012-03-11 15:45:11 UTC (rev 9814)
@@ -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...
[truncated message content] |
|
From: <mma...@us...> - 2012-03-11 16:44:24
|
Revision: 9815
http://octave.svn.sourceforge.net/octave/?rev=9815&view=rev
Author: mmarzolla
Date: 2012-03-11 16:44:18 +0000 (Sun, 11 Mar 2012)
Log Message:
-----------
improvements to the documentation
Modified Paths:
--------------
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/inst/ctmc.m
Modified: trunk/octave-forge/main/queueing/doc/markovchains.txi
===================================================================
--- trunk/octave-forge/main/queueing/doc/markovchains.txi 2012-03-11 15:45:11 UTC (rev 9814)
+++ trunk/octave-forge/main/queueing/doc/markovchains.txi 2012-03-11 16:44:18 UTC (rev 9815)
@@ -60,11 +60,7 @@
The transition probability matrix @math{\bf P} must satisfy the
following two properties: (1) @math{P_{i, j} @geq{} 0} for all
-@math{i, j}, and (2) @math{\sum_{j=1}^N P_{i,j} = 1}. We denote with
-@math{{\bf \pi}(n) = (\pi_1(n), \pi_2(n), @dots{}, \pi_N(n) )} the
-@emph{state occupancy probability vector} at step
-@math{n}. @math{\pi_i(n)} denotes the probability that the system is
-in state @math{i} at step @math{n}.
+@math{i, j}, and (2) @math{\sum_{j=1}^N P_{i,j} = 1}.
@c
@DOCSTRING(dtmc_check_P)
@@ -74,6 +70,11 @@
@c
@subsection State occupancy probabilities
+We denote with @math{{\bf \pi}(n) = (\pi_1(n), \pi_2(n), @dots{},
+\pi_N(n) )} the @emph{state occupancy probability vector} at step
+@math{n}. @math{\pi_i(n)} denotes the probability that the system is
+in state @math{i} at step @math{n}.
+
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
@@ -97,7 +98,8 @@
occupancy probability} @math{{\bf \pi} = \lim_{n \rightarrow +\infty}
{\bf \pi}(n)}, which is independent from the initial state occupancy
@math{{\bf \pi}(0)}. The stationary state occupancy probability vector
-@math{\bf \pi} satisfies @math{{\bf \pi} = {\bf \pi} {\bf P}}.
+@math{\bf \pi} satisfies @math{{\bf \pi} = {\bf \pi} {\bf P}}
+and @math{\sum_{i=1}^N \pi_i = 1}
@c
@DOCSTRING(dtmc)
@@ -148,6 +150,27 @@
@node Continuous-Time Markov Chains
@section Continuous-Time Markov Chains
+A stochastic process @math{@{X(t), t @geq{} 0@}} is a continuous-time
+Markov chain if, for all integers @math{n}, and for any sequence
+@math{t_0, t_1 , \ldots , t_n, t_{n+1}} such that @math{t_0 < t_1 <
+\ldots < t_n < t_{n+1}}, we have
+
+@iftex
+@tex
+$$P(X_{t_{n+1}} = x_{n+1}\ |\ X(t_n) = x_n, X(t_{n-1}) = x_{n-1}, \ldots, X(t_0) = x_0) = P(X(t_{n+1}) = x_{n+1}\ |\ X(t_n) = x_n)$$
+@end tex
+@end iftex
+@ifnottex
+@math{P(X_{n+1} = x_{n+1} | X_n = x_n, X_{n-1} = x_{n-1}, ..., X_0 = x_0) = P(X_{n+1} = x_{n+1} | X_n = x_n)}
+@end ifnottex
+
+A continuous-time Markov chain is defined according to an
+@emph{infinitesimal generator matrix} @math{{\bf Q} = [Q_{i,j}]} such
+that for each @math{i \neq j}, @math{Q_{i, j}} is the transition rate
+from state @math{i} to state @math{j}. The elements @math{Q_{i, i}}
+must be defined in such a way that the infinitesimal generator matrix
+@math{\bf Q} satisfies the property @math{\sum_{j=1}^N Q_{i,j} = 0}.
+
@DOCSTRING(ctmc_check_Q)
@menu
@@ -162,6 +185,37 @@
@node State occupancy probabilities
@subsection State occupancy probabilities
+Similarly to the discrete case, we denote with @math{{\bf \pi}(t) =
+(\pi_1(t), \pi_2(t), @dots{}, \pi_N(t) )} the @emph{state occupancy
+probability vector} at time @math{t}. @math{\pi_i(t)} denotes the
+probability that the system is in state @math{i} at time @math{t @geq{} 0}.
+
+Given the infinitesimal generator matrix @math{\bf Q} and the initial
+state occupancy probability vector @math{{\bf \pi}(0) = (\pi_1(0),
+\pi_2(0), @dots{}, \pi_N(0))}, the state occupancy probability vector
+@math{{\bf \pi}(t)} at time @math{t} can be computed as:
+
+@iftex
+@tex
+$${\bf \pi}(t) = {\bf \pi}(0) \exp( {\bf Q} t )$$
+@end tex
+@end iftex
+@ifnottex
+@example
+@group
+\pi(t) = \pi(0) exp(Qt)
+@end group
+@end example
+@end ifnottex
+
+@noindent where @math{\exp( {\bf Q} t )} is the matrix exponential
+of @math{{\bf Q} t}. Under certain conditions, there exists a
+@emph{stationary state occupancy probability} @math{{\bf \pi} =
+\lim_{t \rightarrow +\infty} {\bf \pi}(t)}, which is independent from
+the initial state occupancy @math{{\bf \pi}(0)}. The stationary state
+occupancy probability vector @math{\bf \pi} satisfies
+@math{{\bf \pi} {\bf Q} = {\bf 0}} and @math{\sum_{i=1}^N \pi_i = 1}.
+
@DOCSTRING(ctmc)
@noindent @strong{EXAMPLE}
@@ -195,7 +249,7 @@
(L_1(t), L_2(t), \ldots L_N(t))} such that @math{L_i(t)} is the
expected sojourn time in state @math{i} during the interval
@math{[0,t)}, assuming that the initial occupancy probability at time
-0 was @math{{\bf \pi}(0)}. Then, @math{{\bf L}(t)} is the solution of
+0 was @math{{\bf \pi}(0)}. @math{{\bf L}(t)} is the solution of
the following differential equation:
@iftex
@@ -213,10 +267,27 @@
@end example
@end ifnottex
-The function @code{ctmc_exps} can be used to compute @math{{\bf
-L}(t)}, by using the @code{lsode} Octave function to solve the above
-linear differential equation.
+Alternatively, @math{{\bf L}(t)} can also be expressed in integral
+form as:
+@iftex
+@tex
+$$ {\bf L}(t) = \int_{u=0}^t {\bf \pi}(u) du$$
+@end tex
+@end iftex
+@ifnottex
+@example
+@group
+ / t
+L(t) = | pi(u) du
+ / u=0
+@end group
+@end example
+@end ifnottex
+
+@noindent where @math{{\bf \pi}(t) = {\bf \pi}(0) \exp({\bf Q}t)} is
+the state occupancy probability at time @math{t}.
+
@DOCSTRING(ctmc_exps)
@noindent @strong{EXAMPLE}
@@ -225,7 +296,7 @@
rate from state @math{i} to state @math{i+1} is @math{\lambda_i = i
\lambda} (@math{i=1, 2, 3}), with @math{\lambda = 0.5}. The following
code computes the expected sojourn time in state @math{i},
-given the initial occupancy probability @math{p_0=(1,0,0,0)}.
+given the initial occupancy probability @math{{\bf \pi}_0=(1,0,0,0)}.
@example
@group
Modified: trunk/octave-forge/main/queueing/doc/queueing.html
===================================================================
--- trunk/octave-forge/main/queueing/doc/queueing.html 2012-03-11 15:45:11 UTC (rev 9814)
+++ trunk/octave-forge/main/queueing/doc/queueing.html 2012-03-11 16:44:18 UTC (rev 9815)
@@ -811,11 +811,7 @@
<p>The transition probability matrix \bf P must satisfy the
following two properties: (1) P_i, j ≥ 0 for all
-i, j, and (2) \sum_j=1^N P_i,j = 1. We denote with
-\bf \pi(n) = (\pi_1(n), \pi_2(n), <small class="dots">...</small>, \pi_N(n) ) the
-<em>state occupancy probability vector</em> at step
-n. \pi_i(n) denotes the probability that the system is
-in state i at step n.
+i, j, and (2) \sum_j=1^N P_i,j = 1.
<p><a name="doc_002ddtmc_005fcheck_005fP"></a>
@@ -832,7 +828,12 @@
<h4 class="subsection">4.1.1 State occupancy probabilities</h4>
-<p>Given the transition probability matrix \bf P and the initial
+<p>We denote with \bf \pi(n) = (\pi_1(n), \pi_2(n), <small class="dots">...</small>,
+\pi_N(n) ) the <em>state occupancy probability vector</em> at step
+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
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
@@ -844,7 +845,8 @@
occupancy probability</em> \bf \pi = \lim_n \rightarrow +\infty
\bf \pi(n), which is independent from the initial state occupancy
\bf \pi(0). The stationary state occupancy probability vector
-\bf \pi satisfies \bf \pi = \bf \pi \bf P.
+\bf \pi satisfies \bf \pi = \bf \pi \bf P
+and \sum_i=1^N \pi_i = 1
<p><a name="doc_002ddtmc"></a>
@@ -1009,8 +1011,22 @@
<h3 class="section">4.2 Continuous-Time Markov Chains</h3>
-<p><a name="doc_002dctmc_005fcheck_005fQ"></a>
+<p>A stochastic process {X(t), t ≥ 0} is a continuous-time
+Markov chain if, for all integers n, and for any sequence
+t_0, t_1 , \ldots , t_n, t_n+1 such that t_0 < t_1 <
+\ldots < t_n < t_n+1, we have
+ <p>P(X_n+1 = x_n+1 | X_n = x_n, X_n-1 = x_n-1, ..., X_0 = x_0) = P(X_n+1 = x_n+1 | X_n = x_n)
+
+ <p>A continuous-time Markov chain is defined according to an
+<em>infinitesimal generator matrix</em> \bf Q = [Q_i,j] such
+that for each i \neq j, Q_i, j is the transition rate
+from state i to state j. The elements Q_i, i
+must be defined in such a way that the infinitesimal generator matrix
+\bf Q satisfies the property \sum_j=1^N Q_i,j = 0.
+
+ <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>
@@ -1041,11 +1057,31 @@
<h4 class="subsection">4.2.1 State occupancy probabilities</h4>
-<p><a name="doc_002dctmc"></a>
+<p>Similarly to the discrete case, we denote with \bf \pi(t) =
+(\pi_1(t), \pi_2(t), <small class="dots">...</small>, \pi_N(t) ) the <em>state occupancy
+probability vector</em> at time t. \pi_i(t) denotes the
+probability that the system is in state i at time t ≥ 0.
+ <p>Given the infinitesimal generator matrix \bf Q and the initial
+state occupancy probability vector \bf \pi(0) = (\pi_1(0),
+\pi_2(0), <small class="dots">...</small>, \pi_N(0)), the state occupancy probability vector
+\bf \pi(t) at time t can be computed as:
+
+<pre class="example"> \pi(t) = \pi(0) exp(Qt)
+</pre>
+ <p class="noindent">where \exp( \bf Q t ) is the matrix exponential
+of \bf Q t. Under certain conditions, there exists a
+<em>stationary state occupancy probability</em> \bf \pi =
+\lim_t \rightarrow +\infty \bf \pi(t), which is independent from
+the initial state occupancy \bf \pi(0). The stationary state
+occupancy probability vector \bf \pi satisfies
+\bf \pi \bf Q = \bf 0 and \sum_i=1^N \pi_i = 1.
+
+ <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-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>
+— Function File: <var>p</var> = <b>ctmc</b> (<var>Q, t. p0</var>)<var><a name="index-ctmc-19"></a></var><br>
<blockquote>
<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
@@ -1080,7 +1116,7 @@
satisfies the equation p\bf Q = 0 and \sum_i=1^N p_i = 1.
If this function is invoked with three arguments, <var>p</var><code>(i)</code>
is the probability that the system is in state i at time <var>t</var>,
-given the initial occupancy probabilities <var>q0</var>.
+given the initial occupancy probabilities <var>p0</var>.
</dl>
@@ -1152,17 +1188,23 @@
(L_1(t), L_2(t), \ldots L_N(t)) such that L_i(t) is the
expected sojourn time in state i during the interval
[0,t), assuming that the initial occupancy probability at time
-0 was \bf \pi(0). Then, \bf L(t) is the solution of
+0 was \bf \pi(0). \bf L(t) is the solution of
the following differential equation:
<pre class="example"> dL
--(t) = L(t) Q + pi(0), L(0) = 0
dt
</pre>
- <p>The function <code>ctmc_exps</code> can be used to compute \bf
-L(t), by using the <code>lsode</code> Octave function to solve the above
-linear differential equation.
+ <p>Alternatively, \bf L(t) can also be expressed in integral
+form as:
+<pre class="example"> / t
+ L(t) = | pi(u) du
+ / u=0
+</pre>
+ <p class="noindent">where \bf \pi(t) = \bf \pi(0) \exp(\bf Qt) is
+the state occupancy probability at time t.
+
<p><a name="doc_002dctmc_005fexps"></a>
<div class="defun">
@@ -1212,7 +1254,7 @@
rate from state i to state i+1 is \lambda_i = i
\lambda (i=1, 2, 3), with \lambda = 0.5. The following
code computes the expected sojourn time in state i,
-given the initial occupancy probability p_0=(1,0,0,0).
+given the initial occupancy probability \bf \pi_0=(1,0,0,0).
<pre class="example"><pre class="verbatim"> lambda = 0.5;
N = 4;
Modified: trunk/octave-forge/main/queueing/doc/queueing.pdf
===================================================================
(Binary files differ)
Modified: trunk/octave-forge/main/queueing/inst/ctmc.m
===================================================================
--- trunk/octave-forge/main/queueing/inst/ctmc.m 2012-03-11 15:45:11 UTC (rev 9814)
+++ trunk/octave-forge/main/queueing/inst/ctmc.m 2012-03-11 16:44:18 UTC (rev 9815)
@@ -18,7 +18,7 @@
## -*- texinfo -*-
##
## @deftypefn {Function File} {@var{p} =} ctmc (@var{Q})
-## @deftypefnx {Function File} {@var{p} =} ctmc (@var{Q}, @var{t}. @var{q0})
+## @deftypefnx {Function File} {@var{p} =} ctmc (@var{Q}, @var{t}. @var{p0})
##
## @cindex Markov chain, continuous time
## @cindex Continuous time Markov chain
@@ -63,7 +63,7 @@
## satisfies the equation @math{p{\bf Q} = 0} and @math{\sum_{i=1}^N p_i = 1}.
## If this function is invoked with three arguments, @code{@var{p}(i)}
## is the probability that the system is in state @math{i} at time @var{t},
-## given the initial occupancy probabilities @var{q0}.
+## given the initial occupancy probabilities @var{p0}.
##
## @end table
##
@@ -72,7 +72,7 @@
## Author: Moreno Marzolla <marzolla(at)cs.unibo.it>
## Web: http://www.moreno.marzolla.name/
-function q = ctmc( Q, t, q0 )
+function q = ctmc( Q, t, p0 )
persistent epsilon = 10*eps;
@@ -91,17 +91,17 @@
endif
if ( nargin > 2 )
- ( isvector(q0) && length(q0) == N && all(q0>=0) && abs(sum(q0)-1.0)<epsilon ) || \
- usage( "q0 must be a probability vector" );
- q0 = q0(:)'; # make q0 a row vector
+ ( isvector(p0) && length(p0) == N && all(p0>=0) && abs(sum(p0)-1.0)<epsilon ) || \
+ usage( "p0 must be a probability vector" );
+ p0 = p0(:)'; # make p0 a row vector
else
- q0 = ones(1,N) / N;
+ p0 = ones(1,N) / N;
endif
if ( nargin == 1 )
q = __ctmc_steady_state( Q );
else
- q = __ctmc_transient(Q, t, q0 );
+ q = __ctmc_transient(Q, t, p0 );
endif
endfunction
@@ -132,8 +132,8 @@
endfunction
## Helper function, compute transient probability
-function q = __ctmc_transient( Q, t, q0 )
- q = q0*expm(Q*t);
+function q = __ctmc_transient( Q, t, p0 )
+ q = p0*expm(Q*t);
endfunction
%!test
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <mma...@us...> - 2012-03-12 10:58:53
|
Revision: 9818
http://octave.svn.sourceforge.net/octave/?rev=9818&view=rev
Author: mmarzolla
Date: 2012-03-12 10:58:39 +0000 (Mon, 12 Mar 2012)
Log Message:
-----------
New function dtmc_mtta() added; removed deprecated functions
Modified Paths:
--------------
trunk/octave-forge/main/queueing/ChangeLog
trunk/octave-forge/main/queueing/NEWS
trunk/octave-forge/main/queueing/doc/markovchains.txi
trunk/octave-forge/main/queueing/doc/queueing.html
trunk/octave-forge/main/queueing/doc/queueing.pdf
Added Paths:
-----------
trunk/octave-forge/main/queueing/inst/dtmc_mtta.m
Removed Paths:
-------------
trunk/octave-forge/main/queueing/inst/ctmc_solve.m
trunk/octave-forge/main/queueing/inst/dtmc_solve.m
Modified: trunk/octave-forge/main/queueing/ChangeLog
===================================================================
--- trunk/octave-forge/main/queueing/ChangeLog 2012-03-11 20:53:31 UTC (rev 9817)
+++ trunk/octave-forge/main/queueing/ChangeLog 2012-03-12 10:58:39 UTC (rev 9818)
@@ -11,9 +11,12 @@
in future releases.
* ctmc_bd() now returns the infinitesimal generator matrix
of the birth-death process, not the steady-state solution.
- * ctmc_bd_solve() has been removed
- * dtmc_bd() has been added
- * ctmc_check_Q() has been added
+ * ctmc_bd_solve() (which was deprecated) has been removed
+ * ctmc_solve() (which was deprecated) has been removed
+ * dtmc_solve() (which was deprecated) has been removed
+ * dtmc_bd() added
+ * ctmc_check_Q() added
+ * dtmc_mtta() added
* Miscellaneous fixes/improvements to the documentation
2012-02-04 Moreno Marzolla <mar...@cs...>
Modified: trunk/octave-forge/main/queueing/NEWS
===================================================================
--- trunk/octave-forge/main/queueing/NEWS 2012-03-11 20:53:31 UTC (rev 9817)
+++ trunk/octave-forge/main/queueing/NEWS 2012-03-12 10:58:39 UTC (rev 9818)
@@ -11,11 +11,12 @@
of the birth-death process with given rates, not the steady-state
solution.
-** New function dtmc_bd() added
+** The following new functions have been added: dtmc_bd(), dtmc_mtta(),
+ ctmc_check_Q()
-** Function ctmc_bd_solve() has been removed
+** The following deprecated functions have been removed: ctmc_bd_solve(),
+ ctmc_solve(), dtmc_solve()
-** New function ctmc_check_Q() added
Summary of important user-visible changes for queueing-1.0.0
------------------------------------------------------------------------------
Modified: trunk/octave-forge/main/queueing/doc/markovchains.txi
===================================================================
--- trunk/octave-forge/main/queueing/doc/markovchains.txi 2012-03-11 20:53:31 UTC (rev 9817)
+++ trunk/octave-forge/main/queueing/doc/markovchains.txi 2012-03-12 10:58:39 UTC (rev 9818)
@@ -145,8 +145,13 @@
@DOCSTRING(dtmc_fpt)
@c
+@subsection Mean Time to Absorption
+
+@DOCSTRING(dtmc_mtta)
+
@c
@c
+@c
@node Continuous-Time Markov Chains
@section Continuous-Time Markov Chains
@@ -178,7 +183,7 @@
* Birth-Death process::
* Expected Sojourn Time::
* Time-Averaged Expected Sojourn Time::
-* Expected Time to Absorption::
+* Mean Time to Absorption::
* First Passage Times::
@end menu
@@ -323,8 +328,8 @@
@c
@c
@c
-@node Expected Time to Absorption
-@subsection Expected Time to Absorption
+@node Mean Time to Absorption
+@subsection Mean Time to Absorption
If we consider a Markov Chain with absorbing states, it is possible to
define the @emph{expected time to absorption} as the expected time
Modified: trunk/octave-forge/main/queueing/doc/queueing.html
===================================================================
--- trunk/octave-forge/main/queueing/doc/queueing.html 2012-03-11 20:53:31 UTC (rev 9817)
+++ trunk/octave-forge/main/queueing/doc/queueing.html 2012-03-12 10:58:39 UTC (rev 9818)
@@ -59,6 +59,7 @@
<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><a href="#Discrete_002dTime-Markov-Chains">4.1.4 Mean Time to Absorption</a>
</li></ul>
<li><a href="#Continuous_002dTime-Markov-Chains">4.2 Continuous-Time Markov Chains</a>
<ul>
@@ -66,7 +67,7 @@
<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="#Mean-Time-to-Absorption">4.2.5 Mean Time to Absorption</a>
<li><a href="#First-Passage-Times">4.2.6 First Passage Times</a>
</li></ul>
</li></ul>
@@ -1000,6 +1001,39 @@
</blockquote></div>
+<h4 class="subsection">4.1.4 Mean Time to Absorption</h4>
+
+<p><a name="doc_002ddtmc_005fmtta"></a>
+
+<div class="defun">
+— Function File: [<var>t</var> <var>B</var>] = <b>dtmc_mtta</b> (<var>P</var>)<var><a name="index-dtmc_005fmtta-16"></a></var><br>
+<blockquote>
+ <p><a name="index-Markov-chain_002c-disctete-time-17"></a><a name="index-Mean-time-to-absorption-18"></a>
+Compute the expected number of steps before absorption for the DTMC
+described by the transition probability matrix <var>P</var>,
+
+ <p><strong>INPUTS</strong>
+
+ <dl>
+<dt><var>P</var><dd>Transition probability matrix .
+
+ </dl>
+
+ <p><strong>OUTPUTS</strong>
+
+ <dl>
+<dt><var>t</var><dd><var>t</var><code>(i)</code> is the expected number of steps before being absorbed,
+starting from state i.
+
+ <br><dt><var>B</var><dd><var>B</var><code>(i,j)</code> is the probability of being absorbed in state
+j, starting from state i. If j is not absorbing,
+<var>B</var><code>(i,j) = 0</code>; if i is absorbing, then
+<var>B</var><code>(i,i) = 1</code>..
+
+ </dl>
+
+ </blockquote></div>
+
<div class="node">
<a name="Continuous-Time-Markov-Chains"></a>
<a name="Continuous_002dTime-Markov-Chains"></a>
@@ -1028,9 +1062,9 @@
<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>
+— Function File: [<var>result</var> <var>err</var>] = <b>ctmc_check_Q</b> (<var>Q</var>)<var><a name="index-ctmc_005fcheck_005fQ-19"></a></var><br>
<blockquote>
- <p><a name="index-Markov-chain_002c-continuous-time-17"></a>
+ <p><a name="index-Markov-chain_002c-continuous-time-20"></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
@@ -1043,7 +1077,7 @@
<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="5" href="#Mean-Time-to-Absorption">Mean Time to Absorption</a>
<li><a accesskey="6" href="#First-Passage-Times">First Passage Times</a>
</ul>
@@ -1080,10 +1114,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-18"></a></var><br>
-— Function File: <var>p</var> = <b>ctmc</b> (<var>Q, t. p0</var>)<var><a name="index-ctmc-19"></a></var><br>
+— Function File: <var>p</var> = <b>ctmc</b> (<var>Q</var>)<var><a name="index-ctmc-21"></a></var><br>
+— Function File: <var>p</var> = <b>ctmc</b> (<var>Q, t. p0</var>)<var><a name="index-ctmc-22"></a></var><br>
<blockquote>
- <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>
+ <p><a name="index-Markov-chain_002c-continuous-time-23"></a><a name="index-Continuous-time-Markov-chain-24"></a><a name="index-Markov-chain_002c-state-occupancy-probabilities-25"></a><a name="index-Stationary-probabilities-26"></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
@@ -1146,9 +1180,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-24"></a></var><br>
+— Function File: <var>Q</var> = <b>ctmc_bd</b> (<var>birth, death</var>)<var><a name="index-ctmc_005fbd-27"></a></var><br>
<blockquote>
- <p><a name="index-Markov-chain_002c-continuous-time-25"></a><a name="index-Birth_002ddeath-process-26"></a>
+ <p><a name="index-Markov-chain_002c-continuous-time-28"></a><a name="index-Birth_002ddeath-process-29"></a>
Returns the N \times N infinitesimal generator matrix Q
for a birth-death process with given rates.
@@ -1208,10 +1242,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-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>
+— Function File: <var>L</var> = <b>ctmc_exps</b> (<var>Q, t, p </var>)<var><a name="index-ctmc_005fexps-30"></a></var><br>
+— Function File: <var>L</var> = <b>ctmc_exps</b> (<var>Q, p</var>)<var><a name="index-ctmc_005fexps-31"></a></var><br>
<blockquote>
- <p><a name="index-Markov-chain_002c-continuous-time-29"></a><a name="index-Expected-sojourn-time-30"></a>
+ <p><a name="index-Markov-chain_002c-continuous-time-32"></a><a name="index-Expected-sojourn-time-33"></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
@@ -1280,7 +1314,7 @@
<a name="Time-Averaged-Expected-Sojourn-Time"></a>
<a name="Time_002dAveraged-Expected-Sojourn-Time"></a>
<p><hr>
-Next: <a rel="next" accesskey="n" href="#Expected-Time-to-Absorption">Expected Time to Absorption</a>,
+Next: <a rel="next" accesskey="n" href="#Mean-Time-to-Absorption">Mean Time to Absorption</a>,
Previous: <a rel="previous" accesskey="p" href="#Expected-Sojourn-Time">Expected Sojourn Time</a>,
Up: <a rel="up" accesskey="u" href="#Continuous_002dTime-Markov-Chains">Continuous-Time Markov Chains</a>
@@ -1291,9 +1325,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-31"></a></var><br>
+— Function File: <var>M</var> = <b>ctmc_taexps</b> (<var>Q, t, p</var>)<var><a name="index-ctmc_005ftaexps-34"></a></var><br>
<blockquote>
- <p><a name="index-Markov-chain_002c-continuous-time-32"></a><a name="index-Time_002dalveraged-sojourn-time-33"></a>
+ <p><a name="index-Markov-chain_002c-continuous-time-35"></a><a name="index-Time_002dalveraged-sojourn-time-36"></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
@@ -1348,7 +1382,7 @@
ylabel("Time-averaged Expected sojourn time");</pre>
</pre>
<div class="node">
-<a name="Expected-Time-to-Absorption"></a>
+<a name="Mean-Time-to-Absorption"></a>
<p><hr>
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>,
@@ -1356,7 +1390,7 @@
</div>
-<h4 class="subsection">4.2.5 Expected Time to Absorption</h4>
+<h4 class="subsection">4.2.5 Mean Time to Absorption</h4>
<p>If we consider a Markov Chain with absorbing states, it is possible to
define the <em>expected time to absorption</em> as the expected time
@@ -1376,9 +1410,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-34"></a></var><br>
+— Function File: <var>t</var> = <b>ctmc_mtta</b> (<var>Q, p</var>)<var><a name="index-ctmc_005fmtta-37"></a></var><br>
<blockquote>
- <p><a name="index-Markov-chain_002c-continuous-time-35"></a><a name="index-Mean-time-to-absorption-36"></a>
+ <p><a name="index-Markov-chain_002c-continuous-time-38"></a><a name="index-Mean-time-to-absorption-39"></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
@@ -1439,11 +1473,11 @@
Performance Evaluation with Computer Science Applications</cite>, Wiley,
1998.
- <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>
+ <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>
<div class="node">
<a name="First-Passage-Times"></a>
<p><hr>
-Previous: <a rel="previous" accesskey="p" href="#Expected-Time-to-Absorption">Expected Time to Absorption</a>,
+Previous: <a rel="previous" accesskey="p" href="#Mean-Time-to-Absorption">Mean Time to Absorption</a>,
Up: <a rel="up" accesskey="u" href="#Continuous_002dTime-Markov-Chains">Continuous-Time Markov Chains</a>
</div>
@@ -1453,10 +1487,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-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>
+— Function File: <var>M</var> = <b>ctmc_fpt</b> (<var>Q</var>)<var><a name="index-ctmc_005ffpt-44"></a></var><br>
+— Function File: <var>m</var> = <b>ctmc_fpt</b> (<var>Q, i, j</var>)<var><a name="index-ctmc_005ffpt-45"></a></var><br>
<blockquote>
- <p><a name="index-Markov-chain_002c-continuous-time-43"></a><a name="index-First-passage-times-44"></a>
+ <p><a name="index-Markov-chain_002c-continuous-time-46"></a><a name="index-First-passage-times-47"></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
@@ -1562,9 +1596,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-45"></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-48"></a></var><br>
<blockquote>
- <p><a name="index-g_t_0040math_007bM_002fM_002f1_007d-system-46"></a>
+ <p><a name="index-g_t_0040math_007bM_002fM_002f1_007d-system-49"></a>
Compute utilization, response time, average number of requests
and throughput for a M/M/1 queue.
@@ -1609,7 +1643,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-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/m -->
<div class="node">
<a name="The-M%2fM%2fm-System"></a>
@@ -1635,10 +1669,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-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>
+— 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-54"></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-55"></a></var><br>
<blockquote>
- <p><a name="index-g_t_0040math_007bM_002fM_002fm_007d-system-53"></a>
+ <p><a name="index-g_t_0040math_007bM_002fM_002fm_007d-system-56"></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.
@@ -1690,7 +1724,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-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/inf -->
<div class="node">
<a name="The-M%2fM%2finf-System"></a>
@@ -1713,7 +1747,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-58"></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-61"></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
@@ -1721,7 +1755,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-59"></a>
+ <p><a name="index-g_t_0040math_007bM_002fM_002f_007dinf-system-62"></a>
<p><strong>INPUTS</strong>
@@ -1739,7 +1773,7 @@
different from the utilization, which in the case of M/M/\infty
centers is always zero.
- <p><a name="index-traffic-intensity-60"></a>
+ <p><a name="index-traffic-intensity-63"></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
@@ -1767,7 +1801,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-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>
+ <p><a name="index-Bolch_002c-G_002e-64"></a><a name="index-Greiner_002c-S_002e-65"></a><a name="index-de-Meer_002c-H_002e-66"></a><a name="index-Trivedi_002c-K_002e-67"></a>
<!-- M/M/1/k -->
<div class="node">
<a name="The-M%2fM%2f1%2fK-System"></a>
@@ -1791,9 +1825,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-65"></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-68"></a></var><br>
<blockquote>
- <p><a name="index-g_t_0040math_007bM_002fM_002f1_002fK_007d-system-66"></a>
+ <p><a name="index-g_t_0040math_007bM_002fM_002f1_002fK_007d-system-69"></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
@@ -1860,9 +1894,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-67"></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-70"></a></var><br>
<blockquote>
- <p><a name="index-g_t_0040math_007bM_002fM_002fm_002fK_007d-system-68"></a>
+ <p><a name="index-g_t_0040math_007bM_002fM_002fm_002fK_007d-system-71"></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
@@ -1920,7 +1954,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-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>
+ <p><a name="index-Bolch_002c-G_002e-72"></a><a name="index-Greiner_002c-S_002e-73"></a><a name="index-de-Meer_002c-H_002e-74"></a><a name="index-Trivedi_002c-K_002e-75"></a>
<!-- Approximate M/M/m -->
<div class="node">
@@ -1942,9 +1976,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-73"></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-76"></a></var><br>
<blockquote>
- <p><a name="index-Asymmetric-_0040math_007bM_002fM_002fm_007d-system-74"></a>
+ <p><a name="index-Asymmetric-_0040math_007bM_002fM_002fm_007d-system-77"></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
@@ -1991,7 +2025,7 @@
and Markov Chains: Modeling and Performance Evaluation with Computer
Science Applications</cite>, Wiley, 1998
- <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>
+ <p><a name="index-Bolch_002c-G_002e-78"></a><a name="index-Greiner_002c-S_002e-79"></a><a name="index-de-Meer_002c-H_002e-80"></a><a name="index-Trivedi_002c-K_002e-81"></a>
<div class="node">
<a name="The-M%2fG%2f1-System"></a>
<a name="The-M_002fG_002f1-System"></a>
@@ -2007,9 +2041,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-79"></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-82"></a></var><br>
<blockquote>
- <p><a name="index-g_t_0040math_007bM_002fG_002f1_007d-system-80"></a>
+ <p><a name="index-g_t_0040math_007bM_002fG_002f1_007d-system-83"></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
@@ -2066,9 +2100,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-81"></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-84"></a></var><br>
<blockquote>
- <p><a name="index-g_t_0040math_007bM_002fH_005fm_002f1_007d-system-82"></a>
+ <p><a name="index-g_t_0040math_007bM_002fH_005fm_002f1_007d-system-85"></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:
@@ -2150,7 +2184,7 @@
<li><a accesskey="6" href="#Utility-functions">Utility functions</a>: Utility functions to compute miscellaneous quantities
</ul>
-<p><a name="index-queueing-networks-83"></a>
+<p><a name="index-queueing-networks-86"></a>
<!-- INTRODUCTION -->
<div class="node">
<a name="Introduction-to-QNs"></a>
@@ -2411,13 +2445,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-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>
+— Function File: <var>Q</var> = <b>qnmknode</b> (<var>"m/m/m-fcfs", S</var>)<var><a name="index-qnmknode-87"></a></var><br>
+— Function File: <var>Q</var> = <b>qnmknode</b> (<var>"m/m/m-fcfs", S, m</var>)<var><a name="index-qnmknode-88"></a></var><br>
+— Function File: <var>Q</var> = <b>qnmknode</b> (<var>"m/m/1-lcfs-pr", S</var>)<var><a name="index-qnmknode-89"></a></var><br>
+— Function File: <var>Q</var> = <b>qnmknode</b> (<var>"-/g/1-ps", S</var>)<var><a name="index-qnmknode-90"></a></var><br>
+— Function File: <var>Q</var> = <b>qnmknode</b> (<var>"-/g/1-ps", S, s2</var>)<var><a name="index-qnmknode-91"></a></var><br>
+— Function File: <var>Q</var> = <b>qnmknode</b> (<var>"-/g/inf", S</var>)<var><a name="index-qnmknode-92"></a></var><br>
+— Function File: <var>Q</var> = <b>qnmknode</b> (<var>"-/g/inf", S, s2</var>)<var><a name="index-qnmknode-93"></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
@@ -2486,10 +2520,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-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>
+— 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-94"></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-95"></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-96"></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-97"></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.
@@ -2667,11 +2701,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-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>
+— 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-98"></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-99"></a></var><br>
+— Function File: <var>pr</var> = <b>qnjackson</b> (<var>lambda, S, P, m, k</var>)<var><a name="index-qnjackson-100"></a></var><br>
<blockquote>
- <p><a name="index-open-network_002c-single-class-98"></a><a name="index-Jackson-network-99"></a>
+ <p><a name="index-open-network_002c-single-class-101"></a><a name="index-Jackson-network-102"></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
@@ -2753,7 +2787,7 @@
Performance Evaluation with Computer Science Applications</cite>, Wiley,
1998, pp. 284–287.
- <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>
+ <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>
<h4 class="subsection">6.3.2 The Convolution Algorithm</h4>
@@ -2787,10 +2821,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-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>
+— 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-107"></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-108"></a></var><br>
<blockquote>
- <p><a name="index-closed-network-106"></a><a name="index-normalization-constant-107"></a><a name="index-convolution-algorithm-108"></a>
+ <p><a name="index-closed-network-109"></a><a name="index-normalization-constant-110"></a><a name="index-convolution-algorithm-111"></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
@@ -2881,20 +2915,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-109"></a>
+ <p><a name="index-Buzen_002c-J_002e-P_002e-112"></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-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>
+ <p><a name="index-Bolch_002c-G_002e-113"></a><a name="index-Greiner_002c-S_002e-114"></a><a name="index-de-Meer_002c-H_002e-115"></a><a name="index-Trivedi_002c-K_002e-116"></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-114"></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-117"></a></var><br>
<blockquote>
- <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>
+ <p><a name="index-closed-network-118"></a><a name="index-normalization-constant-119"></a><a name="index-convolution-algorithm-120"></a><a name="index-load_002ddependent-service-center-121"></a>
This function implements the <em>convolution algorithm</em> for
product-form, single-class closed queueing networks with general
load-dependent service centers.
@@ -2954,7 +2988,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-119"></a>
+ <p><a name="index-Schwetman_002c-H_002e-122"></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
@@ -2962,7 +2996,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-120"></a><a name="index-Kobayashi_002c-H_002e-121"></a>
+ <p><a name="index-Reiser_002c-M_002e-123"></a><a name="index-Kobayashi_002c-H_002e-124"></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,
@@ -2974,7 +3008,7 @@
function f_i defined in Schwetman, <code>Some Computational
Aspects of Queueing Network Models</code>.
- <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>
+ <p><a name="index-Bolch_002c-G_002e-125"></a><a name="index-Greiner_002c-S_002e-126"></a><a name="index-de-Meer_002c-H_002e-127"></a><a name="index-Trivedi_002c-K_002e-128"></a>
<h4 class="subsection">6.3.3 Open networks</h4>
@@ -2982,10 +3016,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-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>
+— 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-129"></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-130"></a></var><br>
<blockquote>
- <p><a name="index-open-network_002c-single-class-128"></a><a name="index-BCMP-network-129"></a>
+ <p><a name="index-open-network_002c-single-class-131"></a><a name="index-BCMP-network-132"></a>
Analyze open, single class BCMP queueing networks.
<p>This function works for a subset of BCMP single-class open networks
@@ -3078,16 +3112,16 @@
Networks and Markov Chains: Modeling and Performance Evaluation with
Computer Science Applications</cite>, Wiley, 1998.
- <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>
+ <p><a name="index-Bolch_002c-G_002e-133"></a><a name="index-Greiner_002c-S_002e-134"></a><a name="index-de-Meer_002c-H_002e-135"></a><a name="index-Trivedi_002c-K_002e-136"></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-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>
+— 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-137"></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-138"></a></var><br>
<blockquote>
- <p><a name="index-open-network_002c-multiple-classes-136"></a>
+ <p><a name="index-open-network_002c-multiple-classes-139"></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
@@ -3152,7 +3186,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-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>
+ <p><a name="index-Lazowska_002c-E_002e-D_002e-140"></a><a name="index-Zahorjan_002c-J_002e-141"></a><a name="index-Graham_002c-G_002e-S_002e-142"></a><a name="index-Sevcik_002c-K_002e-C_002e-143"></a>
<h4 class="subsection">6.3.4 Closed Networks</h4>
@@ -3160,11 +3194,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-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>
+— 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-144"></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-145"></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-146"></a></var><br>
<blockquote>
- <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>
+ <p><a name="index-Mean-Value-Analysys-_0028MVA_0029-147"></a><a name="index-closed-network_002c-single-class-148"></a><a name="index-normalization-constant-149"></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
@@ -3265,7 +3299,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-147"></a><a name="index-Lavenberg_002c-S_002e-S_002e-148"></a>
+ <p><a name="index-Reiser_002c-M_002e-150"></a><a name="index-Lavenberg_002c-S_002e-S_002e-151"></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)}, -->
@@ -3274,15 +3308,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-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>
+ <p><a name="index-Jain_002c-R_002e-152"></a><a name="index-Bolch_002c-G_002e-153"></a><a name="index-Greiner_002c-S_002e-154"></a><a name="index-de-Meer_002c-H_002e-155"></a><a name="index-Trivedi_002c-K_002e-156"></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-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>
+— 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-157"></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-158"></a></var><br>
<blockquote>
- <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>
+ <p><a name="index-Mean-Value-Analysys-_0028MVA_0029-159"></a><a name="index-closed-network_002c-single-class-160"></a><a name="index-load_002ddependent-service-center-161"></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
@@ -3340,15 +3374,15 @@
1998, Section 8.2.4.1, “Networks with Load-Deèpendent Service: Closed
Networks”.
- <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>
+ <p><a name="index-Bolch_002c-G_002e-162"></a><a name="index-Greiner_002c-S_002e-163"></a><a name="index-de-Meer_002c-H_002e-164"></a><a name="index-Trivedi_002c-K_002e-165"></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-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>
+— 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-166"></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-167"></a></var><br>
<blockquote>
- <p><a name="index-Mean-Value-Analysys-_0028MVA_0029-165"></a><a name="index-CMVA-166"></a>
+ <p><a name="index-Mean-Value-Analysys-_0028MVA_0029-168"></a><a name="index-CMVA-169"></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
@@ -3402,19 +3436,19 @@
closed networks</cite>. Queueing Syst. Theory Appl., 60:193–202, December
2008.
- <p><a name="index-Casale_002c-G_002e-167"></a>
+ <p><a name="index-Casale_002c-G_002e-170"></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-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>
+— 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-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</var>)<var><a name="index-qnclosedsinglemvaapprox-172"></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-173"></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-174"></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-175"></a></var><br>
<blockquote>
- <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>
+ <p><a name="index-Mean-Value-Analysys-_0028MVA_0029_002c-approximate-176"></a><a name="index-Approximate-MVA-177"></a><a name="index-Closed-network_002c-single-class-178"></a><a name="index-Closed-network_002c-approximate-analysis-179"></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
@@ -3493,20 +3527,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-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>
+ <p><a name="index-Lazowska_002c-E_002e-D_002e-180"></a><a name="index-Zahorjan_002c-J_002e-181"></a><a name="index-Graham_002c-G_002e-S_002e-182"></a><a name="index-Sevcik_002c-K_002e-C_002e-183"></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-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>
+— 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-184"></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-185"></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-186"></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-187"></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-188"></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-189"></a></var><br>
<blockquote>
- <p><a name="index-Mean-Value-Analysys-_0028MVA_0029-187"></a><a name="index-closed-network_002c-multiple-classes-188"></a>
+ <p><a name="index-Mean-Value-Analysys-_0028MVA_0029-190"></a><a name="index-closed-network_002c-multiple-classes-191"></a>
Analyze closed, multiclass queueing networks with K service
centers and C independent customer classes (chains) using the
Mean Value Analysys (MVA) algorithm.
@@ -3636,7 +3670,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-189"></a><a name="index-Lavenberg_002c-S_002e-S_002e-190"></a>
+ <p><a name="index-Reiser_002c-M_002e-192"></a><a name="index-Lavenberg_002c-S_002e-S_002e-193"></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,
@@ -3646,18 +3680,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-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>
+ <p><a name="index-Bolch_002c-G_002e-194"></a><a name="index-Greiner_002c-S_002e-195"></a><a name="index-de-Meer_002c-H_002e-196"></a><a name="index-Trivedi_002c-K_002e-197"></a><a name="index-Lazowska_002c-E_002e-D_002e-198"></a><a name="index-Zahorjan_002c-J_002e-199"></a><a name="index-Graham_002c-G_002e-S_002e-200"></a><a name="index-Sevcik_002c-K_002e-C_002e-201"></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-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>
+— 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-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</var>)<var><a name="index-qnclosedmultimvaapprox-203"></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-204"></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-205"></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-206"></a></var><br>
<blockquote>
- <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>
+ <p><a name="index-Mean-Value-Analysys-_0028MVA_0029_002c-approximate-207"></a><a name="index-Approximate-MVA-208"></a><a name="index-Closed-network_002c-multiple-classes-209"></a><a name="index-Closed-network_002c-approximate-analysis-210"></a>
Analyze closed, multiclass queueing networks with K service
centers and C customer classes using the approximate Mean
Value Analysys (MVA) algorithm.
@@ -3742,12 +3776,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-208"></a>
+ <p><a name="index-Bard_002c-Y_002e-211"></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-209"></a>
+ <p><a name="index-Schweitzer_002c-P_002e-212"></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>,
@@ -3758,7 +3792,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-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>
+ <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>
<h4 class="subsection">6.3.5 Mixed Networks</h4>
@@ -3766,9 +3800,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-214"></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-217"></a></var><br>
<blockquote>
- <p><a name="index-Mean-Value-Analysys-_0028MVA_0029-215"></a><a name="index-mixed-network-216"></a>
+ <p><a name="index-Mean-Value-Analysys-_0028MVA_0029-218"></a><a name="index-mixed-network-219"></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
@@ -3859,14 +3893,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-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>
+ <p><a name="index-Lazowska_002c-E_002e-D_002e-220"></a><a name="index-Zahorjan_002c-J_002e-221"></a><a name="index-Graham_002c-G_002e-S_002e-222"></a><a name="index-Sevcik_002c-K_002e-C_002e-223"></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%...
[truncated message content] |
|
From: <mma...@us...> - 2012-03-12 14:39:24
|
Revision: 9820
http://octave.svn.sourceforge.net/octave/?rev=9820&view=rev
Author: mmarzolla
Date: 2012-03-12 14:39:15 +0000 (Mon, 12 Mar 2012)
Log Message:
-----------
Enhancements to dtmc_mtta()
Modified Paths:
--------------
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/dtmc_mtta.m
Modified: trunk/octave-forge/main/queueing/doc/queueing.html
===================================================================
--- trunk/octave-forge/main/queueing/doc/queueing.html 2012-03-12 12:10:43 UTC (rev 9819)
+++ trunk/octave-forge/main/queueing/doc/queueing.html 2012-03-12 14:39:15 UTC (rev 9820)
@@ -218,11 +218,11 @@
chains (DTMC) or continuous-time chains (CTMC):
<ul>
-<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).
+<li>Birth-death process;
+<li>Transient and steady-state occupancy probabilities;
+<li>Mean times to absorption;
+<li>Expected sojourn times and time-averaged sojourn times (CTMC only);
+<li>Mean first passage times;
</ul>
@@ -1007,28 +1007,39 @@
<div class="defun">
— Function File: [<var>t</var> <var>B</var>] = <b>dtmc_mtta</b> (<var>P</var>)<var><a name="index-dtmc_005fmtta-16"></a></var><br>
+— Function File: [<var>t</var> <var>B</var>] = <b>dtmc_mtta</b> (<var>P, p0</var>)<var><a name="index-dtmc_005fmtta-17"></a></var><br>
<blockquote>
- <p><a name="index-Markov-chain_002c-disctete-time-17"></a><a name="index-Mean-time-to-absorption-18"></a>
-Compute the expected number of steps before absorption for the DTMC
-described by the transition probability matrix <var>P</var>,
+ <p><a name="index-Markov-chain_002c-disctete-time-18"></a><a name="index-Mean-time-to-absorption-19"></a>
+Compute the expected number of steps before absorption for the
+DTMC with N \times N transition probability matrix <var>P</var>.
<p><strong>INPUTS</strong>
<dl>
-<dt><var>P</var><dd>Transition probability matrix .
+<dt><var>P</var><dd>Transition probability matrix.
+ <br><dt><var>p0</var><dd>Initial state occupancy probabilities.
+
</dl>
<p><strong>OUTPUTS</strong>
<dl>
-<dt><var>t</var><dd><var>t</var><code>(i)</code> is the expected number of steps before being absorbed,
-starting from state i.
+<dt><var>t</var><dd>When called with a single argument, <var>t</var> is a vector such that
+<var>t</var><code>(i)</code> is the expected number of steps before being
+absorbed, starting from state i. When called with two
+arguments, <var>t</var> is a scalar and represents the average number of
+steps before absorption, given initial state occupancy probabilities
+<var>p0</var>.
- <br><dt><var>B</var><dd><var>B</var><code>(i,j)</code> is the probability of being absorbed in state
-j, starting from state i. If j is not absorbing,
-<var>B</var><code>(i,j) = 0</code>; if i is absorbing, then
-<var>B</var><code>(i,i) = 1</code>..
+ <br><dt><var>B</var><dd>When called with a single argument, <var>B</var> is a N \times N
+matrix where <var>B</var><code>(i,j)</code> is the probability of being absorbed
+in state j, starting from state i; if j is not
+absorbing, <var>B</var><code>(i,j) = 0</code>; if i is absorbing, then
+<var>B</var><code>(i,i) = 1</code>. When called with two arguments, <var>B</var> is a
+vector with N elements where <var>B</var><code>(j)</code> is the
+probability of being absorbed in state <var>j</var>, given initial state
+occupancy probabilities <var>p0</var>.
</dl>
@@ -1062,9 +1073,9 @@
<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-19"></a></var><br>
+— Function File: [<var>result</var> <var>err</var>] = <b>ctmc_check_Q</b> (<var>Q</var>)<var><a name="index-ctmc_005fcheck_005fQ-20"></a></var><br>
<blockquote>
- <p><a name="index-Markov-chain_002c-continuous-time-20"></a>
+ <p><a name="index-Markov-chain_002c-continuous-time-21"></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
@@ -1114,10 +1125,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-21"></a></var><br>
-— Function File: <var>p</var> = <b>ctmc</b> (<var>Q, t. p0</var>)<var><a name="index-ctmc-22"></a></var><br>
+— Function File: <var>p</var> = <b>ctmc</b> (<var>Q</var>)<var><a name="index-ctmc-22"></a></var><br>
+— Function File: <var>p</var> = <b>ctmc</b> (<var>Q, t. p0</var>)<var><a name="index-ctmc-23"></a></var><br>
<blockquote>
- <p><a name="index-Markov-chain_002c-continuous-time-23"></a><a name="index-Continuous-time-Markov-chain-24"></a><a name="index-Markov-chain_002c-state-occupancy-probabilities-25"></a><a name="index-Stationary-probabilities-26"></a>
+ <p><a name="index-Markov-chain_002c-continuous-time-24"></a><a name="index-Continuous-time-Markov-chain-25"></a><a name="index-Markov-chain_002c-state-occupancy-probabilities-26"></a><a name="index-Stationary-probabilities-27"></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
@@ -1180,9 +1191,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-27"></a></var><br>
+— Function File: <var>Q</var> = <b>ctmc_bd</b> (<var>birth, death</var>)<var><a name="index-ctmc_005fbd-28"></a></var><br>
<blockquote>
- <p><a name="index-Markov-chain_002c-continuous-time-28"></a><a name="index-Birth_002ddeath-process-29"></a>
+ <p><a name="index-Markov-chain_002c-continuous-time-29"></a><a name="index-Birth_002ddeath-process-30"></a>
Returns the N \times N infinitesimal generator matrix Q
for a birth-death process with given rates.
@@ -1242,10 +1253,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-30"></a></var><br>
-— Function File: <var>L</var> = <b>ctmc_exps</b> (<var>Q, p</var>)<var><a name="index-ctmc_005fexps-31"></a></var><br>
+— Function File: <var>L</var> = <b>ctmc_exps</b> (<var>Q, t, p </var>)<var><a name="index-ctmc_005fexps-31"></a></var><br>
+— Function File: <var>L</var> = <b>ctmc_exps</b> (<var>Q, p</var>)<var><a name="index-ctmc_005fexps-32"></a></var><br>
<blockquote>
- <p><a name="index-Markov-chain_002c-continuous-time-32"></a><a name="index-Expected-sojourn-time-33"></a>
+ <p><a name="index-Markov-chain_002c-continuous-time-33"></a><a name="index-Expected-sojourn-time-34"></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
@@ -1325,9 +1336,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-34"></a></var><br>
+— Function File: <var>M</var> = <b>ctmc_taexps</b> (<var>Q, t, p</var>)<var><a name="index-ctmc_005ftaexps-35"></a></var><br>
<blockquote>
- <p><a name="index-Markov-chain_002c-continuous-time-35"></a><a name="index-Time_002dalveraged-sojourn-time-36"></a>
+ <p><a name="index-Markov-chain_002c-continuous-time-36"></a><a name="index-Time_002dalveraged-sojourn-time-37"></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
@@ -1410,9 +1421,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-37"></a></var><br>
+— Function File: <var>t</var> = <b>ctmc_mtta</b> (<var>Q, p</var>)<var><a name="index-ctmc_005fmtta-38"></a></var><br>
<blockquote>
- <p><a name="index-Markov-chain_002c-continuous-time-38"></a><a name="index-Mean-time-to-absorption-39"></a>
+ <p><a name="index-Markov-chain_002c-continuous-time-39"></a><a name="index-Mean-time-to-absorption-40"></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
@@ -1473,7 +1484,7 @@
Performance Evaluation with Computer Science Applications</cite>, Wiley,
1998.
- <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-41"></a><a name="index-Greiner_002c-S_002e-42"></a><a name="index-de-Meer_002c-H_002e-43"></a><a name="index-Trivedi_002c-K_002e-44"></a>
<div class="node">
<a name="First-Passage-Times"></a>
<p><hr>
@@ -1487,10 +1498,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-44"></a></var><br>
-— Function File: <var>m</var> = <b>ctmc_fpt</b> (<var>Q, i, j</var>)<var><a name="index-ctmc_005ffpt-45"></a></var><br>
+— Function File: <var>M</var> = <b>ctmc_fpt</b> (<var>Q</var>)<var><a name="index-ctmc_005ffpt-45"></a></var><br>
+— Function File: <var>m</var> = <b>ctmc_fpt</b> (<var>Q, i, j</var>)<var><a name="index-ctmc_005ffpt-46"></a></var><br>
<blockquote>
- <p><a name="index-Markov-chain_002c-continuous-time-46"></a><a name="index-First-passage-times-47"></a>
+ <p><a name="index-Markov-chain_002c-continuous-time-47"></a><a name="index-First-passage-times-48"></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
@@ -1596,9 +1607,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-48"></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-49"></a></var><br>
<blockquote>
- <p><a name="index-g_t_0040math_007bM_002fM_002f1_007d-system-49"></a>
+ <p><a name="index-g_t_0040math_007bM_002fM_002f1_007d-system-50"></a>
Compute utilization, response time, average number of requests
and throughput for a M/M/1 queue.
@@ -1643,7 +1654,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-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-51"></a><a name="index-Greiner_002c-S_002e-52"></a><a name="index-de-Meer_002c-H_002e-53"></a><a name="index-Trivedi_002c-K_002e-54"></a>
<!-- M/M/m -->
<div class="node">
<a name="The-M%2fM%2fm-System"></a>
@@ -1669,10 +1680,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-54"></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-55"></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-55"></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-56"></a></var><br>
<blockquote>
- <p><a name="index-g_t_0040math_007bM_002fM_002fm_007d-system-56"></a>
+ <p><a name="index-g_t_0040math_007bM_002fM_002fm_007d-system-57"></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.
@@ -1724,7 +1735,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-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-58"></a><a name="index-Greiner_002c-S_002e-59"></a><a name="index-de-Meer_002c-H_002e-60"></a><a name="index-Trivedi_002c-K_002e-61"></a>
<!-- M/M/inf -->
<div class="node">
<a name="The-M%2fM%2finf-System"></a>
@@ -1747,7 +1758,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-61"></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-62"></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
@@ -1755,7 +1766,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-62"></a>
+ <p><a name="index-g_t_0040math_007bM_002fM_002f_007dinf-system-63"></a>
<p><strong>INPUTS</strong>
@@ -1773,7 +1784,7 @@
different from the utilization, which in the case of M/M/\infty
centers is always zero.
- <p><a name="index-traffic-intensity-63"></a>
+ <p><a name="index-traffic-intensity-64"></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
@@ -1801,7 +1812,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-64"></a><a name="index-Greiner_002c-S_002e-65"></a><a name="index-de-Meer_002c-H_002e-66"></a><a name="index-Trivedi_002c-K_002e-67"></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>
<!-- M/M/1/k -->
<div class="node">
<a name="The-M%2fM%2f1%2fK-System"></a>
@@ -1825,9 +1836,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-68"></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-69"></a></var><br>
<blockquote>
- <p><a name="index-g_t_0040math_007bM_002fM_002f1_002fK_007d-system-69"></a>
+ <p><a name="index-g_t_0040math_007bM_002fM_002f1_002fK_007d-system-70"></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
@@ -1894,9 +1905,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-70"></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-71"></a></var><br>
<blockquote>
- <p><a name="index-g_t_0040math_007bM_002fM_002fm_002fK_007d-system-71"></a>
+ <p><a name="index-g_t_0040math_007bM_002fM_002fm_002fK_007d-system-72"></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
@@ -1954,7 +1965,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-72"></a><a name="index-Greiner_002c-S_002e-73"></a><a name="index-de-Meer_002c-H_002e-74"></a><a name="index-Trivedi_002c-K_002e-75"></a>
+ <p><a name="index-Bolch_002c-G_002e-73"></a><a name="index-Greiner_002c-S_002e-74"></a><a name="index-de-Meer_002c-H_002e-75"></a><a name="index-Trivedi_002c-K_002e-76"></a>
<!-- Approximate M/M/m -->
<div class="node">
@@ -1976,9 +1987,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-76"></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-77"></a></var><br>
<blockquote>
- <p><a name="index-Asymmetric-_0040math_007bM_002fM_002fm_007d-system-77"></a>
+ <p><a name="index-Asymmetric-_0040math_007bM_002fM_002fm_007d-system-78"></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
@@ -2025,7 +2036,7 @@
and Markov Chains: Modeling and Performance Evaluation with Computer
Science Applications</cite>, Wiley, 1998
- <p><a name="index-Bolch_002c-G_002e-78"></a><a name="index-Greiner_002c-S_002e-79"></a><a name="index-de-Meer_002c-H_002e-80"></a><a name="index-Trivedi_002c-K_002e-81"></a>
+ <p><a name="index-Bolch_002c-G_002e-79"></a><a name="index-Greiner_002c-S_002e-80"></a><a name="index-de-Meer_002c-H_002e-81"></a><a name="index-Trivedi_002c-K_002e-82"></a>
<div class="node">
<a name="The-M%2fG%2f1-System"></a>
<a name="The-M_002fG_002f1-System"></a>
@@ -2041,9 +2052,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-82"></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-83"></a></var><br>
<blockquote>
- <p><a name="index-g_t_0040math_007bM_002fG_002f1_007d-system-83"></a>
+ <p><a name="index-g_t_0040math_007bM_002fG_002f1_007d-system-84"></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
@@ -2100,9 +2111,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-84"></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-85"></a></var><br>
<blockquote>
- <p><a name="index-g_t_0040math_007bM_002fH_005fm_002f1_007d-system-85"></a>
+ <p><a name="index-g_t_0040math_007bM_002fH_005fm_002f1_007d-system-86"></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:
@@ -2184,7 +2195,7 @@
<li><a accesskey="6" href="#Utility-functions">Utility functions</a>: Utility functions to compute miscellaneous quantities
</ul>
-<p><a name="index-queueing-networks-86"></a>
+<p><a name="index-queueing-networks-87"></a>
<!-- INTRODUCTION -->
<div class="node">
<a name="Introduction-to-QNs"></a>
@@ -2445,13 +2456,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-87"></a></var><br>
-— Function File: <var>Q</var> = <b>qnmknode</b> (<var>"m/m/m-fcfs", S, m</var>)<var><a name="index-qnmknode-88"></a></var><br>
-— Function File: <var>Q</var> = <b>qnmknode</b> (<var>"m/m/1-lcfs-pr", S</var>)<var><a name="index-qnmknode-89"></a></var><br>
-— Function File: <var>Q</var> = <b>qnmknode</b> (<var>"-/g/1-ps", S</var>)<var><a name="index-qnmknode-90"></a></var><br>
-— Function File: <var>Q</var> = <b>qnmknode</b> (<var>"-/g/1-ps", S, s2</var>)<var><a name="index-qnmknode-91"></a></var><br>
-— Function File: <var>Q</var> = <b>qnmknode</b> (<var>"-/g/inf", S</var>)<var><a name="index-qnmknode-92"></a></var><br>
-— Function File: <var>Q</var> = <b>qnmknode</b> (<var>"-/g/inf", S, s2</var>)<var><a name="index-qnmknode-93"></a></var><br>
+— Function File: <var>Q</var> = <b>qnmknode</b> (<var>"m/m/m-fcfs", S</var>)<var><a name="index-qnmknode-88"></a></var><br>
+— Function File: <var>Q</var> = <b>qnmknode</b> (<var>"m/m/m-fcfs", S, m</var>)<var><a name="index-qnmknode-89"></a></var><br>
+— Function File: <var>Q</var> = <b>qnmknode</b> (<var>"m/m/1-lcfs-pr", S</var>)<var><a name="index-qnmknode-90"></a></var><br>
+— Function File: <var>Q</var> = <b>qnmknode</b> (<var>"-/g/1-ps", S</var>)<var><a name="index-qnmknode-91"></a></var><br>
+— Function File: <var>Q</var> = <b>qnmknode</b> (<var>"-/g/1-ps", S, s2</var>)<var><a name="index-qnmknode-92"></a></var><br>
+— Function File: <var>Q</var> = <b>qnmknode</b> (<var>"-/g/inf", S</var>)<var><a name="index-qnmknode-93"></a></var><br>
+— Function File: <var>Q</var> = <b>qnmknode</b> (<var>"-/g/inf", S, s2</var>)<var><a name="index-qnmknode-94"></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
@@ -2520,10 +2531,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-94"></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-95"></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-96"></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-97"></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-95"></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-96"></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-97"></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-98"></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.
@@ -2701,11 +2712,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-98"></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-99"></a></var><br>
-— Function File: <var>pr</var> = <b>qnjackson</b> (<var>lambda, S, P, m, k</var>)<var><a name="index-qnjackson-100"></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-99"></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-100"></a></var><br>
+— Function File: <var>pr</var> = <b>qnjackson</b> (<var>lambda, S, P, m, k</var>)<var><a name="index-qnjackson-101"></a></var><br>
<blockquote>
- <p><a name="index-open-network_002c-single-class-101"></a><a name="index-Jackson-network-102"></a>
+ <p><a name="index-open-network_002c-single-class-102"></a><a name="index-Jackson-network-103"></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
@@ -2787,7 +2798,7 @@
Performance Evaluation with Computer Science Applications</cite>, Wiley,
1998, pp. 284–287.
- <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-104"></a><a name="index-Greiner_002c-S_002e-105"></a><a name="index-de-Meer_002c-H_002e-106"></a><a name="index-Trivedi_002c-K_002e-107"></a>
<h4 class="subsection">6.3.2 The Convolution Algorithm</h4>
@@ -2821,10 +2832,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-107"></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-108"></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-108"></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-109"></a></var><br>
<blockquote>
- <p><a name="index-closed-network-109"></a><a name="index-normalization-constant-110"></a><a name="index-convolution-algorithm-111"></a>
+ <p><a name="index-closed-network-110"></a><a name="index-normalization-constant-111"></a><a name="index-convolution-algorithm-112"></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
@@ -2915,20 +2926,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-112"></a>
+ <p><a name="index-Buzen_002c-J_002e-P_002e-113"></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-113"></a><a name="index-Greiner_002c-S_002e-114"></a><a name="index-de-Meer_002c-H_002e-115"></a><a name="index-Trivedi_002c-K_002e-116"></a>
+ <p><a name="index-Bolch_002c-G_002e-114"></a><a name="index-Greiner_002c-S_002e-115"></a><a name="index-de-Meer_002c-H_002e-116"></a><a name="index-Trivedi_002c-K_002e-117"></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-117"></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-118"></a></var><br>
<blockquote>
- <p><a name="index-closed-network-118"></a><a name="index-normalization-constant-119"></a><a name="index-convolution-algorithm-120"></a><a name="index-load_002ddependent-service-center-121"></a>
+ <p><a name="index-closed-network-119"></a><a name="index-normalization-constant-120"></a><a name="index-convolution-algorithm-121"></a><a name="index-load_002ddependent-service-center-122"></a>
This function implements the <em>convolution algorithm</em> for
product-form, single-class closed queueing networks with general
load-dependent service centers.
@@ -2988,7 +2999,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-122"></a>
+ <p><a name="index-Schwetman_002c-H_002e-123"></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
@@ -2996,7 +3007,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-123"></a><a name="index-Kobayashi_002c-H_002e-124"></a>
+ <p><a name="index-Reiser_002c-M_002e-124"></a><a name="index-Kobayashi_002c-H_002e-125"></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,
@@ -3008,7 +3019,7 @@
function f_i defined in Schwetman, <code>Some Computational
Aspects of Queueing Network Models</code>.
- <p><a name="index-Bolch_002c-G_002e-125"></a><a name="index-Greiner_002c-S_002e-126"></a><a name="index-de-Meer_002c-H_002e-127"></a><a name="index-Trivedi_002c-K_002e-128"></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>
<h4 class="subsection">6.3.3 Open networks</h4>
@@ -3016,10 +3027,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-129"></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-130"></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-130"></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-131"></a></var><br>
<blockquote>
- <p><a name="index-open-network_002c-single-class-131"></a><a name="index-BCMP-network-132"></a>
+ <p><a name="index-open-network_002c-single-class-132"></a><a name="index-BCMP-network-133"></a>
Analyze open, single class BCMP queueing networks.
<p>This function works for a subset of BCMP single-class open networks
@@ -3112,16 +3123,16 @@
Networks and Markov Chains: Modeling and Performance Evaluation with
Computer Science Applications</cite>, Wiley, 1998.
- <p><a name="index-Bolch_002c-G_002e-133"></a><a name="index-Greiner_002c-S_002e-134"></a><a name="index-de-Meer_002c-H_002e-135"></a><a name="index-Trivedi_002c-K_002e-136"></a>
+ <p><a name="index-Bolch_002c-G_002e-134"></a><a name="index-Greiner_002c-S_002e-135"></a><a name="index-de-Meer_002c-H_002e-136"></a><a name="index-Trivedi_002c-K_002e-137"></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-137"></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-138"></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-138"></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-139"></a></var><br>
<blockquote>
- <p><a name="index-open-network_002c-multiple-classes-139"></a>
+ <p><a name="index-open-network_002c-multiple-classes-140"></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
@@ -3186,7 +3197,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-140"></a><a name="index-Zahorjan_002c-J_002e-141"></a><a name="index-Graham_002c-G_002e-S_002e-142"></a><a name="index-Sevcik_002c-K_002e-C_002e-143"></a>
+ <p><a name="index-Lazowska_002c-E_002e-D_002e-141"></a><a name="index-Zahorjan_002c-J_002e-142"></a><a name="index-Graham_002c-G_002e-S_002e-143"></a><a name="index-Sevcik_002c-K_002e-C_002e-144"></a>
<h4 class="subsection">6.3.4 Closed Networks</h4>
@@ -3194,11 +3205,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-144"></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-145"></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-146"></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-145"></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-146"></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-147"></a></var><br>
<blockquote>
- <p><a name="index-Mean-Value-Analysys-_0028MVA_0029-147"></a><a name="index-closed-network_002c-single-class-148"></a><a name="index-normalization-constant-149"></a>
+ <p><a name="index-Mean-Value-Analysys-_0028MVA_0029-148"></a><a name="index-closed-network_002c-single-class-149"></a><a name="index-normalization-constant-150"></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
@@ -3299,7 +3310,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-150"></a><a name="index-Lavenberg_002c-S_002e-S_002e-151"></a>
+ <p><a name="index-Reiser_002c-M_002e-151"></a><a name="index-Lavenberg_002c-S_002e-S_002e-152"></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)}, -->
@@ -3308,15 +3319,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-152"></a><a name="index-Bolch_002c-G_002e-153"></a><a name="index-Greiner_002c-S_002e-154"></a><a name="index-de-Meer_002c-H_002e-155"></a><a name="index-Trivedi_002c-K_002e-156"></a>
+ <p><a name="index-Jain_002c-R_002e-153"></a><a name="index-Bolch_002c-G_002e-154"></a><a name="index-Greiner_002c-S_002e-155"></a><a name="index-de-Meer_002c-H_002e-156"></a><a name="index-Trivedi_002c-K_002e-157"></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-157"></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-158"></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-158"></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-159"></a></var><br>
<blockquote>
- <p><a name="index-Mean-Value-Analysys-_0028MVA_0029-159"></a><a name="index-closed-network_002c-single-class-160"></a><a name="index-load_002ddependent-service-center-161"></a>
+ <p><a name="index-Mean-Value-Analysys-_0028MVA_0029-160"></a><a name="index-closed-network_002c-single-class-161"></a><a name="index-load_002ddependent-service-center-162"></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
@@ -3374,15 +3385,15 @@
1998, Section 8.2.4.1, “Networks with Load-Deèpendent Service: Closed
Networks”.
- <p><a name="index-Bolch_002c-G_002e-162"></a><a name="index-Greiner_002c-S_002e-163"></a><a name="index-de-Meer_002c-H_002e-164"></a><a name="index-Trivedi_002c-K_002e-165"></a>
+ <p><a name="index-Bolch_002c-G_002e-163"></a><a name="index-Greiner_002c-S_002e-164"></a><a name="index-de-Meer_002c-H_002e-165"></a><a name="index-Trivedi_002c-K_002e-166"></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-166"></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-167"></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-167"></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-168"></a></var><br>
<blockquote>
- <p><a name="index-Mean-Value-Analysys-_0028MVA_0029-168"></a><a name="index-CMVA-169"></a>
+ <p><a name="index-Mean-Value-Analysys-_0028MVA_0029-169"></a><a name="index-CMVA-170"></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
@@ -3436,19 +3447,19 @@
closed networks</cite>. Queueing Syst. Theory Appl., 60:193–202, December
2008.
- <p><a name="index-Casale_002c-G_002e-170"></a>
+ <p><a name="index-Casale_002c-G_002e-171"></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-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</var>)<var><a name="index-qnclosedsinglemvaapprox-172"></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-173"></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-174"></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-175"></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-172"></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-173"></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-174"></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-175"></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-176"></a></var><br>
<blockquote>
- <p><a name="index-Mean-Value-Analysys-_0028MVA_0029_002c-approximate-176"></a><a name="index-Approximate-MVA-177"></a><a name="index-Closed-network_002c-single-class-178"></a><a name="index-Closed-network_002c-approximate-analysis-179"></a>
+ <p><a name="index-Mean-Value-Analysys-_0028MVA_0029_002c-approximate-177"></a><a name="index-Approximate-MVA-178"></a><a name="index-Closed-network_002c-single-class-179"></a><a name="index-Closed-network_002c-approximate-analysis-180"></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
@@ -3527,20 +3538,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-180"></a><a name="index-Zahorjan_002c-J_002e-181"></a><a name="index-Graham_002c-G_002e-S_002e-182"></a><a name="index-Sevcik_002c-K_002e-C_002e-183"></a>
+ <p><a name="index-Lazowska_002c-E_002e-D_002e-181"></a><a name="index-Zahorjan_002c-J_002e-182"></a><a name="index-Graham_002c-G_002e-S_002e-183"></a><a name="index-Sevcik_002c-K_002e-C_002e-184"></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-184"></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-185"></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-186"></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-187"></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-188"></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-189"></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-185"></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-186"></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-187"></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-188"></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-189"></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-190"></a></var><br>
<blockquote>
- <p><a name="index-Mean-Value-Analysys-_0028MVA_0029-190"></a><a name="index-closed-network_002c-multiple-classes-191"></a>
+ <p><a name="index-Mean-Value-Analysys-_0028MVA_0029-191"></a><a name="index-closed-network_002c-multiple-classes-192"></a>
Analyze closed, multiclass queueing networks with K service
centers and C independent customer classes (chains) using the
Mean Value Analysys (MVA) algorithm.
@@ -3670,7 +3681,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-192"></a><a name="index-Lavenberg_002c-S_002e-S_002e-193"></a>
+ <p><a name="index-Reiser_002c-M_002e-193"></a><a name="index-Lavenberg_002c-S_002e-S_002e-194"></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,
@@ -3680,18 +3691,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-194"></a><a name="index-Greiner_002c-S_002e-195"></a><a name="index-de-Meer_002c-H_002e-196"></a><a name="index-Trivedi_002c-K_002e-197"></a><a name="index-Lazowska_002c-E_002e-D_002e-198"></a><a name="index-Zahorjan_002c-J_002e-199"></a><a name="index-Graham_002c-G_002e-S_002e-200"></a><a name="index-Sevcik_002c-K_002e-C_002e-201"></a>
+ <p><a name="index-Bolch_002c-G_002e-195"></a><a name="index-Greiner_002c-S_002e-196"></a><a name="index-de-Meer_002c-H_002e-197"></a><a name="index-Trivedi_002c-K_002e-198"></a><a name="index-Lazowska_002c-E_002e-D_002e-199"></a><a name="index-Zahorjan_002c-J_002e-200"></a><a name="index-Graham_002c-G_002e-S_002e-201"></a><a name="index-Sevcik_002c-K_002e-C_002e-202"></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-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</var>)<var><a name="index-qnclosedmultimvaapprox-203"></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-204"></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-205"></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-206"></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-203"></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-204"></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-205"></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-206"></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-207"></a></var><br>
<blockquote>
- <p><a name="index-Mean-Value-Analysys-_0028MVA_0029_002c-approximate-207"></a><a name="index-Approximate-MVA-208"></a><a name="index-Closed-network_002c-multiple-classes-209"></a><a name="index-Closed-network_002c-approximate-analysis-210"></a>
+ <p><a name="index-Mean-Value-Analysys-_0028MVA_0029_002c-approximate-208"></a><a name="index-Approximate-MVA-209"></a><a name="index-Closed-network_002c-multiple-classes-210"></a><a name="index-Closed-network_002c-approximate-analysis-211"></a>
Analyze closed, multiclass queueing networks with K service
centers and C customer classes using the approximate Mean
Value Analysys (MVA) algorithm.
@@ -3776,12 +3787,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-211"></a>
+ <p><a name="index-Bard_002c-Y_002e-212"></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-212"></a>
+ <p><a name="index-Schweitzer_002c-P_002e-213"></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>,
@@ -3792,7 +3803,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-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-214"></a><a name="index-Zahorjan_002c-J_002e-215"></a><a name="index-Graham_002c-G_002e-S_002e-216"></a><a name="index-Sevcik_002c-K_002e-C_002e-217"></a>
<h4 class="subsection">6.3.5 Mixed Networks</h4>
@@ -3800,9 +3811,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-217"></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-218"></a></var><br>
<blockquote>
- <p><a name="index-Mean-Value-Analysys-_0028MVA_0029-218"></a><a name="index-mixed-network-219"></a>
+ <p><a name="index-Mean-Value-Analysys-_0028MVA_0029-219"></a><a name="index-mixed-network-220"></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
@@ -3893,14 +3904,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-220"></a><a name="index-Zahorjan_002c-J_002e-221"></a><a name="index-Graham_002c-G_002e-S_002e-222"></a><a name="index-Sevcik_002c-K_002e-C_002e-223"></a>
+ <p><a name="index-Lazowska_002c-E_002e-D_002e-221"></a><a name="index-Zahorjan_002c-J_002e-222"></a><a name="index-Graham_002c-G_002e-S_002e-223"></a><a name="index-Sevcik_002c-K_002e-C_002e-224"></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-224"></a>
+ <p><a name="index-Schwetman_002c-H_002e-225"></a>
<div class="node">
<a name="Algorithms-for-non-Product-form-QNs"></a>
@@ -3919,9 +3930,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-225"></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-226"></a></var><br>
<blockquote>
- <p><a name="index-queueing-network-with-blocking-226"></a><a name="index-blocking-queueing-network-227"></a><a name="index-closed-network_002c-finite-capacity-228"></a>
+ <p><a name="index-queueing-network-with-blocking-227"></a><a name="index-blocking-queueing-network-228"></a><a name="index-closed-network_002c-finite-capacity-229"></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.
@@ -3976,16 +3987,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-229"></a>
+ <p><a name="index-Akyildiz_002c-I_002e-F_002e-230"></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-230"></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-231"></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-232"></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-233"></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-231"></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-232"></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-233"></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-234"></a></var><br>
<blockquote>
- <p><a name="index-closed-network_002c-multiple-classes-234"></a><a name="index-closed-network_002c-finite-capacity-235"></a><a name="index-blocking-queueing-network-236"></a><a name="index-RS-blocking-237"></a>
+ <p><a name="index-closed-network_002c-multiple-classes-235"></a><a name="index-closed-network_002c-finite-capacity-236"></a><a name="index-blocking-queueing-network-237"></a><a name="index-RS-blocking-238"></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
@@ -4095,9 +4106,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-238"></a></var><br>
+— Function File: [<var>Xu</var>, <var>Rl</var>] = <b>qnopenab</b> (<var>lambda, D</var>)<var><a name="index-qnopenab-239"></a></var><br>
<blockquote>
- <p><a name="index-bounds_002c-asymptotic-239"></a><a name="index-open-network-240"></a>
+ <p><a name="index-bounds_002c-asymptotic-240"></a><a name="index-open-network-241"></a>
Compute Asymptotic Bounds for single-class, open Queueing Networks
with K service centers.
@@ -4137,14 +4148,14 @@
1984. <a href="http://www.cs.washington.edu/homes/lazowska/qsp/">http://www.cs.washington.edu/homes/lazowska/qsp/</a>. In
parti...
[truncated message content] |
|
From: <mma...@us...> - 2012-03-15 21:34:45
|
Revision: 9908
http://octave.svn.sourceforge.net/octave/?rev=9908&view=rev
Author: mmarzolla
Date: 2012-03-15 21:34:38 +0000 (Thu, 15 Mar 2012)
Log Message:
-----------
Fixed typos
Modified Paths:
--------------
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/inst/ctmc_taexps.m
Modified: trunk/octave-forge/main/queueing/doc/markovchains.txi
===================================================================
--- trunk/octave-forge/main/queueing/doc/markovchains.txi 2012-03-15 21:26:25 UTC (rev 9907)
+++ trunk/octave-forge/main/queueing/doc/markovchains.txi 2012-03-15 21:34:38 UTC (rev 9908)
@@ -53,10 +53,10 @@
The evolution of a Markov chain with finite state space @math{@{1, 2,
@dots{}, N@}} can be fully described by a stochastic matrix @math{{\bf
P}(n) = P_{i,j}(n)} such that @math{P_{i, j}(n) = P( X_{n+1} = j\ |\
-X_n = j )}. If the Markov chain is homogeneous (that is, the
+X_n = i )}. If the Markov chain is homogeneous (that is, the
transition probability matrix @math{{\bf P}(n)} is time-independent),
we can simply write @math{{\bf P} = P_{i, j}}, where @math{P_{i, j} =
-P( X_{n+1} = j\ |\ X_n = j )} for all @math{n=0, 1, 2, @dots{}}.
+P( X_{n+1} = j\ |\ X_n = i )} for all @math{n=0, 1, 2, @dots{}}.
The transition probability matrix @math{\bf P} must satisfy the
following two properties: (1) @math{P_{i, j} @geq{} 0} for all
@@ -65,9 +65,17 @@
@c
@DOCSTRING(dtmc_check_P)
+@menu
+* State occupancy probabilities (DTMC)::
+* Birth-death process (DTMC)::
+* First passage times (DTMC)::
+* Mean time to absorption (DTMC)::
+@end menu
+
@c
@c
@c
+@node State occupancy probabilities (DTMC)
@subsection State occupancy probabilities
We denote with @math{{\bf \pi}(n) = (\pi_1(n), \pi_2(n), @dots{},
@@ -112,12 +120,15 @@
@end group
@end example
-@subsection Birth-Death process
+@c
+@node Birth-death process (DTMC)
+@subsection Birth-death process
@c
@DOCSTRING(dtmc_bd)
-@subsection First passage times
+@node First passage times (DTMC)
+@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
@@ -145,6 +156,7 @@
@DOCSTRING(dtmc_fpt)
@c
+@node Mean time to absorption (DTMC)
@subsection Mean Time to Absorption
@DOCSTRING(dtmc_mtta)
@@ -179,15 +191,15 @@
@DOCSTRING(ctmc_check_Q)
@menu
-* State occupancy probabilities::
-* Birth-Death process::
-* Expected Sojourn Time::
-* Time-Averaged Expected Sojourn Time::
-* Mean Time to Absorption::
-* First Passage Times::
+* State occupancy probabilities (CTMC)::
+* Birth-death process (CTMC)::
+* Expected sojourn times (CTMC)::
+* Time-averaged expected sojourn times (CTMC)::
+* Mean time to absorption (CTMC)::
+* First passage times (CTMC)::
@end menu
-@node State occupancy probabilities
+@node State occupancy probabilities (CTMC)
@subsection State occupancy probabilities
Similarly to the discrete case, we denote with @math{{\bf \pi}(t) =
@@ -238,16 +250,16 @@
@c
@c
@c
-@node Birth-Death process
-@subsection Birth-Death process
+@node Birth-death process (CTMC)
+@subsection Birth-Death Process
@DOCSTRING(ctmc_bd)
@c
@c
@c
-@node Expected Sojourn Time
-@subsection Expected Sojourn Time
+@node Expected sojourn times (CTMC)
+@subsection Expected Sojourn Times
Given a @math{N} state continuous-time Markov Chain with infinitesimal
generator matrix @math{\bf Q}, we define the vector @math{{\bf L}(t) =
@@ -277,7 +289,7 @@
@iftex
@tex
-$$ {\bf L}(t) = \int_{u=0}^t {\bf \pi}(u) du$$
+$$ {\bf L}(t) = \int_0^t {\bf \pi}(u) du$$
@end tex
@end iftex
@ifnottex
@@ -312,8 +324,8 @@
@c
@c
@c
-@node Time-Averaged Expected Sojourn Time
-@subsection Time-Averaged Expected Sojourn Time
+@node Time-averaged expected sojourn times (CTMC)
+@subsection Time-Averaged Expected Sojourn Times
@DOCSTRING(ctmc_taexps)
@@ -328,7 +340,7 @@
@c
@c
@c
-@node Mean Time to Absorption
+@node Mean time to absorption (CTMC)
@subsection Mean Time to Absorption
If we consider a Markov Chain with absorbing states, it is possible to
@@ -400,7 +412,7 @@
@c
@c
@c
-@node First Passage Times
+@node First passage times (CTMC)
@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-15 21:26:25 UTC (rev 9907)
+++ trunk/octave-forge/main/queueing/doc/queueing.html 2012-03-15 21:34:38 UTC (rev 9908)
@@ -56,19 +56,19 @@
<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><a href="#Discrete_002dTime-Markov-Chains">4.1.4 Mean Time to Absorption</a>
+<li><a href="#State-occupancy-probabilities-_0028DTMC_0029">4.1.1 State occupancy probabilities</a>
+<li><a href="#Birth_002ddeath-process-_0028DTMC_0029">4.1.2 Birth-death process</a>
+<li><a href="#First-passage-times-_0028DTMC_0029">4.1.3 First Passage Times</a>
+<li><a href="#Mean-time-to-absorption-_0028DTMC_0029">4.1.4 Mean Time to Absorption</a>
</li></ul>
<li><a href="#Continuous_002dTime-Markov-Chains">4.2 Continuous-Time Markov Chains</a>
<ul>
-<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="#Mean-Time-to-Absorption">4.2.5 Mean Time to Absorption</a>
-<li><a href="#First-Passage-Times">4.2.6 First Passage Times</a>
+<li><a href="#State-occupancy-probabilities-_0028CTMC_0029">4.2.1 State occupancy probabilities</a>
+<li><a href="#Birth_002ddeath-process-_0028CTMC_0029">4.2.2 Birth-Death Process</a>
+<li><a href="#Expected-sojourn-times-_0028CTMC_0029">4.2.3 Expected Sojourn Times</a>
+<li><a href="#Time_002daveraged-expected-sojourn-times-_0028CTMC_0029">4.2.4 Time-Averaged Expected Sojourn Times</a>
+<li><a href="#Mean-time-to-absorption-_0028CTMC_0029">4.2.5 Mean Time to Absorption</a>
+<li><a href="#First-passage-times-_0028CTMC_0029">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>
@@ -805,10 +805,10 @@
<p>The evolution of a Markov chain with finite state space {1, 2,
<small class="dots">...</small>, N} can be fully described by a stochastic matrix \bf
P(n) = P_i,j(n) such that P_i, j(n) = P( X_n+1 = j\ |\
-X_n = j ). If the Markov chain is homogeneous (that is, the
+X_n = i ). If the Markov chain is homogeneous (that is, the
transition probability matrix \bf P(n) is time-independent),
we can simply write \bf P = P_i, j, where P_i, j =
-P( X_n+1 = j\ |\ X_n = j ) for all n=0, 1, 2, <small class="dots">...</small>.
+P( X_n+1 = j\ |\ X_n = i ) for all n=0, 1, 2, <small class="dots">...</small>.
<p>The transition probability matrix \bf P must satisfy the
following two properties: (1) P_i, j ≥ 0 for all
@@ -827,6 +827,22 @@
</blockquote></div>
+<ul class="menu">
+<li><a accesskey="1" href="#State-occupancy-probabilities-_0028DTMC_0029">State occupancy probabilities (DTMC)</a>
+<li><a accesskey="2" href="#Birth_002ddeath-process-_0028DTMC_0029">Birth-death process (DTMC)</a>
+<li><a accesskey="3" href="#First-passage-times-_0028DTMC_0029">First passage times (DTMC)</a>
+<li><a accesskey="4" href="#Mean-time-to-absorption-_0028DTMC_0029">Mean time to absorption (DTMC)</a>
+</ul>
+
+<div class="node">
+<a name="State-occupancy-probabilities-(DTMC)"></a>
+<a name="State-occupancy-probabilities-_0028DTMC_0029"></a>
+<p><hr>
+Next: <a rel="next" accesskey="n" href="#Birth_002ddeath-process-_0028DTMC_0029">Birth-death process (DTMC)</a>,
+Up: <a rel="up" accesskey="u" href="#Discrete_002dTime-Markov-Chains">Discrete-Time Markov Chains</a>
+
+</div>
+
<h4 class="subsection">4.1.1 State occupancy probabilities</h4>
<p>We denote with \bf \pi(n) = (\pi_1(n), \pi_2(n), <small class="dots">...</small>,
@@ -911,8 +927,18 @@
T, ss(2)*ones(size(T)), "r;Steady State;" );
xlabel("Time Step");</pre>
</pre>
- <h4 class="subsection">4.1.2 Birth-Death process</h4>
+ <div class="node">
+<a name="Birth-death-process-(DTMC)"></a>
+<a name="Birth_002ddeath-process-_0028DTMC_0029"></a>
+<p><hr>
+Next: <a rel="next" accesskey="n" href="#First-passage-times-_0028DTMC_0029">First passage times (DTMC)</a>,
+Previous: <a rel="previous" accesskey="p" href="#State-occupancy-probabilities-_0028DTMC_0029">State occupancy probabilities (DTMC)</a>,
+Up: <a rel="up" accesskey="u" href="#Discrete_002dTime-Markov-Chains">Discrete-Time Markov Chains</a>
+</div>
+
+<h4 class="subsection">4.1.2 Birth-death process</h4>
+
<p><a name="doc_002ddtmc_005fbd"></a>
<div class="defun">
@@ -942,8 +968,18 @@
</blockquote></div>
-<h4 class="subsection">4.1.3 First passage times</h4>
+<div class="node">
+<a name="First-passage-times-(DTMC)"></a>
+<a name="First-passage-times-_0028DTMC_0029"></a>
+<p><hr>
+Next: <a rel="next" accesskey="n" href="#Mean-time-to-absorption-_0028DTMC_0029">Mean time to absorption (DTMC)</a>,
+Previous: <a rel="previous" accesskey="p" href="#Birth_002ddeath-process-_0028DTMC_0029">Birth-death process (DTMC)</a>,
+Up: <a rel="up" accesskey="u" href="#Discrete_002dTime-Markov-Chains">Discrete-Time Markov Chains</a>
+</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
@@ -1001,6 +1037,15 @@
</blockquote></div>
+<div class="node">
+<a name="Mean-time-to-absorption-(DTMC)"></a>
+<a name="Mean-time-to-absorption-_0028DTMC_0029"></a>
+<p><hr>
+Previous: <a rel="previous" accesskey="p" href="#First-passage-times-_0028DTMC_0029">First passage times (DTMC)</a>,
+Up: <a rel="up" accesskey="u" href="#Discrete_002dTime-Markov-Chains">Discrete-Time Markov Chains</a>
+
+</div>
+
<h4 class="subsection">4.1.4 Mean Time to Absorption</h4>
<p><a name="doc_002ddtmc_005fmtta"></a>
@@ -1084,18 +1129,19 @@
</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>
-<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="#Mean-Time-to-Absorption">Mean Time to Absorption</a>
-<li><a accesskey="6" href="#First-Passage-Times">First Passage Times</a>
+<li><a accesskey="1" href="#State-occupancy-probabilities-_0028CTMC_0029">State occupancy probabilities (CTMC)</a>
+<li><a accesskey="2" href="#Birth_002ddeath-process-_0028CTMC_0029">Birth-death process (CTMC)</a>
+<li><a accesskey="3" href="#Expected-sojourn-times-_0028CTMC_0029">Expected sojourn times (CTMC)</a>
+<li><a accesskey="4" href="#Time_002daveraged-expected-sojourn-times-_0028CTMC_0029">Time-averaged expected sojourn times (CTMC)</a>
+<li><a accesskey="5" href="#Mean-time-to-absorption-_0028CTMC_0029">Mean time to absorption (CTMC)</a>
+<li><a accesskey="6" href="#First-passage-times-_0028CTMC_0029">First passage times (CTMC)</a>
</ul>
<div class="node">
-<a name="State-occupancy-probabilities"></a>
+<a name="State-occupancy-probabilities-(CTMC)"></a>
+<a name="State-occupancy-probabilities-_0028CTMC_0029"></a>
<p><hr>
-Next: <a rel="next" accesskey="n" href="#Birth_002dDeath-process">Birth-Death process</a>,
+Next: <a rel="next" accesskey="n" href="#Birth_002ddeath-process-_0028CTMC_0029">Birth-death process (CTMC)</a>,
Up: <a rel="up" accesskey="u" href="#Continuous_002dTime-Markov-Chains">Continuous-Time Markov Chains</a>
</div>
@@ -1177,16 +1223,16 @@
q = ctmc(Q)</pre> ⇒ q = 0.50000 0.50000
</pre>
<div class="node">
-<a name="Birth-Death-process"></a>
-<a name="Birth_002dDeath-process"></a>
+<a name="Birth-death-process-(CTMC)"></a>
+<a name="Birth_002ddeath-process-_0028CTMC_0029"></a>
<p><hr>
-Next: <a rel="next" accesskey="n" href="#Expected-Sojourn-Time">Expected Sojourn Time</a>,
-Previous: <a rel="previous" accesskey="p" href="#State-occupancy-probabilities">State occupancy probabilities</a>,
+Next: <a rel="next" accesskey="n" href="#Expected-sojourn-times-_0028CTMC_0029">Expected sojourn times (CTMC)</a>,
+Previous: <a rel="previous" accesskey="p" href="#State-occupancy-probabilities-_0028CTMC_0029">State occupancy probabilities (CTMC)</a>,
Up: <a rel="up" accesskey="u" href="#Continuous_002dTime-Markov-Chains">Continuous-Time Markov Chains</a>
</div>
-<h4 class="subsection">4.2.2 Birth-Death process</h4>
+<h4 class="subsection">4.2.2 Birth-Death Process</h4>
<p><a name="doc_002dctmc_005fbd"></a>
@@ -1218,15 +1264,16 @@
</blockquote></div>
<div class="node">
-<a name="Expected-Sojourn-Time"></a>
+<a name="Expected-sojourn-times-(CTMC)"></a>
+<a name="Expected-sojourn-times-_0028CTMC_0029"></a>
<p><hr>
-Next: <a rel="next" accesskey="n" href="#Time_002dAveraged-Expected-Sojourn-Time">Time-Averaged Expected Sojourn Time</a>,
-Previous: <a rel="previous" accesskey="p" href="#Birth_002dDeath-process">Birth-Death process</a>,
+Next: <a rel="next" accesskey="n" href="#Time_002daveraged-expected-sojourn-times-_0028CTMC_0029">Time-averaged expected sojourn times (CTMC)</a>,
+Previous: <a rel="previous" accesskey="p" href="#Birth_002ddeath-process-_0028CTMC_0029">Birth-death process (CTMC)</a>,
Up: <a rel="up" accesskey="u" href="#Continuous_002dTime-Markov-Chains">Continuous-Time Markov Chains</a>
</div>
-<h4 class="subsection">4.2.3 Expected Sojourn Time</h4>
+<h4 class="subsection">4.2.3 Expected Sojourn Times</h4>
<p>Given a N state continuous-time Markov Chain with infinitesimal
generator matrix \bf Q, we define the vector \bf L(t) =
@@ -1322,16 +1369,16 @@
ylabel("Expected sojourn time");</pre>
</pre>
<div class="node">
-<a name="Time-Averaged-Expected-Sojourn-Time"></a>
-<a name="Time_002dAveraged-Expected-Sojourn-Time"></a>
+<a name="Time-averaged-expected-sojourn-times-(CTMC)"></a>
+<a name="Time_002daveraged-expected-sojourn-times-_0028CTMC_0029"></a>
<p><hr>
-Next: <a rel="next" accesskey="n" href="#Mean-Time-to-Absorption">Mean Time to Absorption</a>,
-Previous: <a rel="previous" accesskey="p" href="#Expected-Sojourn-Time">Expected Sojourn Time</a>,
+Next: <a rel="next" accesskey="n" href="#Mean-time-to-absorption-_0028CTMC_0029">Mean time to absorption (CTMC)</a>,
+Previous: <a rel="previous" accesskey="p" href="#Expected-sojourn-times-_0028CTMC_0029">Expected sojourn times (CTMC)</a>,
Up: <a rel="up" accesskey="u" href="#Continuous_002dTime-Markov-Chains">Continuous-Time Markov Chains</a>
</div>
-<h4 class="subsection">4.2.4 Time-Averaged Expected Sojourn Time</h4>
+<h4 class="subsection">4.2.4 Time-Averaged Expected Sojourn Times</h4>
<p><a name="doc_002dctmc_005ftaexps"></a>
@@ -1364,7 +1411,7 @@
<dl>
<dt><var>M</var><dd>If this function is called with three parameters, <var>M</var><code>(i)</code>
-is the expected fraction of the interval 0,t] spent in state
+is the expected fraction of the interval [0,t] spent in state
i assuming that the state occupancy probability at time zero
is <var>p</var>. If this function is called with two parameters,
<var>M</var><code>(i)</code> is the expected fraction of time until absorption
@@ -1397,10 +1444,11 @@
ylabel("Time-averaged Expected sojourn time");</pre>
</pre>
<div class="node">
-<a name="Mean-Time-to-Absorption"></a>
+<a name="Mean-time-to-absorption-(CTMC)"></a>
+<a name="Mean-time-to-absorption-_0028CTMC_0029"></a>
<p><hr>
-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>,
+Next: <a rel="next" accesskey="n" href="#First-passage-times-_0028CTMC_0029">First passage times (CTMC)</a>,
+Previous: <a rel="previous" accesskey="p" href="#Time_002daveraged-expected-sojourn-times-_0028CTMC_0029">Time-averaged expected sojourn times (CTMC)</a>,
Up: <a rel="up" accesskey="u" href="#Continuous_002dTime-Markov-Chains">Continuous-Time Markov Chains</a>
</div>
@@ -1490,9 +1538,10 @@
<p><a name="index-Bolch_002c-G_002e-42"></a><a name="index-Greiner_002c-S_002e-43"></a><a name="index-de-Meer_002c-H_002e-44"></a><a name="index-Trivedi_002c-K_002e-45"></a>
<div class="node">
-<a name="First-Passage-Times"></a>
+<a name="First-passage-times-(CTMC)"></a>
+<a name="First-passage-times-_0028CTMC_0029"></a>
<p><hr>
-Previous: <a rel="previous" accesskey="p" href="#Mean-Time-to-Absorption">Mean Time to Absorption</a>,
+Previous: <a rel="previous" accesskey="p" href="#Mean-time-to-absorption-_0028CTMC_0029">Mean time to absorption (CTMC)</a>,
Up: <a rel="up" accesskey="u" href="#Continuous_002dTime-Markov-Chains">Continuous-Time Markov Chains</a>
</div>
@@ -5516,8 +5565,8 @@
<li><a href="#index-Approximate-MVA-179">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-79">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-134">BCMP network</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
-<li><a href="#index-Birth_002ddeath-process-30">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-Birth_002ddeath-process-30">Birth-death process</a>: <a href="#Birth_002ddeath-process-_0028CTMC_0029">Birth-death process (CTMC)</a></li>
+<li><a href="#index-Birth_002ddeath-process-11">Birth-death process</a>: <a href="#Birth_002ddeath-process-_0028DTMC_0029">Birth-death process (DTMC)</a></li>
<li><a href="#index-blocking-queueing-network-229">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-241">bounds, asymptotic</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li>
<li><a href="#index-bounds_002c-balanced-system-256">bounds, balanced system</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li>
@@ -5534,13 +5583,13 @@
<li><a href="#index-Closed-network_002c-single-class-180">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-150">closed network, single class</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
<li><a href="#index-CMVA-171">CMVA</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
-<li><a href="#index-Continuous-time-Markov-chain-25">Continuous time Markov chain</a>: <a href="#State-occupancy-probabilities">State occupancy probabilities</a></li>
+<li><a href="#index-Continuous-time-Markov-chain-25">Continuous time Markov chain</a>: <a href="#State-occupancy-probabilities-_0028CTMC_0029">State occupancy probabilities (CTMC)</a></li>
<li><a href="#index-convolution-algorithm-113">convolution algorithm</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
<li><a href="#index-copyright-295">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-34">Expected sojourn time</a>: <a href="#Expected-Sojourn-Time">Expected Sojourn Time</a></li>
-<li><a href="#index-First-passage-times-49">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-Discrete-time-Markov-chain-6">Discrete time Markov chain</a>: <a href="#State-occupancy-probabilities-_0028DTMC_0029">State occupancy probabilities (DTMC)</a></li>
+<li><a href="#index-Expected-sojourn-time-34">Expected sojourn time</a>: <a href="#Expected-sojourn-times-_0028CTMC_0029">Expected sojourn times (CTMC)</a></li>
+<li><a href="#index-First-passage-times-49">First passage times</a>: <a href="#First-passage-times-_0028CTMC_0029">First passage times (CTMC)</a></li>
+<li><a href="#index-First-passage-times-15">First passage times</a>: <a href="#First-passage-times-_0028DTMC_0029">First passage times (DTMC)</a></li>
<li><a href="#index-Jackson-network-104">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-123">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-85">M/G/1 system</a>: <a href="#The-M_002fG_002f1-System">The M/G/1 System</a></li>
@@ -5550,19 +5599,22 @@
<li><a href="#index-g_t_0040math_007bM_002fM_002f_007dinf-system-64">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-58">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-73">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-48">Markov chain, continuous time</a>: <a href="#First-Passage-Times">First Passage Times</a></li>
-<li><a href="#index-Markov-chain_002c-continuous-time-40">Markov chain, continuous time</a>: <a href="#Mean-Time-to-Absorption">Mean Time to Absorption</a></li>
-<li><a href="#index-Markov-chain_002c-continuous-time-37">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-33">Markov chain, continuous time</a>: <a href="#Expected-Sojourn-Time">Expected Sojourn Time</a></li>
-<li><a href="#index-Markov-chain_002c-continuous-time-29">Markov chain, continuous time</a>: <a href="#Birth_002dDeath-process">Birth-Death process</a></li>
-<li><a href="#index-Markov-chain_002c-continuous-time-24">Markov chain, continuous time</a>: <a href="#State-occupancy-probabilities">State occupancy probabilities</a></li>
+<li><a href="#index-Markov-chain_002c-continuous-time-48">Markov chain, continuous time</a>: <a href="#First-passage-times-_0028CTMC_0029">First passage times (CTMC)</a></li>
+<li><a href="#index-Markov-chain_002c-continuous-time-40">Markov chain, continuous time</a>: <a href="#Mean-time-to-absorption-_0028CTMC_0029">Mean time to absorption (CTMC)</a></li>
+<li><a href="#index-Markov-chain_002c-continuous-time-37">Markov chain, continuous time</a>: <a href="#Time_002daveraged-expected-sojourn-times-_0028CTMC_0029">Time-averaged expected sojourn times (CTMC)</a></li>
+<li><a href="#index-Markov-chain_002c-continuous-time-33">Markov chain, continuous time</a>: <a href="#Expected-sojourn-times-_0028CTMC_0029">Expected sojourn times (CTMC)</a></li>
+<li><a href="#index-Markov-chain_002c-continuous-time-29">Markov chain, continuous time</a>: <a href="#Birth_002ddeath-process-_0028CTMC_0029">Birth-death process (CTMC)</a></li>
+<li><a href="#index-Markov-chain_002c-continuous-time-24">Markov chain, continuous time</a>: <a href="#State-occupancy-probabilities-_0028CTMC_0029">State occupancy probabilities (CTMC)</a></li>
<li><a href="#index-Markov-chain_002c-continuous-time-21">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-14">Markov chain, discrete time</a>: <a href="#First-passage-times-_0028DTMC_0029">First passage times (DTMC)</a></li>
+<li><a href="#index-Markov-chain_002c-discrete-time-10">Markov chain, discrete time</a>: <a href="#Birth_002ddeath-process-_0028DTMC_0029">Birth-death process (DTMC)</a></li>
+<li><a href="#index-Markov-chain_002c-discrete-time-5">Markov chain, discrete time</a>: <a href="#State-occupancy-probabilities-_0028DTMC_0029">State occupancy probabilities (DTMC)</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-disctete-time-18">Markov chain, disctete time</a>: <a href="#Discrete_002dTime-Markov-Chains">Discrete-Time Markov Chains</a></li>
-<li><a href="#index-Markov-chain_002c-state-occupancy-probabilities-26">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-41">Mean time to absorption</a>: <a href="#Mean-Time-to-Absorption">Mean Time to Absorption</a></li>
-<li><a href="#index-Mean-time-to-absorption-19">Mean time to absorption</a>: <a href="#Discrete_002dTime-Markov-Chains">Discrete-Time Markov Chains</a></li>
+<li><a href="#index-Markov-chain_002c-disctete-time-18">Markov chain, disctete time</a>: <a href="#Mean-time-to-absorption-_0028DTMC_0029">Mean time to absorption (DTMC)</a></li>
+<li><a href="#index-Markov-chain_002c-state-occupancy-probabilities-26">Markov chain, state occupancy probabilities</a>: <a href="#State-occupancy-probabilities-_0028CTMC_0029">State occupancy probabilities (CTMC)</a></li>
+<li><a href="#index-Markov-chain_002c-stationary-probabilities-7">Markov chain, stationary probabilities</a>: <a href="#State-occupancy-probabilities-_0028DTMC_0029">State occupancy probabilities (DTMC)</a></li>
+<li><a href="#index-Mean-time-to-absorption-41">Mean time to absorption</a>: <a href="#Mean-time-to-absorption-_0028CTMC_0029">Mean time to absorption (CTMC)</a></li>
+<li><a href="#index-Mean-time-to-absorption-19">Mean time to absorption</a>: <a href="#Mean-time-to-absorption-_0028DTMC_0029">Mean time to absorption (DTMC)</a></li>
<li><a href="#index-Mean-Value-Analysys-_0028MVA_0029-149">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-178">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-221">mixed network</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
@@ -5575,9 +5627,9 @@
<li><a href="#index-queueing-network-with-blocking-228">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-88">queueing networks</a>: <a href="#Queueing-Networks">Queueing Networks</a></li>
<li><a href="#index-RS-blocking-239">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-27">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-38">Time-alveraged sojourn time</a>: <a href="#Time_002dAveraged-Expected-Sojourn-Time">Time-Averaged Expected Sojourn Time</a></li>
+<li><a href="#index-Stationary-probabilities-27">Stationary probabilities</a>: <a href="#State-occupancy-probabilities-_0028CTMC_0029">State occupancy probabilities (CTMC)</a></li>
+<li><a href="#index-Stationary-probabilities-8">Stationary probabilities</a>: <a href="#State-occupancy-probabilities-_0028DTMC_0029">State occupancy probabilities (DTMC)</a></li>
+<li><a href="#index-Time_002dalveraged-sojourn-time-38">Time-alveraged sojourn time</a>: <a href="#Time_002daveraged-expected-sojourn-times-_0028CTMC_0029">Time-averaged expected sojourn times (CTMC)</a></li>
<li><a href="#index-traffic-intensity-65">traffic intensity</a>: <a href="#The-M_002fM_002finf-System">The M/M/inf System</a></li>
<li><a href="#index-warranty-294">warranty</a>: <a href="#Copying">Copying</a></li>
</ul><div class="node">
@@ -5594,18 +5646,18 @@
<ul class="index-fn" compact>
-<li><a href="#index-ctmc-22"><code>ctmc</code></a>: <a href="#State-occupancy-probabilities">State occupancy probabilities</a></li>
-<li><a href="#index-ctmc_005fbd-28"><code>ctmc_bd</code></a>: <a href="#Birth_002dDeath-process">Birth-Death process</a></li>
+<li><a href="#index-ctmc-22"><code>ctmc</code></a>: <a href="#State-occupancy-probabilities-_0028CTMC_0029">State occupancy probabilities (CTMC)</a></li>
+<li><a href="#index-ctmc_005fbd-28"><code>ctmc_bd</code></a>: <a href="#Birth_002ddeath-process-_0028CTMC_0029">Birth-death process (CTMC)</a></li>
<li><a href="#index-ctmc_005fcheck_005fQ-20"><code>ctmc_check_Q</code></a>: <a href="#Continuous_002dTime-Markov-Chains">Continuous-Time Markov Chains</a></li>
-<li><a href="#index-ctmc_005fexps-31"><code>ctmc_exps</code></a>: <a href="#Expected-Sojourn-Time">Expected Sojourn Time</a></li>
-<li><a href="#index-ctmc_005ffpt-46"><code>ctmc_fpt</code></a>: <a href="#First-Passage-Times">First Passage Times</a></li>
-<li><a href="#index-ctmc_005fmtta-39"><code>ctmc_mtta</code></a>: <a href="#Mean-Time-to-Absorption">Mean Time to Absorption</a></li>
-<li><a href="#index-ctmc_005ftaexps-35"><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-ctmc_005fexps-31"><code>ctmc_exps</code></a>: <a href="#Expected-sojourn-times-_0028CTMC_0029">Expected sojourn times (CTMC)</a></li>
+<li><a href="#index-ctmc_005ffpt-46"><code>ctmc_fpt</code></a>: <a href="#First-passage-times-_0028CTMC_0029">First passage times (CTMC)</a></li>
+<li><a href="#index-ctmc_005fmtta-39"><code>ctmc_mtta</code></a>: <a href="#Mean-time-to-absorption-_0028CTMC_0029">Mean time to absorption (CTMC)</a></li>
+<li><a href="#index-ctmc_005ftaexps-35"><code>ctmc_taexps</code></a>: <a href="#Time_002daveraged-expected-sojourn-times-_0028CTMC_0029">Time-averaged expected sojourn times (CTMC)</a></li>
+<li><a href="#index-dtmc-3"><code>dtmc</code></a>: <a href="#State-occupancy-probabilities-_0028DTMC_0029">State occupancy probabilities (DTMC)</a></li>
+<li><a href="#index-dtmc_005fbd-9"><code>dtmc_bd</code></a>: <a href="#Birth_002ddeath-process-_0028DTMC_0029">Birth-death process (DTMC)</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-dtmc_005fmtta-16"><code>dtmc_mtta</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="#First-passage-times-_0028DTMC_0029">First passage times (DTMC)</a></li>
+<li><a href="#index-dtmc_005fmtta-16"><code>dtmc_mtta</code></a>: <a href="#Mean-time-to-absorption-_0028DTMC_0029">Mean time to absorption (DTMC)</a></li>
<li><a href="#index-population_005fmix-284"><code>population_mix</code></a>: <a href="#Utility-functions">Utility functions</a></li>
<li><a href="#index-qnammm-78"><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-278"><code>qnclosed</code></a>: <a href="#Utility-functions">Utility functions</a></li>
@@ -5662,7 +5714,7 @@
<li><a href="#index-Bolch_002c-G_002e-66">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-59">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-52">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-42">Bolch, G.</a>: <a href="#Mean-Time-to-Absorption">Mean Time to Absorption</a></li>
+<li><a href="#index-Bolch_002c-G_002e-42">Bolch, G.</a>: <a href="#Mean-time-to-absorption-_0028CTMC_0029">Mean time to absorption (CTMC)</a></li>
<li><a href="#index-Buzen_002c-J_002e-P_002e-114">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-269">Casale, G.</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li>
<li><a href="#index-Casale_002c-G_002e-172">Casale, G.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
@@ -5672,7 +5724,7 @@
<li><a href="#index-de-Meer_002c-H_002e-68">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-61">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-54">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-44">de Meer, H.</a>: <a href="#Mean-Time-to-Absorption">Mean Time to Absorption</a></li>
+<li><a href="#index-de-Meer_002c-H_002e-44">de Meer, H.</a>: <a href="#Mean-time-to-absorption-_0028CTMC_0029">Mean time to absorption (CTMC)</a></li>
<li><a href="#index-Graham_002c-G_002e-S_002e-245">Graham, G. S.</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li>
<li><a href="#index-Graham_002c-G_002e-S_002e-144">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-106">Greiner, S.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
@@ -5681,7 +5733,7 @@
<li><a href="#index-Greiner_002c-S_002e-67">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-60">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-53">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-43">Greiner, S.</a>: <a href="#Mean-Time-to-Absorption">Mean Time to Absorption</a></li>
+<li><a href="#index-Greiner_002c-S_002e-43">Greiner, S.</a>: <a href="#Mean-time-to-absorption-_0028CTMC_0029">Mean time to absorption (CTMC)</a></li>
<li><a href="#index-Hsieh_002c-C_002e-H-267">Hsieh, C. H</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li>
<li><a href="#index-Jain_002c-R_002e-154">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-126">Kobayashi, H.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
@@ -5704,7 +5756,7 @@
<li><a href="#index-Trivedi_002c-K_002e-69">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-62">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-55">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-45">Trivedi, K.</a>: <a href="#Mean-Time-to-Absorption">Mean Time to Absorption</a></li>
+<li><a href="#index-Trivedi_002c-K_002e-45">Trivedi, K.</a>: <a href="#Mean-time-to-absorption-_0028CTMC_0029">Mean time to absorption (CTMC)</a></li>
<li><a href="#index-Wong_002c-E_002e-293">Wong, E.</a>: <a href="#Utility-functions">Utility functions</a></li>
<li><a href="#index-Zahorjan_002c-J_002e-292">Zahorjan, J.</a>: <a href="#Utility-functions">Utility functions</a></li>
<li><a href="#index-Zahorjan_002c-J_002e-244">Zahorjan, J.</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li>
Modified: trunk/octave-forge/main/queueing/doc/queueing.pdf
===================================================================
(Binary files differ)
Modified: trunk/octave-forge/main/queueing/inst/ctmc_taexps.m
===================================================================
--- trunk/octave-forge/main/queueing/inst/ctmc_taexps.m 2012-03-15 21:26:25 UTC (rev 9907)
+++ trunk/octave-forge/main/queueing/inst/ctmc_taexps.m 2012-03-15 21:34:38 UTC (rev 9908)
@@ -53,7 +53,7 @@
##
## @item M
## If this function is called with three parameters, @code{@var{M}(i)}
-## is the expected fraction of the interval @math{0,t]} spent in state
+## is the expected fraction of the interval @math{[0,t]} spent in state
## @math{i} assuming that the state occupancy probability at time zero
## is @var{p}. If this function is called with two parameters,
## @code{@var{M}(i)} is the expected fraction of time until absorption
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <mma...@us...> - 2012-03-16 22:29:26
|
Revision: 9928
http://octave.svn.sourceforge.net/octave/?rev=9928&view=rev
Author: mmarzolla
Date: 2012-03-16 22:29:17 +0000 (Fri, 16 Mar 2012)
Log Message:
-----------
fixed test cases
Modified Paths:
--------------
trunk/octave-forge/main/queueing/doc/queueing.html
trunk/octave-forge/main/queueing/doc/queueing.pdf
trunk/octave-forge/main/queueing/inst/ctmc_mtta.m
trunk/octave-forge/main/queueing/inst/dtmc_check_P.m
trunk/octave-forge/main/queueing/inst/dtmc_fpt.m
trunk/octave-forge/main/queueing/inst/dtmc_mtta.m
trunk/octave-forge/main/queueing/inst/qnvisits.m
Modified: trunk/octave-forge/main/queueing/doc/queueing.html
===================================================================
--- trunk/octave-forge/main/queueing/doc/queueing.html 2012-03-16 19:17:13 UTC (rev 9927)
+++ trunk/octave-forge/main/queueing/doc/queueing.html 2012-03-16 22:29:17 UTC (rev 9928)
@@ -817,13 +817,13 @@
<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>
+— Function File: [<var>r</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.
+Check if <var>P</var> is a valid transition probability matrix. If <var>P</var>
+is valid, <var>r</var> is the size (number of rows or columns) of <var>P</var>.
+If <var>P</var> is not a transition probability matrix, <var>r</var> is set to
+zero, and <var>err</var> to an appropriate error string.
</blockquote></div>
@@ -871,14 +871,14 @@
— 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-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
-probability matrix <var>P</var>. With three arguments, compute the
-probability vector <var>p</var><code>(1), ..., </code><var>p</var><code>(N)</code>
-after <var>n</var> steps, given initial probability vector <var>p0</var> at
-time 0.
+ <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><a name="index-Markov-chain_002c-transient-probabilities-9"></a><a name="index-Transient-probabilities-10"></a>
+Compute steady-state or transient state occupancy probabilities for a
+Discrete-Time Markov Chain. With a single argument, compute the
+steady-state occupancy probability vector <var>p</var><code>(1), ...,
+</code><var>p</var><code>(N)</code> given the N \times N transition probability matrix
+<var>P</var>. With three arguments, compute the state occupancy
+probabilities <var>p</var><code>(1), ..., </code><var>p</var><code>(N)</code> after <var>n</var>
+steps, given initial occupancy probability vector <var>p0</var>.
<p><strong>INPUTS</strong>
@@ -942,9 +942,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-9"></a></var><br>
+— Function File: <var>P</var> = <b>dtmc_bd</b> (<var>birth, death</var>)<var><a name="index-dtmc_005fbd-11"></a></var><br>
<blockquote>
- <p><a name="index-Markov-chain_002c-discrete-time-10"></a><a name="index-Birth_002ddeath-process-11"></a>
+ <p><a name="index-Markov-chain_002c-discrete-time-12"></a><a name="index-Birth_002ddeath-process-13"></a>
Returns the N \times N transition probability matrix P
for a birth-death process with given rates.
@@ -994,15 +994,14 @@
<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-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>
+— Function File: <var>M</var> = <b>dtmc_fpt</b> (<var>P</var>)<var><a name="index-dtmc_005ffpt-14"></a></var><br>
<blockquote>
- <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
-1 \leq i, j \leq N. If called with three arguments, returns
-the single value <var>m</var><code> = </code><var>M</var><code>(i,j)</code>.
+ <p><a name="index-First-passage-times-15"></a><a name="index-Mean-recurrence-times-16"></a>
+Compute the mean first passage times matrix \bf M, such that
+<var>M</var><code>(i,j)</code> is the average number of transitions before state
+<var>j</var> is reached, starting from state <var>i</var>, for all 1 \leq
+i, j \leq N. Diagonal elements of <var>M</var> are the mean recurrence
+times.
<p><strong>INPUTS</strong>
@@ -1013,26 +1012,17 @@
P_i j = 1), and the rank of <var>P</var> must be equal to its
dimension.
- <br><dt><var>i</var><dd>Initial state.
-
- <br><dt><var>j</var><dd>Destination state. If <var>j</var> is a vector, returns the mean first passage
-time to any state in <var>j</var>.
-
</dl>
<p><strong>OUTPUTS</strong>
<dl>
-<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
+<dt><var>M</var><dd><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>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>.
+<var>M</var><code>(i,i)</code> is the <em>mean recurrence time</em> of state
+i, 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
-for the first time, starting from state <var>i</var>.
-
</dl>
</blockquote></div>
@@ -1051,10 +1041,10 @@
<p><a name="doc_002ddtmc_005fmtta"></a>
<div class="defun">
-— Function File: [<var>t</var> <var>B</var>] = <b>dtmc_mtta</b> (<var>P</var>)<var><a name="index-dtmc_005fmtta-16"></a></var><br>
-— Function File: [<var>t</var> <var>B</var>] = <b>dtmc_mtta</b> (<var>P, p0</var>)<var><a name="index-dtmc_005fmtta-17"></a></var><br>
+— Function File: [<var>t</var> <var>B</var>] = <b>dtmc_mtta</b> (<var>P</var>)<var><a name="index-dtmc_005fmtta-17"></a></var><br>
+— Function File: [<var>t</var> <var>B</var>] = <b>dtmc_mtta</b> (<var>P, p0</var>)<var><a name="index-dtmc_005fmtta-18"></a></var><br>
<blockquote>
- <p><a name="index-Markov-chain_002c-disctete-time-18"></a><a name="index-Mean-time-to-absorption-19"></a>
+ <p><a name="index-Markov-chain_002c-disctete-time-19"></a><a name="index-Mean-time-to-absorption-20"></a><a name="index-Absorption-probabilities-21"></a>
Compute the expected number of steps before absorption for the
DTMC with N \times N transition probability matrix <var>P</var>.
@@ -1079,9 +1069,10 @@
<br><dt><var>B</var><dd>When called with a single argument, <var>B</var> is a N \times N
matrix where <var>B</var><code>(i,j)</code> is the probability of being absorbed
-in state j, starting from state i; if j is not
-absorbing, <var>B</var><code>(i,j) = 0</code>; if i is absorbing, then
-<var>B</var><code>(i,i) = 1</code>. When called with two arguments, <var>B</var> is a
+in state j, starting from transient state i; if
+j is not absorbing, <var>B</var><code>(i,j) = 0</code>; if i is
+absorbing, then <var>B</var><code>(i,i) = 1</code>.
+When called with two arguments, <var>B</var> is a
vector with N elements where <var>B</var><code>(j)</code> is the
probability of being absorbed in state <var>j</var>, given initial state
occupancy probabilities <var>p0</var>.
@@ -1118,9 +1109,9 @@
<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-20"></a></var><br>
+— Function File: [<var>result</var> <var>err</var>] = <b>ctmc_check_Q</b> (<var>Q</var>)<var><a name="index-ctmc_005fcheck_005fQ-22"></a></var><br>
<blockquote>
- <p><a name="index-Markov-chain_002c-continuous-time-21"></a>
+ <p><a name="index-Markov-chain_002c-continuous-time-23"></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
@@ -1171,10 +1162,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-22"></a></var><br>
-— Function File: <var>p</var> = <b>ctmc</b> (<var>Q, t. p0</var>)<var><a name="index-ctmc-23"></a></var><br>
+— Function File: <var>p</var> = <b>ctmc</b> (<var>Q</var>)<var><a name="index-ctmc-24"></a></var><br>
+— Function File: <var>p</var> = <b>ctmc</b> (<var>Q, t. p0</var>)<var><a name="index-ctmc-25"></a></var><br>
<blockquote>
- <p><a name="index-Markov-chain_002c-continuous-time-24"></a><a name="index-Continuous-time-Markov-chain-25"></a><a name="index-Markov-chain_002c-state-occupancy-probabilities-26"></a><a name="index-Stationary-probabilities-27"></a>
+ <p><a name="index-Markov-chain_002c-continuous-time-26"></a><a name="index-Continuous-time-Markov-chain-27"></a><a name="index-Markov-chain_002c-state-occupancy-probabilities-28"></a><a name="index-Stationary-probabilities-29"></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
@@ -1237,9 +1228,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-28"></a></var><br>
+— Function File: <var>Q</var> = <b>ctmc_bd</b> (<var>birth, death</var>)<var><a name="index-ctmc_005fbd-30"></a></var><br>
<blockquote>
- <p><a name="index-Markov-chain_002c-continuous-time-29"></a><a name="index-Birth_002ddeath-process-30"></a>
+ <p><a name="index-Markov-chain_002c-continuous-time-31"></a><a name="index-Birth_002ddeath-process-32"></a>
Returns the N \times N infinitesimal generator matrix Q
for a birth-death process with given rates.
@@ -1300,10 +1291,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-31"></a></var><br>
-— Function File: <var>L</var> = <b>ctmc_exps</b> (<var>Q, p</var>)<var><a name="index-ctmc_005fexps-32"></a></var><br>
+— Function File: <var>L</var> = <b>ctmc_exps</b> (<var>Q, t, p </var>)<var><a name="index-ctmc_005fexps-33"></a></var><br>
+— Function File: <var>L</var> = <b>ctmc_exps</b> (<var>Q, p</var>)<var><a name="index-ctmc_005fexps-34"></a></var><br>
<blockquote>
- <p><a name="index-Markov-chain_002c-continuous-time-33"></a><a name="index-Expected-sojourn-time-34"></a>
+ <p><a name="index-Markov-chain_002c-continuous-time-35"></a><a name="index-Expected-sojourn-time-36"></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
@@ -1383,10 +1374,10 @@
<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-35"></a></var><br>
-— Function File: <var>M</var> = <b>ctmc_taexps</b> (<var>Q, p</var>)<var><a name="index-ctmc_005ftaexps-36"></a></var><br>
+— Function File: <var>M</var> = <b>ctmc_taexps</b> (<var>Q, t, p</var>)<var><a name="index-ctmc_005ftaexps-37"></a></var><br>
+— Function File: <var>M</var> = <b>ctmc_taexps</b> (<var>Q, p</var>)<var><a name="index-ctmc_005ftaexps-38"></a></var><br>
<blockquote>
- <p><a name="index-Markov-chain_002c-continuous-time-37"></a><a name="index-Time_002dalveraged-sojourn-time-38"></a>
+ <p><a name="index-Markov-chain_002c-continuous-time-39"></a><a name="index-Time_002dalveraged-sojourn-time-40"></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] (or until
absorption) spent in state i, assuming that the state
@@ -1473,9 +1464,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-39"></a></var><br>
+— Function File: <var>t</var> = <b>ctmc_mtta</b> (<var>Q, p</var>)<var><a name="index-ctmc_005fmtta-41"></a></var><br>
<blockquote>
- <p><a name="index-Markov-chain_002c-continuous-time-40"></a><a name="index-Mean-time-to-absorption-41"></a>
+ <p><a name="index-Markov-chain_002c-continuous-time-42"></a><a name="index-Mean-time-to-absorption-43"></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
@@ -1536,7 +1527,7 @@
Performance Evaluation with Computer Science Applications</cite>, Wiley,
1998.
- <p><a name="index-Bolch_002c-G_002e-42"></a><a name="index-Greiner_002c-S_002e-43"></a><a name="index-de-Meer_002c-H_002e-44"></a><a name="index-Trivedi_002c-K_002e-45"></a>
+ <p><a name="index-Bolch_002c-G_002e-44"></a><a name="index-Greiner_002c-S_002e-45"></a><a name="index-de-Meer_002c-H_002e-46"></a><a name="index-Trivedi_002c-K_002e-47"></a>
<div class="node">
<a name="First-passage-times-(CTMC)"></a>
<a name="First-passage-times-_0028CTMC_0029"></a>
@@ -1551,10 +1542,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-46"></a></var><br>
-— Function File: <var>m</var> = <b>ctmc_fpt</b> (<var>Q, i, j</var>)<var><a name="index-ctmc_005ffpt-47"></a></var><br>
+— Function File: <var>M</var> = <b>ctmc_fpt</b> (<var>Q</var>)<var><a name="index-ctmc_005ffpt-48"></a></var><br>
+— Function File: <var>m</var> = <b>ctmc_fpt</b> (<var>Q, i, j</var>)<var><a name="index-ctmc_005ffpt-49"></a></var><br>
<blockquote>
- <p><a name="index-Markov-chain_002c-continuous-time-48"></a><a name="index-First-passage-times-49"></a>
+ <p><a name="index-Markov-chain_002c-continuous-time-50"></a><a name="index-First-passage-times-51"></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
@@ -1660,9 +1651,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-50"></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-52"></a></var><br>
<blockquote>
- <p><a name="index-g_t_0040math_007bM_002fM_002f1_007d-system-51"></a>
+ <p><a name="index-g_t_0040math_007bM_002fM_002f1_007d-system-53"></a>
Compute utilization, response time, average number of requests
and throughput for a M/M/1 queue.
@@ -1707,7 +1698,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-52"></a><a name="index-Greiner_002c-S_002e-53"></a><a name="index-de-Meer_002c-H_002e-54"></a><a name="index-Trivedi_002c-K_002e-55"></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/m -->
<div class="node">
<a name="The-M%2fM%2fm-System"></a>
@@ -1733,10 +1724,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-56"></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-57"></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-58"></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-59"></a></var><br>
<blockquote>
- <p><a name="index-g_t_0040math_007bM_002fM_002fm_007d-system-58"></a>
+ <p><a name="index-g_t_0040math_007bM_002fM_002fm_007d-system-60"></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.
@@ -1788,7 +1779,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-59"></a><a name="index-Greiner_002c-S_002e-60"></a><a name="index-de-Meer_002c-H_002e-61"></a><a name="index-Trivedi_002c-K_002e-62"></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/inf -->
<div class="node">
<a name="The-M%2fM%2finf-System"></a>
@@ -1811,7 +1802,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-63"></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-65"></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
@@ -1819,7 +1810,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-64"></a>
+ <p><a name="index-g_t_0040math_007bM_002fM_002f_007dinf-system-66"></a>
<p><strong>INPUTS</strong>
@@ -1837,7 +1828,7 @@
different from the utilization, which in the case of M/M/\infty
centers is always zero.
- <p><a name="index-traffic-intensity-65"></a>
+ <p><a name="index-traffic-intensity-67"></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
@@ -1865,7 +1856,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-66"></a><a name="index-Greiner_002c-S_002e-67"></a><a name="index-de-Meer_002c-H_002e-68"></a><a name="index-Trivedi_002c-K_002e-69"></a>
+ <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>
<!-- M/M/1/k -->
<div class="node">
<a name="The-M%2fM%2f1%2fK-System"></a>
@@ -1889,9 +1880,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-70"></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-72"></a></var><br>
<blockquote>
- <p><a name="index-g_t_0040math_007bM_002fM_002f1_002fK_007d-system-71"></a>
+ <p><a name="index-g_t_0040math_007bM_002fM_002f1_002fK_007d-system-73"></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
@@ -1958,9 +1949,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-72"></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-74"></a></var><br>
<blockquote>
- <p><a name="index-g_t_0040math_007bM_002fM_002fm_002fK_007d-system-73"></a>
+ <p><a name="index-g_t_0040math_007bM_002fM_002fm_002fK_007d-system-75"></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
@@ -2018,7 +2009,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-74"></a><a name="index-Greiner_002c-S_002e-75"></a><a name="index-de-Meer_002c-H_002e-76"></a><a name="index-Trivedi_002c-K_002e-77"></a>
+ <p><a name="index-Bolch_002c-G_002e-76"></a><a name="index-Greiner_002c-S_002e-77"></a><a name="index-de-Meer_002c-H_002e-78"></a><a name="index-Trivedi_002c-K_002e-79"></a>
<!-- Approximate M/M/m -->
<div class="node">
@@ -2040,9 +2031,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-78"></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-80"></a></var><br>
<blockquote>
- <p><a name="index-Asymmetric-_0040math_007bM_002fM_002fm_007d-system-79"></a>
+ <p><a name="index-Asymmetric-_0040math_007bM_002fM_002fm_007d-system-81"></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
@@ -2089,7 +2080,7 @@
and Markov Chains: Modeling and Performance Evaluation with Computer
Science Applications</cite>, Wiley, 1998
- <p><a name="index-Bolch_002c-G_002e-80"></a><a name="index-Greiner_002c-S_002e-81"></a><a name="index-de-Meer_002c-H_002e-82"></a><a name="index-Trivedi_002c-K_002e-83"></a>
+ <p><a name="index-Bolch_002c-G_002e-82"></a><a name="index-Greiner_002c-S_002e-83"></a><a name="index-de-Meer_002c-H_002e-84"></a><a name="index-Trivedi_002c-K_002e-85"></a>
<div class="node">
<a name="The-M%2fG%2f1-System"></a>
<a name="The-M_002fG_002f1-System"></a>
@@ -2105,9 +2096,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-84"></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-86"></a></var><br>
<blockquote>
- <p><a name="index-g_t_0040math_007bM_002fG_002f1_007d-system-85"></a>
+ <p><a name="index-g_t_0040math_007bM_002fG_002f1_007d-system-87"></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
@@ -2164,9 +2155,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-86"></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-88"></a></var><br>
<blockquote>
- <p><a name="index-g_t_0040math_007bM_002fH_005fm_002f1_007d-system-87"></a>
+ <p><a name="index-g_t_0040math_007bM_002fH_005fm_002f1_007d-system-89"></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:
@@ -2248,7 +2239,7 @@
<li><a accesskey="6" href="#Utility-functions">Utility functions</a>: Utility functions to compute miscellaneous quantities
</ul>
-<p><a name="index-queueing-networks-88"></a>
+<p><a name="index-queueing-networks-90"></a>
<!-- INTRODUCTION -->
<div class="node">
<a name="Introduction-to-QNs"></a>
@@ -2509,13 +2500,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-89"></a></var><br>
-— Function File: <var>Q</var> = <b>qnmknode</b> (<var>"m/m/m-fcfs", S, m</var>)<var><a name="index-qnmknode-90"></a></var><br>
-— Function File: <var>Q</var> = <b>qnmknode</b> (<var>"m/m/1-lcfs-pr", S</var>)<var><a name="index-qnmknode-91"></a></var><br>
-— Function File: <var>Q</var> = <b>qnmknode</b> (<var>"-/g/1-ps", S</var>)<var><a name="index-qnmknode-92"></a></var><br>
-— Function File: <var>Q</var> = <b>qnmknode</b> (<var>"-/g/1-ps", S, s2</var>)<var><a name="index-qnmknode-93"></a></var><br>
-— Function File: <var>Q</var> = <b>qnmknode</b> (<var>"-/g/inf", S</var>)<var><a name="index-qnmknode-94"></a></var><br>
-— Function File: <var>Q</var> = <b>qnmknode</b> (<var>"-/g/inf", S, s2</var>)<var><a name="index-qnmknode-95"></a></var><br>
+— Function File: <var>Q</var> = <b>qnmknode</b> (<var>"m/m/m-fcfs", S</var>)<var><a name="index-qnmknode-91"></a></var><br>
+— Function File: <var>Q</var> = <b>qnmknode</b> (<var>"m/m/m-fcfs", S, m</var>)<var><a name="index-qnmknode-92"></a></var><br>
+— Function File: <var>Q</var> = <b>qnmknode</b> (<var>"m/m/1-lcfs-pr", S</var>)<var><a name="index-qnmknode-93"></a></var><br>
+— Function File: <var>Q</var> = <b>qnmknode</b> (<var>"-/g/1-ps", S</var>)<var><a name="index-qnmknode-94"></a></var><br>
+— Function File: <var>Q</var> = <b>qnmknode</b> (<var>"-/g/1-ps", S, s2</var>)<var><a name="index-qnmknode-95"></a></var><br>
+— Function File: <var>Q</var> = <b>qnmknode</b> (<var>"-/g/inf", S</var>)<var><a name="index-qnmknode-96"></a></var><br>
+— Function File: <var>Q</var> = <b>qnmknode</b> (<var>"-/g/inf", S, s2</var>)<var><a name="index-qnmknode-97"></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
@@ -2584,10 +2575,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-96"></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-97"></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-98"></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-99"></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-98"></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-99"></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-100"></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-101"></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.
@@ -2765,11 +2756,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-100"></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-101"></a></var><br>
-— Function File: <var>pr</var> = <b>qnjackson</b> (<var>lambda, S, P, m, k</var>)<var><a name="index-qnjackson-102"></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-102"></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-103"></a></var><br>
+— Function File: <var>pr</var> = <b>qnjackson</b> (<var>lambda, S, P, m, k</var>)<var><a name="index-qnjackson-104"></a></var><br>
<blockquote>
- <p><a name="index-open-network_002c-single-class-103"></a><a name="index-Jackson-network-104"></a>
+ <p><a name="index-open-network_002c-single-class-105"></a><a name="index-Jackson-network-106"></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
@@ -2851,7 +2842,7 @@
Performance Evaluation with Computer Science Applications</cite>, Wiley,
1998, pp. 284–287.
- <p><a name="index-Bolch_002c-G_002e-105"></a><a name="index-Greiner_002c-S_002e-106"></a><a name="index-de-Meer_002c-H_002e-107"></a><a name="index-Trivedi_002c-K_002e-108"></a>
+ <p><a name="index-Bolch_002c-G_002e-107"></a><a name="index-Greiner_002c-S_002e-108"></a><a name="index-de-Meer_002c-H_002e-109"></a><a name="index-Trivedi_002c-K_002e-110"></a>
<h4 class="subsection">6.3.2 The Convolution Algorithm</h4>
@@ -2885,10 +2876,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-109"></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-110"></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-111"></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-112"></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>
+ <p><a name="index-closed-network-113"></a><a name="index-normalization-constant-114"></a><a name="index-convolution-algorithm-115"></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
@@ -2979,20 +2970,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-114"></a>
+ <p><a name="index-Buzen_002c-J_002e-P_002e-116"></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-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-117"></a><a name="index-Greiner_002c-S_002e-118"></a><a name="index-de-Meer_002c-H_002e-119"></a><a name="index-Trivedi_002c-K_002e-120"></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-119"></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-121"></a></var><br>
<blockquote>
- <p><a name="index-closed-network-120"></a><a name="index-normalization-constant-121"></a><a name="index-convolution-algorithm-122"></a><a name="index-load_002ddependent-service-center-123"></a>
+ <p><a name="index-closed-network-122"></a><a name="index-normalization-constant-123"></a><a name="index-convolution-algorithm-124"></a><a name="index-load_002ddependent-service-center-125"></a>
This function implements the <em>convolution algorithm</em> for
product-form, single-class closed queueing networks with general
load-dependent service centers.
@@ -3052,7 +3043,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-124"></a>
+ <p><a name="index-Schwetman_002c-H_002e-126"></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
@@ -3060,7 +3051,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-125"></a><a name="index-Kobayashi_002c-H_002e-126"></a>
+ <p><a name="index-Reiser_002c-M_002e-127"></a><a name="index-Kobayashi_002c-H_002e-128"></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,
@@ -3072,7 +3063,7 @@
function f_i defined in Schwetman, <code>Some Computational
Aspects of Queueing Network Models</code>.
- <p><a name="index-Bolch_002c-G_002e-127"></a><a name="index-Greiner_002c-S_002e-128"></a><a name="index-de-Meer_002c-H_002e-129"></a><a name="index-Trivedi_002c-K_002e-130"></a>
+ <p><a name="index-Bolch_002c-G_002e-129"></a><a name="index-Greiner_002c-S_002e-130"></a><a name="index-de-Meer_002c-H_002e-131"></a><a name="index-Trivedi_002c-K_002e-132"></a>
<h4 class="subsection">6.3.3 Open networks</h4>
@@ -3080,10 +3071,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-131"></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-132"></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-133"></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-134"></a></var><br>
<blockquote>
- <p><a name="index-open-network_002c-single-class-133"></a><a name="index-BCMP-network-134"></a>
+ <p><a name="index-open-network_002c-single-class-135"></a><a name="index-BCMP-network-136"></a>
Analyze open, single class BCMP queueing networks.
<p>This function works for a subset of BCMP single-class open networks
@@ -3176,16 +3167,16 @@
Networks and Markov Chains: Modeling and Performance Evaluation with
Computer Science Applications</cite>, Wiley, 1998.
- <p><a name="index-Bolch_002c-G_002e-135"></a><a name="index-Greiner_002c-S_002e-136"></a><a name="index-de-Meer_002c-H_002e-137"></a><a name="index-Trivedi_002c-K_002e-138"></a>
+ <p><a name="index-Bolch_002c-G_002e-137"></a><a name="index-Greiner_002c-S_002e-138"></a><a name="index-de-Meer_002c-H_002e-139"></a><a name="index-Trivedi_002c-K_002e-140"></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-139"></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-140"></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-141"></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-142"></a></var><br>
<blockquote>
- <p><a name="index-open-network_002c-multiple-classes-141"></a>
+ <p><a name="index-open-network_002c-multiple-classes-143"></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
@@ -3250,7 +3241,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-142"></a><a name="index-Zahorjan_002c-J_002e-143"></a><a name="index-Graham_002c-G_002e-S_002e-144"></a><a name="index-Sevcik_002c-K_002e-C_002e-145"></a>
+ <p><a name="index-Lazowska_002c-E_002e-D_002e-144"></a><a name="index-Zahorjan_002c-J_002e-145"></a><a name="index-Graham_002c-G_002e-S_002e-146"></a><a name="index-Sevcik_002c-K_002e-C_002e-147"></a>
<h4 class="subsection">6.3.4 Closed Networks</h4>
@@ -3258,11 +3249,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-146"></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-147"></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-148"></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-148"></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-149"></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-150"></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-normalization-constant-151"></a>
+ <p><a name="index-Mean-Value-Analysys-_0028MVA_0029-151"></a><a name="index-closed-network_002c-single-class-152"></a><a name="index-normalization-constant-153"></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
@@ -3363,7 +3354,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-152"></a><a name="index-Lavenberg_002c-S_002e-S_002e-153"></a>
+ <p><a name="index-Reiser_002c-M_002e-154"></a><a name="index-Lavenberg_002c-S_002e-S_002e-155"></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)}, -->
@@ -3372,15 +3363,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-154"></a><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-Jain_002c-R_002e-156"></a><a name="index-Bolch_002c-G_002e-157"></a><a name="index-Greiner_002c-S_002e-158"></a><a name="index-de-Meer_002c-H_002e-159"></a><a name="index-Trivedi_002c-K_002e-160"></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-159"></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-160"></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-161"></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-162"></a></var><br>
<blockquote>
- <p><a name="index-Mean-Value-Analysys-_0028MVA_0029-161"></a><a name="index-closed-network_002c-single-class-162"></a><a name="index-load_002ddependent-service-center-163"></a>
+ <p><a name="index-Mean-Value-Analysys-_0028MVA_0029-163"></a><a name="index-closed-network_002c-single-class-164"></a><a name="index-load_002ddependent-service-center-165"></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
@@ -3438,15 +3429,15 @@
1998, Section 8.2.4.1, “Networks with Load-Deèpendent Service: Closed
Networks”.
- <p><a name="index-Bolch_002c-G_002e-164"></a><a name="index-Greiner_002c-S_002e-165"></a><a name="index-de-Meer_002c-H_002e-166"></a><a name="index-Trivedi_002c-K_002e-167"></a>
+ <p><a name="index-Bolch_002c-G_002e-166"></a><a name="index-Greiner_002c-S_002e-167"></a><a name="index-de-Meer_002c-H_002e-168"></a><a name="index-Trivedi_002c-K_002e-169"></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-168"></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-169"></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-170"></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-171"></a></var><br>
<blockquote>
- <p><a name="index-Mean-Value-Analysys-_0028MVA_0029-170"></a><a name="index-CMVA-171"></a>
+ <p><a name="index-Mean-Value-Analysys-_0028MVA_0029-172"></a><a name="index-CMVA-173"></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
@@ -3500,19 +3491,19 @@
closed networks</cite>. Queueing Syst. Theory Appl., 60:193–202, December
2008.
- <p><a name="index-Casale_002c-G_002e-172"></a>
+ <p><a name="index-Casale_002c-G_002e-174"></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-173"></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-174"></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-175"></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-176"></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-177"></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-175"></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-176"></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-177"></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-178"></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-179"></a></var><br>
<blockquote>
- <p><a name="index-Mean-Value-Analysys-_0028MVA_0029_002c-approximate-178"></a><a name="index-Approximate-MVA-179"></a><a name="index-Closed-network_002c-single-class-180"></a><a name="index-Closed-network_002c-approximate-analysis-181"></a>
+ <p><a name="index-Mean-Value-Analysys-_0028MVA_0029_002c-approximate-180"></a><a name="index-Approximate-MVA-181"></a><a name="index-Closed-network_002c-single-class-182"></a><a name="index-Closed-network_002c-approximate-analysis-183"></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
@@ -3591,20 +3582,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-182"></a><a name="index-Zahorjan_002c-J_002e-183"></a><a name="index-Graham_002c-G_002e-S_002e-184"></a><a name="index-Sevcik_002c-K_002e-C_002e-185"></a>
+ <p><a name="index-Lazowska_002c-E_002e-D_002e-184"></a><a name="index-Zahorjan_002c-J_002e-185"></a><a name="index-Graham_002c-G_002e-S_002e-186"></a><a name="index-Sevcik_002c-K_002e-C_002e-187"></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-186"></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-187"></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-188"></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-189"></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-190"></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-191"></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-188"></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-189"></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-190"></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-191"></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-192"></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-193"></a></var><br>
<blockquote>
- <p><a name="index-Mean-Value-Analysys-_0028MVA_0029-192"></a><a name="index-closed-network_002c-multiple-classes-193"></a>
+ <p><a name="index-Mean-Value-Analysys-_0028MVA_0029-194"></a><a name="index-closed-network_002c-multiple-classes-195"></a>
Analyze closed, multiclass queueing networks with K service
centers and C independent customer classes (chains) using the
Mean Value Analysys (MVA) algorithm.
@@ -3734,7 +3725,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-194"></a><a name="index-Lavenberg_002c-S_002e-S_002e-195"></a>
+ <p><a name="index-Reiser_002c-M_002e-196"></a><a name="index-Lavenberg_002c-S_002e-S_002e-197"></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,
@@ -3744,18 +3735,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-196"></a><a name="index-Greiner_002c-S_002e-197"></a><a name="index-de-Meer_002c-H_002e-198"></a><a name="index-Trivedi_002c-K_002e-199"></a><a name="index-Lazowska_002c-E_002e-D_002e-200"></a><a name="index-Zahorjan_002c-J_002e-201"></a><a name="index-Graham_002c-G_002e-S_002e-202"></a><a name="index-Sevcik_002c-K_002e-C_002e-203"></a>
+ <p><a name="index-Bolch_002c-G_002e-198"></a><a name="index-Greiner_002c-S_002e-199"></a><a name="index-de-Meer_002c-H_002e-200"></a><a name="index-Trivedi_002c-K_002e-201"></a><a name="index-Lazowska_002c-E_002e-D_002e-202"></a><a name="index-Zahorjan_002c-J_002e-203"></a><a name="index-Graham_002c-G_002e-S_002e-204"></a><a name="index-Sevcik_002c-K_002e-C_002e-205"></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-204"></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-205"></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-206"></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-207"></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-208"></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-206"></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-207"></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-208"></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-209"></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-210"></a></var><br>
<blockquote>
- <p><a name="index-Mean-Value-Analysys-_0028MVA_0029_002c-approximate-209"></a><a name="index-Approximate-MVA-210"></a><a name="index-Closed-network_002c-multiple-classes-211"></a><a name="index-Closed-network_002c-approximate-analysis-212"></a>
+ <p><a name="index-Mean-Value-Analysys-_0028MVA_0029_002c-approximate-211"></a><a name="index-Approximate-MVA-212"></a><a name="index-Closed-network_002c-multiple-classes-213"></a><a name="index-Closed-network_002c-approximate-analysis-214"></a>
Analyze closed, multiclass queueing networks with K service
centers and C customer classes using the approximate Mean
Value Analysys (MVA) algorithm.
@@ -3840,12 +3831,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-213"></a>
+ <p><a name="index-Bard_002c-Y_002e-215"></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-214"></a>
+ <p><a name="index-Schweitzer_002c-P_002e-216"></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>,
@@ -3856,7 +3847,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-215"></a><a name="index-Zahorjan_002c-J_002e-216"></a><a name="index-Graham_002c-G_002e-S_002e-217"></a><a name="index-Sevcik_002c-K_002e-C_002e-218"></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>
<h4 class="subsection">6.3.5 Mixed Networks</h4>
@@ -3864,9 +3855,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-219"></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-221"></a></var><br>
<blockquote>
- <p><a name="index-Mean-Value-Analysys-_0028MVA_0029-220"></a><a name="index-mixed-network-221"></a>
+ <p><a name="index-Mean-Value-Analysys-_0028MVA_0029-222"></a><a name="index-mixed-network-223"></a>
Solution of mixed queueing networks through MVA. ...
[truncated message content] |
|
From: <mma...@us...> - 2012-03-18 18:24:10
|
Revision: 9950
http://octave.svn.sourceforge.net/octave/?rev=9950&view=rev
Author: mmarzolla
Date: 2012-03-18 18:24:04 +0000 (Sun, 18 Mar 2012)
Log Message:
-----------
fixed typos in documentation
Modified Paths:
--------------
trunk/octave-forge/main/queueing/doc/markovchains.txi
trunk/octave-forge/main/queueing/inst/ctmc.m
trunk/octave-forge/main/queueing/inst/dtmc.m
trunk/octave-forge/main/queueing/inst/dtmc_exps.m
Modified: trunk/octave-forge/main/queueing/doc/markovchains.txi
===================================================================
--- trunk/octave-forge/main/queueing/doc/markovchains.txi 2012-03-18 16:09:48 UTC (rev 9949)
+++ trunk/octave-forge/main/queueing/doc/markovchains.txi 2012-03-18 18:24:04 UTC (rev 9950)
@@ -35,7 +35,7 @@
@dots{}}. The sequence @math{X_0, X_1, @dots{}, X_n, @dots{}} is a
@emph{stochastic process} with discrete time @math{0, 1, 2,
@dots{}}. A @emph{Markov chain} is a stochastic process @math{@{X_n,
-n=0, 1, 2, @dots{}@}} which satisfies the following Marrkov property:
+n=0, 1, 2, @dots{}@}} which satisfies the following Markov property:
@iftex
@tex
@@ -46,7 +46,7 @@
@math{P(X_{n+1} = x_{n+1} | X_n = x_n, X_{n-1} = x_{n-1}, ..., X_0 = x_0) = P(X_{n+1} = x_{n+1} | X_n = x_n)}
@end ifnottex
-@noindent which means that the probability that the system is in
+@noindent which means that the probability that the system is in
a particular state at time @math{n+1} only depends on the state the
system was at time @math{n}.
@@ -60,7 +60,7 @@
The transition probability matrix @math{\bf P} must satisfy the
following two properties: (1) @math{P_{i, j} @geq{} 0} for all
-@math{i, j}, and (2) @math{\sum_{j=1}^N P_{i,j} = 1}.
+@math{i, j}, and (2) @math{\sum_{j=1}^N P_{i,j} = 1}.
@c
@DOCSTRING(dtmc_check_P)
@@ -70,8 +70,8 @@
* Birth-death process (DTMC)::
* Expected number of visits (DTMC)::
* Time-averaged expected sojourn times (DTMC)::
+* Mean time to absorption (DTMC)::
* First passage times (DTMC)::
-* Mean time to absorption (DTMC)::
@end menu
@c
@@ -134,7 +134,7 @@
Given a @math{N} state discrete-time Markov chain with transition
matrix @math{\bf P} and an integer @math{n @geq{} 0}, we let
-@math{L-I(n)} be the the expected number of visits to state @math{i}
+@math{L_i(n)} be the the expected number of visits to state @math{i}
during the first @math{n} transitions. The vector @math{{\bf L}(n) =
(L_1(n), L_2(n), @dots{}, L_N(n))} is defined as:
@@ -156,8 +156,8 @@
@end example
@end ifnottex
-@noindent where @math{{\bf \pi}(i) = {\bf \pi}(0){\bf P}^i} is the state occupancy probability
-after @math{i} transitions.
+@noindent where @math{{\bf \pi}(i) = {\bf \pi}(0){\bf P}^i} is the state
+occupancy probability after @math{i} transitions.
If @math{\bf P} is absorbing, we can rearrange the states to rewrite
@math{\bf P} as:
@@ -186,7 +186,7 @@
number of times that the process is in the @math{j}-th transient state
if it is started in the @math{i}-th transient state. If we reshape
@math{\bf N} to the size of @math{\bf P} (filling missing entries with
-zeros), we have that, for abrosbing chains @math{{\bf L} = {\bf
+zeros), we have that, for absorbing chains @math{{\bf L} = {\bf
\pi}(0){\bf N}}.
@DOCSTRING(dtmc_exps)
@@ -198,17 +198,23 @@
@DOCSTRING(dtmc_taexps)
@c
+@node Mean time to absorption (DTMC)
+@subsection Mean Time to Absorption
+
+@DOCSTRING(dtmc_mtta)
+
+@c
@node First passage times (DTMC)
@subsection First Passage Times
-The First Passage Time @math{M_{i j}} is defined as the average
+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
property that
@iftex
@tex
-$$ M_{i j} = 1 + \sum_{k \neq j} P_{i k} M_{k j}$$
+$$ M_{i, j} = 1 + \sum_{k \neq j} P_{i, k} M_{k, j}$$
@end tex
@end iftex
@ifnottex
@@ -217,24 +223,17 @@
___
\
M_ij = 1 + > P_ij * M_kj
- /___
- k!=j
+ /___
+ k!=j
@end group
@end example
@end ifnottex
-@c
@DOCSTRING(dtmc_fpt)
@c
-@node Mean time to absorption (DTMC)
-@subsection Mean Time to Absorption
-
-@DOCSTRING(dtmc_mtta)
-
@c
@c
-@c
@node Continuous-Time Markov Chains
@section Continuous-Time Markov Chains
@@ -257,7 +256,7 @@
that for each @math{i \neq j}, @math{Q_{i, j}} is the transition rate
from state @math{i} to state @math{j}. The elements @math{Q_{i, i}}
must be defined in such a way that the infinitesimal generator matrix
-@math{\bf Q} satisfies the property @math{\sum_{j=1}^N Q_{i,j} = 0}.
+@math{\bf Q} satisfies the property @math{\sum_{j=1}^N Q_{i, j} = 0}.
@DOCSTRING(ctmc_check_Q)
@@ -301,7 +300,7 @@
@emph{stationary state occupancy probability} @math{{\bf \pi} =
\lim_{t \rightarrow +\infty} {\bf \pi}(t)}, which is independent from
the initial state occupancy @math{{\bf \pi}(0)}. The stationary state
-occupancy probability vector @math{\bf \pi} satisfies
+occupancy probability vector @math{\bf \pi} satisfies
@math{{\bf \pi} {\bf Q} = {\bf 0}} and @math{\sum_{i=1}^N \pi_i = 1}.
@DOCSTRING(ctmc)
@@ -337,8 +336,8 @@
(L_1(t), L_2(t), \ldots L_N(t))} such that @math{L_i(t)} is the
expected sojourn time in state @math{i} during the interval
@math{[0,t)}, assuming that the initial occupancy probability at time
-0 was @math{{\bf \pi}(0)}. @math{{\bf L}(t)} is the solution of
-the following differential equation:
+0 was @math{{\bf \pi}(0)}. @math{{\bf L}(t)} can be expressed as the
+solution of the following differential equation:
@iftex
@tex
@@ -367,14 +366,15 @@
@example
@group
/ t
-L(t) = | pi(u) du
- / u=0
+L(t) = | pi(u) du
+ / 0
@end group
@end example
@end ifnottex
@noindent where @math{{\bf \pi}(t) = {\bf \pi}(0) \exp({\bf Q}t)} is
-the state occupancy probability at time @math{t}.
+the state occupancy probability at time @math{t}; @math{\exp({\bf A})}
+is the matrix exponential of @math{\bf A}.
@DOCSTRING(ctmc_exps)
@@ -384,7 +384,7 @@
rate from state @math{i} to state @math{i+1} is @math{\lambda_i = i
\lambda} (@math{i=1, 2, 3}), with @math{\lambda = 0.5}. The following
code computes the expected sojourn time in state @math{i},
-given the initial occupancy probability @math{{\bf \pi}_0=(1,0,0,0)}.
+given the initial occupancy probability @math{{\bf \pi}_0=(1,0,0,0)}.
@example
@group
Modified: trunk/octave-forge/main/queueing/inst/ctmc.m
===================================================================
--- trunk/octave-forge/main/queueing/inst/ctmc.m 2012-03-18 16:09:48 UTC (rev 9949)
+++ trunk/octave-forge/main/queueing/inst/ctmc.m 2012-03-18 18:24:04 UTC (rev 9950)
@@ -41,7 +41,7 @@
## Infinitesimal generator matrix. @var{Q} is a @math{N \times N} square
## matrix where @code{@var{Q}(i,j)} is the transition rate from state
## @math{i} to state @math{j}, for @math{1 @leq{} i \neq j @leq{} N}.
-## Transition rates must be nonnegative, and @math{\sum_{j=1}^N Q_{i j} = 0}
+## Transition rates must be nonnegative, and @math{\sum_{j=1}^N Q_{i, j} = 0}
##
## @item t
## Time at which to compute the transient probability
Modified: trunk/octave-forge/main/queueing/inst/dtmc.m
===================================================================
--- trunk/octave-forge/main/queueing/inst/dtmc.m 2012-03-18 16:09:48 UTC (rev 9949)
+++ trunk/octave-forge/main/queueing/inst/dtmc.m 2012-03-18 18:24:04 UTC (rev 9950)
@@ -42,7 +42,7 @@
## @item P
## @code{@var{P}(i,j)} is the transition probability from state @math{i}
## to state @math{j}. @var{P} must be an irreducible stochastic matrix,
-## which means that the sum of each row must be 1 (@math{\sum_{j=1}^N P_{i j} = 1}), and the rank of
+## which means that the sum of each row must be 1 (@math{\sum_{j=1}^N P_{i, j} = 1}), and the rank of
## @var{P} must be equal to its dimension.
##
## @item n
Modified: trunk/octave-forge/main/queueing/inst/dtmc_exps.m
===================================================================
--- trunk/octave-forge/main/queueing/inst/dtmc_exps.m 2012-03-18 16:09:48 UTC (rev 9949)
+++ trunk/octave-forge/main/queueing/inst/dtmc_exps.m 2012-03-18 18:24:04 UTC (rev 9950)
@@ -34,12 +34,12 @@
##
## @item n
## Number of steps during which the expected number of visits are
-## computed (@math{@var{n} @geq{} 0}). If @code{@var{n}=0}, simply
-## returns @var{p0}. If @code{@var{n} > 0}, returns the expected number
-## of visits after exactly @var{n} transitions.
+## computed (@math{@var{n} @geq{} 0}). If @code{@var{n}=0}, returns
+## @var{p0}. If @code{@var{n} > 0}, returns the expected number of
+## visits after exactly @var{n} transitions.
##
## @item p0
-## Initial state occupancy probability
+## Initial state occupancy probability.
##
## @end table
##
@@ -51,7 +51,8 @@
## When called with two arguments, @code{@var{L}(i)} is the expected
## number of visits to transient state @math{i} before absorption. When
## called with three arguments, @code{@var{L}(i)} is the expected number
-## of visits to state @math{i} during the first @var{n} transitions.
+## of visits to state @math{i} during the first @var{n} transitions,
+## given initial occupancy probability @var{p0}.
##
## @end table
##
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <mma...@us...> - 2012-03-18 21:03:57
|
Revision: 9951
http://octave.svn.sourceforge.net/octave/?rev=9951&view=rev
Author: mmarzolla
Date: 2012-03-18 21:03:48 +0000 (Sun, 18 Mar 2012)
Log Message:
-----------
improvements to the documentation
Modified Paths:
--------------
trunk/octave-forge/main/queueing/doc/gettingstarted.txi
trunk/octave-forge/main/queueing/doc/markovchains.txi
trunk/octave-forge/main/queueing/doc/queueingnetworks.txi
trunk/octave-forge/main/queueing/doc/references.txi
trunk/octave-forge/main/queueing/inst/dtmc_taexps.m
trunk/octave-forge/main/queueing/inst/qnmarkov.m
Modified: trunk/octave-forge/main/queueing/doc/gettingstarted.txi
===================================================================
--- trunk/octave-forge/main/queueing/doc/gettingstarted.txi 2012-03-18 18:24:04 UTC (rev 9950)
+++ trunk/octave-forge/main/queueing/doc/gettingstarted.txi 2012-03-18 21:03:48 UTC (rev 9951)
@@ -51,7 +51,7 @@
routing of jobs within the network is described with a @emph{routing
probability matrix} @math{P}. Specifically, a request completing
service at center @math{i} is enqueued at center @math{j} with
-probability @math{P_{ij}}. Let us assume the following routing
+probability @math{P_{i, j}}. Let us assume the following routing
probability matrix:
@iftex
@@ -106,7 +106,7 @@
@iftex
@tex
$$
-V_j = \sum_{i=1}^K V_i P_{ij}
+V_j = \sum_{i=1}^K V_i P_{i, j}
$$
@end tex
@end iftex
@@ -117,7 +117,7 @@
@end ifnottex
We can compute @math{V_k} from the routing probability matrix
-@math{P_{ij}} using the @command{qnvisits} function:
+@math{P_{i, j}} using the @command{qnvisits} function:
@example
@group
@@ -250,7 +250,7 @@
@iftex
@tex
$$
-V_j = P_{0j} + \sum_{i=1}^K V_i P_{ij}
+V_j = P_{0, j} + \sum_{i=1}^K V_i P_{i, j}
$$
@end tex
@end iftex
@@ -260,12 +260,12 @@
@end example
@end ifnottex
-where @math{P_{0j}} is the probability of an external arrival to
+where @math{P_{0, j}} is the probability of an external arrival to
center @math{j}. This can be computed as:
@tex
$$
-P_{0j} = {\lambda_j \over \sum_{i=1}^K \lambda_i }
+P_{0, j} = {\lambda_j \over \sum_{i=1}^K \lambda_i }
$$
@end tex
Modified: trunk/octave-forge/main/queueing/doc/markovchains.txi
===================================================================
--- trunk/octave-forge/main/queueing/doc/markovchains.txi 2012-03-18 18:24:04 UTC (rev 9950)
+++ trunk/octave-forge/main/queueing/doc/markovchains.txi 2012-03-18 21:03:48 UTC (rev 9951)
@@ -39,7 +39,7 @@
@iftex
@tex
-$$P(X_{n+1} = x_{n+1}\ |\ X_n = x_n, X_{n-1} = x_{n-1}, \ldots, X_0 = x_0) = P(X_{n+1} = x_{n+1}\ |\ X_n = x_n)$$
+$$P\left(X_{n+1} = x_{n+1}\ |\ X_n = x_n, X_{n-1} = x_{n-1}, \ldots, X_0 = x_0 \right) = P\left(X_{n+1} = x_{n+1}\ |\ X_n = x_n\right)$$
@end tex
@end iftex
@ifnottex
@@ -56,7 +56,7 @@
X_n = i )}. If the Markov chain is homogeneous (that is, the
transition probability matrix @math{{\bf P}(n)} is time-independent),
we can simply write @math{{\bf P} = P_{i, j}}, where @math{P_{i, j} =
-P( X_{n+1} = j\ |\ X_n = i )} for all @math{n=0, 1, 2, @dots{}}.
+P( X_{n+1} = j\ |\ X_n = i )} for all @math{n=0, 1, @dots{}}.
The transition probability matrix @math{\bf P} must satisfy the
following two properties: (1) @math{P_{i, j} @geq{} 0} for all
@@ -80,14 +80,14 @@
@node State occupancy probabilities (DTMC)
@subsection State occupancy probabilities
-We denote with @math{{\bf \pi}(n) = (\pi_1(n), \pi_2(n), @dots{},
-\pi_N(n) )} the @emph{state occupancy probability vector} at step
+We denote with @math{{\bf \pi}(n) = \left(\pi_1(n), \pi_2(n), @dots{},
+\pi_N(n) \right)} the @emph{state occupancy probability vector} at step
@math{n}. @math{\pi_i(n)} denotes the probability that the system is
in state @math{i} at step @math{n}.
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
+state occupancy probability vector @math{{\bf \pi}(0) = \left(\pi_1(0),
+\pi_2(0), @dots{}, \pi_N(0)\right)} at step 0, the state occupancy
probability vector @math{{\bf \pi}(n)} at step @math{n} can be
computed as:
@@ -136,7 +136,7 @@
matrix @math{\bf P} and an integer @math{n @geq{} 0}, we let
@math{L_i(n)} be the the expected number of visits to state @math{i}
during the first @math{n} transitions. The vector @math{{\bf L}(n) =
-(L_1(n), L_2(n), @dots{}, L_N(n))} is defined as:
+( L_1(n), L_2(n), @dots{}, L_N(n) )} is defined as:
@iftex
@tex
@@ -239,7 +239,7 @@
A stochastic process @math{@{X(t), t @geq{} 0@}} is a continuous-time
Markov chain if, for all integers @math{n}, and for any sequence
-@math{t_0, t_1 , \ldots , t_n, t_{n+1}} such that @math{t_0 < t_1 <
+@math{t_0, t_1 , \ldots, t_n, t_{n+1}} such that @math{t_0 < t_1 <
\ldots < t_n < t_{n+1}}, we have
@iftex
@@ -333,7 +333,7 @@
Given a @math{N} state continuous-time Markov Chain with infinitesimal
generator matrix @math{\bf Q}, we define the vector @math{{\bf L}(t) =
-(L_1(t), L_2(t), \ldots L_N(t))} such that @math{L_i(t)} is the
+(L_1(t), L_2(t), \ldots, L_N(t))} such that @math{L_i(t)} is the
expected sojourn time in state @math{i} during the interval
@math{[0,t)}, assuming that the initial occupancy probability at time
0 was @math{{\bf \pi}(0)}. @math{{\bf L}(t)} can be expressed as the
Modified: trunk/octave-forge/main/queueing/doc/queueingnetworks.txi
===================================================================
--- trunk/octave-forge/main/queueing/doc/queueingnetworks.txi 2012-03-18 18:24:04 UTC (rev 9950)
+++ trunk/octave-forge/main/queueing/doc/queueingnetworks.txi 2012-03-18 21:03:48 UTC (rev 9951)
@@ -110,12 +110,13 @@
service, and the instant at which service finishes and the request moves
to another queue (or exits the system).
-@item P_{ij}
-Routing probability matrix. @math{{\bf P} = P_{ij}} is a @math{K \times
-K} matrix such that @math{P_{ij}} is the probability that a request
-completing service at server @math{i} will move directly to server
-@math{j}, The probability that a request leaves the system after service
-at service center @math{i} is @math{1-\sum_{j=1}^K P_{ij}}.
+@item P_{i, j}
+Routing probability matrix. @math{{\bf P} = P_{i, j}} is a @math{K
+\times K} matrix such that @math{P_{i, j}} is the probability that a
+request completing service at server @math{i} will move directly to
+server @math{j}, The probability that a request leaves the system
+after service at service center @math{i} is @math{1-\sum_{j=1}^K P_{i,
+j}}.
@item V_i
Average number of visits. @math{V_i} is the average number of visits to
@@ -172,30 +173,48 @@
@iftex
@tex
-$V_j = P_{0 j} + \sum_{i=1}^K V_i P_{i j}$
+$$ V_j = P_{0, j} + \sum_{i=1}^K V_i P_{i, j} $$
@end tex
@end iftex
@ifnottex
@example
-V == P0 + V*P;
+@group
+ K
+ ___
+ \
+V_j = P_(0, j) + > V_i P_(i, j)
+ /___
+ i=1
+@end group
@end example
@end ifnottex
-@noindent where @math{P_{0 j}} is the probability that an external
+@noindent where @math{P_{0, j}} is the probability that an external
arrival goes to service center @math{j}. If @math{\lambda_j} is the
external arrival rate to service center @math{j}, and @math{\lambda =
\sum_j \lambda_j} is the overall external arrival rate, then
-@math{P_{0 j} = \lambda_j / \lambda}.
+@math{P_{0, j} = \lambda_j / \lambda}.
For closed models, the visit ratios satisfy the following equation:
@iftex
@tex
-$V_j = \sum_{i=1}^K V_i P_{i j}$
+$$\eqalign{V_1 & = 1 \cr
+ V_j & = \sum_{i=1}^K V_i P_{i, j}} $$
@end tex
@end iftex
@ifnottex
@example
+
+V_1 = 1
+
+ K
+ ___
+ \
+V_j = > V_i P_(i, j)
+ /___
+ i=1
+
V(1) == 1 && V == V*P;
@end example
@end ifnottex
@@ -204,46 +223,46 @@
In multiple class QN models, we assume that there exist @math{C}
different classes of requests. Each request from class @math{c} spends
-on average time @math{S_{ck}} in service at service center @math{k}. For
-open models, we denote with @math{{\bf \lambda} = \lambda_{ck}} the
-arrival rates, where @math{\lambda_{ck}} is the external arrival rate of
-class @math{c} customers at service center @math{k}. For closed models,
-we denote with @math{{\bf N} = (N_1, N_2, \ldots N_C)} the population
-vector, where @math{N_c} is the number of class @math{c} requests in the
-system.
+on average time @math{S_{c, k}} in service at service center
+@math{k}. For open models, we denote with @math{{\bf \lambda} =
+\lambda_{ck}} the arrival rates, where @math{\lambda_{c, k}} is the
+external arrival rate of class @math{c} customers at service center
+@math{k}. For closed models, we denote with @math{{\bf N} = (N_1, N_2,
+\ldots, N_C)} the population vector, where @math{N_c} is the number of
+class @math{c} requests in the system.
The transition probability matrix for these kind of networks will be a
-@math{C \times K \times C \times K} matrix @math{{\bf P} =
-P_{risj}} such that @math{P_{risj}} is the probability that a
-class @math{r} request which completes service at center @math{i} will
-join server @math{j} as a class @math{s} request.
+@math{C \times K \times C \times K} matrix @math{{\bf P} = P_{r, i, s, j}}
+such that @math{P_{r, i, s, j}} is the probability that a class
+@math{r} request which completes service at center @math{i} will join
+server @math{j} as a class @math{s} request.
-Model input and outputs can be adjusted by adding additional
-indexes for the customer classes.
+Model input and outputs can be adjusted by adding additional indexes
+for the customer classes.
@noindent @strong{Model Inputs}
@table @math
-@item \lambda_{ci}
+@item \lambda_{c, i}
External arrival rate of class-@math{c} requests to service center @math{i}
@item \lambda
-Overall external arrival rate to the whole system: @math{\lambda = \sum_c \sum_i \lambda_{ci}}
+Overall external arrival rate to the whole system: @math{\lambda = \sum_c \sum_i \lambda_{c, i}}
-@item S_{ci}
-Average service time. @math{S_{ci}} is the average service time on service
-center @math{i} for class @math{c} requests.
+@item S_{c, i}
+Average service time. @math{S_{c, i}} is the average service time on
+service center @math{i} for class @math{c} requests.
-@item P_{risj}
-Routing probability matrix. @math{{\bf P} = P_{risj}} is a @math{C
-\times K \times C \times K} matrix such that @math{P_{risj}} is the
-probability that a class @math{r} request which completes service at
-server @math{i} will move to server @math{j} as a class @math{s}
+@item P_{r, i, s, j}
+Routing probability matrix. @math{{\bf P} = P_{r, i, s, j}} is a @math{C
+\times K \times C \times K} matrix such that @math{P_{r, i, s, j}} is
+the probability that a class @math{r} request which completes service
+at server @math{i} will move to server @math{j} as a class @math{s}
request.
-@item V_{ci}
-Average number of visits. @math{V_{ci}} is the average number of visits
+@item V_{c, i}
+Average number of visits. @math{V_{c, i}} is the average number of visits
of class @math{c} requests to the service center @math{i}.
@end table
@@ -252,23 +271,23 @@
@table @math
-@item U_{ci}
+@item U_{c, i}
Utilization of service center @math{i} by class @math{c} requests. The
utilization is defined as the fraction of time in which the resource is
busy (i.e., the server is processing requests).
-@item R_{ci}
+@item R_{c, i}
Average response time experienced by class @math{c} requests on service
center @math{i}. The average response time is defined as the average
time between the arrival of a customer in the queue, and the completion
of service.
-@item Q_{ci}
+@item Q_{c, i}
Average number of class @math{c} requests on service center
@math{i}. This includes both the requests in the queue, and the request
being served.
-@item X_{ci}
+@item X_{c, i}
Throughput of service center @math{i} for class @math{c} requests. The
throughput is defined as the rate of completion of class @math{c}
requests.
@@ -283,7 +302,7 @@
Utilization of service center @math{i}:
@iftex
@tex
-$U_i = \sum_{c=1}^C U_{ci}$
+$U_i = \sum_{c=1}^C U_{c, i}$
@end tex
@end iftex
@ifnottex
@@ -294,7 +313,7 @@
System response time for class @math{c} requests:
@iftex
@tex
-$R_c = \sum_{i=1}^K R_{ci} V_{ci}$
+$R_c = \sum_{i=1}^K R_{c, i} V_{c, i}$
@end tex
@end iftex
@ifnottex
@@ -305,7 +324,7 @@
Average number of class @math{c} requests in the system:
@iftex
@tex
-$Q_c = \sum_{i=1}^K Q_{ci}$
+$Q_c = \sum_{i=1}^K Q_{c, i}$
@end tex
@end iftex
@ifnottex
@@ -316,7 +335,7 @@
Class @math{c} throughput:
@iftex
@tex
-$X_c = X_{c1} / V_{c1}$
+$X_c = X_{c, 1} / V_{c, 1}$
@end tex
@end iftex
@ifnottex
@@ -325,12 +344,13 @@
@end table
-We can define the visit ratios @math{V_{sj}} for class @math{s}
+We can define the visit ratios @math{V_{s, j}} for class @math{s}
customers at service center @math{j} as follows:
@iftex
@tex
-$V_{sj} = \sum_{r=1}^C \sum_{i=1}^K V_{ri} P_{risj},\ V_{s1} = 1$
+$$ \eqalign{ V_{s, j} & = \sum_{r=1}^C \sum_{i=1}^K V_{r, i} P_{r, i, s, j} \cr
+ V_{s, 1} & = 1} $$
@end tex
@end iftex
@ifnottex
@@ -343,7 +363,7 @@
@iftex
@tex
-$V_{sj} = P_{0sj} + \sum_{r=1}^C \sum_{i=1}^K V_{ri} P_{risj}$
+$$V_{s, j} = P_{0, s, j} + \sum_{r=1}^C \sum_{i=1}^K V_{r, i} P_{r, i, s, j}$$
@end tex
@end iftex
@ifnottex
@@ -352,12 +372,12 @@
@end group
@end ifnottex
-@noindent where @math{P_{0sj}} is the probability that an external
+@noindent where @math{P_{0, s, j}} is the probability that an external
arrival goes to service center @math{j} as a class-@math{s} request.
-If @math{\lambda_{sj}} is the external arrival rate of class @math{s}
-requests to service center @math{j}, and @math{\lambda = \sum_s \sum_j
-\lambda_{sj}} is the overall external arrival rate to the whole system,
-then @math{P_{0sj} = \lambda_{sj} / \lambda}.
+If @math{\lambda_{s, j}} is the external arrival rate of class
+@math{s} requests to service center @math{j}, and @math{\lambda =
+\sum_s \sum_j \lambda_{s, j}} is the overall external arrival rate to
+the whole system, then @math{P_{0, s, j} = \lambda_{s, j} / \lambda}.
@c
@c
@@ -405,11 +425,11 @@
requests in 0.2. Note that service times are class-independent;
@item Node 2 is a @math{-/G/1}--PS node, with service times
-@math{S_{12} = 0.4} for class 1, and @math{S_{22} = 0.6} for class 2
+@math{S_{1, 2} = 0.4} for class 1, and @math{S_{2, 2} = 0.6} for class 2
requests;
@item Node 3 is a @math{-/G/\infty} node (delay center), with service
-times @math{S_{13}=1} and @math{S_{23}=2} for class 1 and 2
+times @math{S_{1, 3}=1} and @math{S_{2, 3}=2} for class 1 and 2
respectively.
@end itemize
@@ -491,14 +511,14 @@
@end itemize
We define the @emph{joint probability vector} @math{\pi(k_1, k_2,
-\ldots k_N)} as the steady-state probability that there are @math{k_i}
-requests at service center @math{i}, for all @math{i=1,2, \ldots N}.
+\ldots, k_N)} as the steady-state probability that there are @math{k_i}
+requests at service center @math{i}, for all @math{i=1, 2, \ldots, N}.
Jackson networks have the property that the joint probability is the
product of the marginal probabilities @math{\pi_i}:
@iftex
@tex
-$$ \pi(k_1, k_2, \ldots k_N) = \prod_{i=1}^N \pi_i(k_i) $$
+$$ \pi(k_1, k_2, \ldots, k_N) = \prod_{i=1}^N \pi_i(k_i) $$
@end tex
@end iftex
@ifnottex
@@ -532,7 +552,7 @@
@iftex
@tex
-$$ \pi(k_1, k_2, \ldots k_K) = {1 \over G(N)} \prod_{i=1}^N F_i(k_i) $$
+$$ \pi(k_1, k_2, \ldots, k_K) = {1 \over G(N)} \prod_{i=1}^N F_i(k_i) $$
@end tex
@end iftex
@ifnottex
@@ -544,14 +564,14 @@
@end example
@end ifnottex
-Here @math{\pi(k_1, k_2, \ldots k_K)} is the joint probability of
-having @math{k_i} requests at node @math{i}, for all @math{i=1,2,
-\ldots K}.
+Here @math{\pi(k_1, k_2, \ldots, k_K)} is the joint probability of
+having @math{k_i} requests at node @math{i}, for all @math{i=1, 2,
+\ldots, K}.
The @emph{convolution algorithms} computes the normalization constants
-@math{G = (G(0), G(1), \ldots G(N))} for single-class, closed networks
+@math{{\bf G} = \left(G(0), G(1), \ldots, G(N)\right)} for single-class, closed networks
with @math{N} requests. The normalization constants are returned as
-vector @code{@var{G}=[@var{G}(1), @var{G}(2), ... @var{G}(N+1)]} where
+vector @code{@var{G}=[@var{G}(1), @var{G}(2), @dots{} @var{G}(N+1)]} where
@code{@var{G}(i+1)} is the value of @math{G(i)} (remember that Octave
uses 1-base vectors). The normalization constant can be used to
compute all performance measures of interest (utilization, average
@@ -574,14 +594,14 @@
The normalization constant @math{G} can be used to compute the
steady-state probabilities for a closed single class product-form
Queueing Network with @math{K} nodes. Let @code{@var{k}=[@math{k_1,
-k_2, @dots{} k_K}]} be a valid population vector. Then, the
+k_2, @dots{}, k_K}]} be a valid population vector. Then, the
steady-state probability @code{@var{p}(i)} to have @code{@var{k}(i)}
requests at service center @math{i} can be computed as:
@iftex
@tex
$$
-p_i(k_i) = {(V_i S_i)^{k_i} \over G(K)} \left(G(K-k_i) - V_i S_i G(K-k_i-1)\right), \quad i=1,2, \ldots K
+p_i(k_i) = {(V_i S_i)^{k_i} \over G(K)} \left(G(K-k_i) - V_i S_i G(K-k_i-1)\right), \quad i=1, 2, \ldots, K
$$
@end tex
@end iftex
@@ -841,7 +861,7 @@
@noindent @strong{NOTE}
Given a network with @math{K} service centers, @math{C} job classes and
-population vector @math{{\bf N}=(N_1, N_2, \ldots N_C)}, the MVA
+population vector @math{{\bf N}=(N_1, N_2, \ldots, N_C)}, the MVA
algorithm requires space @math{O(C \prod_i (N_i + 1))}. The time
complexity is @math{O(CK\prod_i (N_i + 1))}. This implementation is
slightly more space-efficient (see details in the code). While the space
@@ -1085,7 +1105,7 @@
@iftex
@tex
-$V_j = P_{0 j} + \sum_{i=1}^K V_i P_{i j}$
+$$V_j = P_{0, j} + \sum_{i=1}^K V_i P_{i, j}$$
@end tex
@end iftex
@ifnottex
@@ -1094,17 +1114,18 @@
@end example
@end ifnottex
-@noindent where @math{P_{0 j}} is the probability that an external
+@noindent where @math{P_{0, j}} is the probability that an external
arrival goes to service center @math{j}. If @math{\lambda_j} is the
external arrival rate to service center @math{j}, and @math{\lambda =
\sum_j \lambda_j} is the overall external arrival rate, then
-@math{P_{0 j} = \lambda_j / \lambda}.
+@math{P_{0, j} = \lambda_j / \lambda}.
For closed networks, the visit ratios satisfy the following equation:
@iftex
@tex
-$V_j = \sum_{i=1}^K V_i P_{i j},\ V_1 = 1$
+$$\eqalign{ V_j & = \sum_{i=1}^K V_i P_{i, j} \cr
+ V_1 & = 1 }$$
@end tex
@end iftex
@ifnottex
@@ -1114,12 +1135,13 @@
@end ifnottex
The definitions above can be extended to multiple class networks as
-follows. We define the visit ratios @math{V_{sj}} for class @math{s}
+follows. We define the visit ratios @math{V_{s, j}} for class @math{s}
customers at service center @math{j} as follows:
@iftex
@tex
-$V_{sj} = \sum_{r=1}^C \sum_{i=1}^K V_{ri} P_{risj},\ V_{s1} = 1$
+$$\eqalign{ V_{s, j} & = \sum_{r=1}^C \sum_{i=1}^K V_{r, i} P_{r, i, s, j} \cr
+ V_{s, 1} & = 1 }$$
@end tex
@end iftex
@ifnottex
@@ -1133,7 +1155,7 @@
@iftex
@tex
-$V_{sj} = P_{0sj} + \sum_{r=1}^C \sum_{i=1}^K V_{ri} P_{risj}$
+$$V_{s, j} = P_{0, s, j} + \sum_{r=1}^C \sum_{i=1}^K V_{r, i} P_{r, i, s, j}$$
@end tex
@end iftex
@ifnottex
@@ -1142,12 +1164,12 @@
@end group
@end ifnottex
-@noindent where @math{P_{0sj}} is the probability that an external
+@noindent where @math{P_{0, s, j}} is the probability that an external
arrival goes to service center @math{j} as a class-@math{s} request.
-If @math{\lambda_{sj}} is the external arrival rate of class @math{s}
+If @math{\lambda_{s, j}} is the external arrival rate of class @math{s}
requests to service center @math{j}, and @math{\lambda = \sum_s \sum_j
-\lambda_{sj}} is the overall external arrival rate to the whole system,
-then @math{P_{0sj} = \lambda_{sj} / \lambda}.
+\lambda_{s, j}} is the overall external arrival rate to the whole system,
+then @math{P_{0, s, j} = \lambda_{s, j} / \lambda}.
@DOCSTRING(qnvisits)
@@ -1172,7 +1194,7 @@
80-355.pdf}
Note that the slightly different problem of generating all tuples
-@math{k_1, k_2, \ldots k_N} such that @math{\sum_i k_i = k} and
+@math{k_1, k_2, \ldots, k_N} such that @math{\sum_i k_i = k} and
@math{k_i} are nonnegative integers, for some fixed integer @math{k
@geq{} 0} has been described in S. Santini, @cite{Computing the
Indices for a Complex Summation}, unpublished report, available at
Modified: trunk/octave-forge/main/queueing/doc/references.txi
===================================================================
--- trunk/octave-forge/main/queueing/doc/references.txi 2012-03-18 18:24:04 UTC (rev 9950)
+++ trunk/octave-forge/main/queueing/doc/references.txi 2012-03-18 21:03:48 UTC (rev 9951)
@@ -27,14 +27,17 @@
@item [Aky88]
Ian F. Akyildiz, @cite{Mean Value Analysis for Blocking Queueing
Networks}, IEEE Transactions on Software Engineering, vol. 14, n. 2,
-april 1988, pp. 418--428. @url{http://dx.doi.org/10.1109/32.4663}
+april 1988, pp. 418--428. DOI @uref{http://dx.doi.org/10.1109/32.4663, 10.1109/32.4663}
@item [Bar79]
Y. Bard, @cite{Some Extensions to Multiclass Queueing Network Analysis},
proc. 4th Int. Symp. on Modelling and Performance Evaluation of
Computer Systems, feb. 1979, pp. 51--62.
-@item [RGMT98]
+@item [BCMP75]
+Forest Baskett, K. Mani Chandy, Richard R. Muntz, and Fernando G. Palacios. 1975. @cite{Open, Closed, and Mixed Networks of Queues with Different Classes of Customers}. J. ACM 22, 2 (April 1975), 248—260, DOI @uref{http://doi.acm.org/10.1145/321879.321887, 10.1145/321879.321887}
+
+@item [BGMT98]
G. Bolch, S. Greiner, H. de Meer and
K. Trivedi, @cite{Queueing Networks and Markov Chains: Modeling and
Performance Evaluation with Computer Science Applications}, Wiley,
@@ -44,20 +47,25 @@
Jeffrey P. Buzen, @cite{Computational Algorithms for Closed Queueing
Networks with Exponential Servers}, Communications of the ACM, volume
16, number 9, september 1973,
-pp. 527--531. @url{http://doi.acm.org/10.1145/362342.362345}
+pp. 527--531. DOI @uref{http://doi.acm.org/10.1145/362342.362345, 10.1145/362342.362345}
@item [CMS08]
G. Casale, R. R. Muntz, G. Serazzi,
@cite{Geometric Bounds: a Non-Iterative Analysis Technique for Closed
Queueing Networks}, IEEE Transactions on Computers, 57(6):780-794,
-June 2008. @url{http://doi.ieeecomputersociety.org/10.1109/TC.2008.37}
+June 2008. DOI @uref{http://doi.ieeecomputersociety.org/10.1109/TC.2008.37, 10.1109/TC.2008.37}
@item [GrSn97]
-Charles M. Grinstead, J. Laurie Snell, (July 1997). Introduction to
-Probability. American Mathematical Society. ISBN 978-0821807491
+Charles M. Grinstead, J. Laurie Snell, (July 1997). @cite{Introduction
+to Probability}. American Mathematical Society. ISBN 978-0821807491;
+this excellent textbook is @uref{http://www.dartmouth.edu/~chance/teaching_aids/books_articles/probability_book/amsbook.mac.pdf, available in PDF format}
+and can be used under the terms of the @uref{http://www.gnu.org/copyleft/fdl.html, GNU Free Documentation License (FDL)}
+@item [Jac04]
+James R. Jackson, @cite{Jobshop-Like Queueing Systems}, Vol. 50, No. 12, Ten Most Influential Titles of "Management Science's" First Fifty Years (Dec., 2004), pp. 1796-1802, @uref{http://www.jstor.org/stable/30046149, available online}
+
@item [Jai91]
-R. Jain , @cite{The Art of Computer Systems Performance Analysis},
+R. Jain, @cite{The Art of Computer Systems Performance Analysis},
Wiley, 1991, p. 577.
@item [HsLa87]
@@ -69,7 +77,7 @@
Edward D. Lazowska, John Zahorjan, G. Scott Graham, and Kenneth C.
Sevcik, @cite{Quantitative System Performance: Computer System
Analysis Using Queueing Network Models}, Prentice Hall,
-1984. @url{http://www.cs.washington.edu/homes/lazowska/qsp/}.
+1984. @uref{http://www.cs.washington.edu/homes/lazowska/qsp/, available online}.
@item [ReKo76]
M. Reiser, H. Kobayashi, @cite{On The Convolution Algorithm for
@@ -77,31 +85,33 @@
SIGMETRICS Conference on Computer Performance Modeling Measurement and
Evaluation (Cambridge, Massachusetts, United States, March 29--31,
1976). SIGMETRICS '76. ACM, New York, NY,
-pp. 109--117. @url{http://doi.acm.org/10.1145/800200.806187}
+pp. 109--117. DOI @uref{http://doi.acm.org/10.1145/800200.806187, 10.1145/800200.806187}
@item [ReLa80]
M. Reiser and S. S. Lavenberg, @cite{Mean-Value Analysis of Closed
Multichain Queuing Networks}, Journal of the ACM, vol. 27, n. 2, April
-1980, pp. 313--322. @url{http://doi.acm.org/10.1145/322186.322195}
+1980, pp. 313--322. DOI @uref{http://doi.acm.org/10.1145/322186.322195, 10.1145/322186.322195}
+@item [Sch79]
+P. Schweitzer, @cite{Approximate Analysis of Multiclass Closed Networks of
+Queues}, Proc. Int. Conf. on Stochastic Control and Optimization, jun
+1979, pp. 25—29
+
@item [Sch81]
Herb Schwetman, @cite{Some Computational
-Aspects of Queueing Network Models}, Technical Report CSD-TR-354,
+Aspects of Queueing Network Models}, @uref{http://www.cs.purdue.edu/research/technical_reports/1980/TR%2080-354.pdf, Technical Report CSD-TR-354},
Department of Computer Sciences, Purdue University, feb, 1981
(revised).
-@url{http://www.cs.purdue.edu/research/technical_reports/1980/TR%2080-354.pdf}
@item [Sch82]
Herb Schwetman, @cite{Implementing the Mean Value Algorithm for the
-Solution of Queueing Network Models}, Technical Report CSD-TR-355,
-Department of Computer Sciences, Purdue University, feb 15, 1982,
-available at
-@url{http://www.cs.purdue.edu/research/technical_reports/1980/TR%2080-355.pdf}
+Solution of Queueing Network Models}, @uref{http://www.cs.purdue.edu/research/technical_reports/1980/TR%2080-355.pdf, Technical Report CSD-TR-355},
+Department of Computer Sciences, Purdue University, feb 15, 1982.
@item [ZaWo81]
Zahorjan, J. and Wong, E. @cite{The solution of separable queueing
network models using mean value analysis}. SIGMETRICS
Perform. Eval. Rev. 10, 3 (Sep. 1981), 80-85. DOI
-@url{http://doi.acm.org/10.1145/1010629.805477}
+DOI @uref{http://doi.acm.org/10.1145/1010629.805477, 10.1145/1010629.805477}
@end table
Modified: trunk/octave-forge/main/queueing/inst/dtmc_taexps.m
===================================================================
--- trunk/octave-forge/main/queueing/inst/dtmc_taexps.m 2012-03-18 18:24:04 UTC (rev 9950)
+++ trunk/octave-forge/main/queueing/inst/dtmc_taexps.m 2012-03-18 21:03:48 UTC (rev 9951)
@@ -35,7 +35,7 @@
## Infinitesimal generator matrix. @code{@var{Q}(i,j)} is the transition
## rate from state @math{i} to state @math{j},
## @math{1 @leq{} i \neq j @leq{} N}. The
-## matrix @var{Q} must also satisfy the condition @math{\sum_{j=1}^N Q_{ij} = 0}
+## matrix @var{Q} must also satisfy the condition @math{\sum_{j=1}^N Q_{i, j} = 0}
##
## @item t
## Time. If omitted, the results are computed until absorption.
Modified: trunk/octave-forge/main/queueing/inst/qnmarkov.m
===================================================================
--- trunk/octave-forge/main/queueing/inst/qnmarkov.m 2012-03-18 18:24:04 UTC (rev 9950)
+++ trunk/octave-forge/main/queueing/inst/qnmarkov.m 2012-03-18 21:03:48 UTC (rev 9951)
@@ -54,14 +54,14 @@
##
## @item Average service times are load-independent.
##
-## @item @math{P_{ij}} is the probability that requests completing
+## @item @math{P_{i, j}} is the probability that requests completing
## execution at center @math{i} are transferred to
## center @math{j}, @math{i \neq j}. For open networks, a request may leave the system
-## from any node @math{i} with probability @math{1-\sum_j P_{ij}}.
+## from any node @math{i} with probability @math{1-\sum_j P_{i, j}}.
##
## @item Blocking type is Repetitive-Service (RS). Service
## center @math{j} is @emph{saturated} if the number of requests is equal
-## to its capacity @code{C_j}. Under the RS blocking discipline,
+## to its capacity @math{C_j}. Under the RS blocking discipline,
## a request completing service at center @math{i} which is being
## transferred to a saturated server @math{j} is put back at the end of
## the queue of @math{i} and will receive service again. Center @math{i}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <mma...@us...> - 2012-03-19 12:28:05
|
Revision: 9968
http://octave.svn.sourceforge.net/octave/?rev=9968&view=rev
Author: mmarzolla
Date: 2012-03-19 12:27:55 +0000 (Mon, 19 Mar 2012)
Log Message:
-----------
documentation improvements
Modified Paths:
--------------
trunk/octave-forge/main/queueing/doc/markovchains.txi
trunk/octave-forge/main/queueing/inst/ctmc_bd.m
trunk/octave-forge/main/queueing/inst/dtmc_bd.m
Modified: trunk/octave-forge/main/queueing/doc/markovchains.txi
===================================================================
--- trunk/octave-forge/main/queueing/doc/markovchains.txi 2012-03-19 09:34:32 UTC (rev 9967)
+++ trunk/octave-forge/main/queueing/doc/markovchains.txi 2012-03-19 12:27:55 UTC (rev 9968)
@@ -39,7 +39,8 @@
@iftex
@tex
-$$P\left(X_{n+1} = x_{n+1}\ |\ X_n = x_n, X_{n-1} = x_{n-1}, \ldots, X_0 = x_0 \right) = P\left(X_{n+1} = x_{n+1}\ |\ X_n = x_n\right)$$
+$$\eqalign{P\left(X_{n+1} = x_{n+1}\ |\ X_n = x_n, X_{n-1} = x_{n-1}, \ldots, X_0 = x_0 \right) \cr
+& = P\left(X_{n+1} = x_{n+1}\ |\ X_n = x_n\right)}$$
@end tex
@end iftex
@ifnottex
@@ -52,10 +53,10 @@
The evolution of a Markov chain with finite state space @math{@{1, 2,
@dots{}, N@}} can be fully described by a stochastic matrix @math{{\bf
-P}(n) = P_{i,j}(n)} such that @math{P_{i, j}(n) = P( X_{n+1} = j\ |\
+P}(n) = [ P_{i,j}(n) ]} such that @math{P_{i, j}(n) = P( X_{n+1} = j\ |\
X_n = i )}. If the Markov chain is homogeneous (that is, the
transition probability matrix @math{{\bf P}(n)} is time-independent),
-we can simply write @math{{\bf P} = P_{i, j}}, where @math{P_{i, j} =
+we can simply write @math{{\bf P} = [P_{i, j}]}, where @math{P_{i, j} =
P( X_{n+1} = j\ |\ X_n = i )} for all @math{n=0, 1, @dots{}}.
The transition probability matrix @math{\bf P} must satisfy the
@@ -244,7 +245,8 @@
@iftex
@tex
-$$P(X_{t_{n+1}} = x_{n+1}\ |\ X(t_n) = x_n, X(t_{n-1}) = x_{n-1}, \ldots, X(t_0) = x_0) = P(X(t_{n+1}) = x_{n+1}\ |\ X(t_n) = x_n)$$
+$$\eqalign{P(X(t_{n+1}) = x_{n+1}\ |\ X(t_n) = x_n, X(t_{n-1}) = x_{n-1}, \ldots, X(t_0) = x_0) \cr
+&= P(X(t_{n+1}) = x_{n+1}\ |\ X(t_n) = x_n)}$$
@end tex
@end iftex
@ifnottex
@@ -255,8 +257,9 @@
@emph{infinitesimal generator matrix} @math{{\bf Q} = [Q_{i,j}]} such
that for each @math{i \neq j}, @math{Q_{i, j}} is the transition rate
from state @math{i} to state @math{j}. The elements @math{Q_{i, i}}
-must be defined in such a way that the infinitesimal generator matrix
-@math{\bf Q} satisfies the property @math{\sum_{j=1}^N Q_{i, j} = 0}.
+qre defined as @math{Q_{i, i} = - \sum_{j \neq i} Q_{i, j}}, such that
+matrix @math{\bf Q} satisfies the property that, for all @math{i},
+@math{\sum_{j=1}^N Q_{i, j} = 0}.
@DOCSTRING(ctmc_check_Q)
@@ -373,8 +376,8 @@
@end ifnottex
@noindent where @math{{\bf \pi}(t) = {\bf \pi}(0) \exp({\bf Q}t)} is
-the state occupancy probability at time @math{t}; @math{\exp({\bf A})}
-is the matrix exponential of @math{\bf A}.
+the state occupancy probability at time @math{t}; @math{\exp({\bf Q}t)}
+is the matrix exponential of @math{{\bf Q}t}.
@DOCSTRING(ctmc_exps)
Modified: trunk/octave-forge/main/queueing/inst/ctmc_bd.m
===================================================================
--- trunk/octave-forge/main/queueing/inst/ctmc_bd.m 2012-03-19 09:34:32 UTC (rev 9967)
+++ trunk/octave-forge/main/queueing/inst/ctmc_bd.m 2012-03-19 12:27:55 UTC (rev 9968)
@@ -17,37 +17,51 @@
## -*- texinfo -*-
##
-## @deftypefn {Function File} {@var{Q} =} ctmc_bd (@var{birth}, @var{death})
+## @deftypefn {Function File} {@var{Q} =} ctmc_bd (@var{b}, @var{d})
##
## @cindex Markov chain, continuous time
## @cindex Birth-death process
##
-## Returns the @math{N \times N} infinitesimal generator matrix @math{Q}
-## for a birth-death process with given rates.
+## Returns the infinitesimal generator matrix @math{Q} for a continuous
+## birth-death process over state space @math{1, 2, @dots{}, N}.
+## @code{@var{b}(i)} is the transition rate from state @math{i} to
+## @math{i+1}, and @code{@var{d}(i)} is the transition rate from state
+## @math{i+1} to state @math{i}, @math{i=1, 2, @dots{}, N-1}.
##
-## @strong{INPUTS}
+## Matrix @math{\bf Q} is therefore defined as:
##
-## @table @var
+## @iftex
+## @tex
+## $$ \pmatrix{ -\lambda_1 & \lambda_1 & & & & \cr
+## \mu_1 & -(\mu_1 + \lambda_2) & \lambda_2 & & \cr
+## & \mu_2 & -(\mu_2 + \lambda_3) & \lambda_3 & & \cr
+## \cr
+## & & \ddots & \ddots & \ddots & & \cr
+## \cr
+## & & & \mu_{N-2} & -(\mu_{N-2}+\lambda_{N-1}) & \lambda_{N-1} \cr
+## & & & & \mu_{N-1} & -\mu_{N-1} }
+## $$
+## @end tex
+## @noindent where @math{\lambda_i} and @math{\mu_i} are the birth and
+## death rates, respectively.
+## @end iftex
+## @ifnottex
+## @example
+## @group
+## / \
+## | -b(1) b(1) |
+## | d(1) -(d(1)+b(2)) b(2) |
+## | d(2) -(d(2)+b(3)) b(3) |
+## | |
+## | ... ... ... |
+## | |
+## | d(N-2) -(d(N-2)+b(N-1)) b(N-1) |
+## | d(N-1) -d(N-1) |
+## \ /
+## @end group
+## @end example
+## @end ifnottex
##
-## @item birth
-## Vector with @math{N-1} elements, where @code{@var{birth}(i)} is the
-## transition rate from state @math{i} to state @math{i+1}.
-##
-## @item death
-## Vector with @math{N-1} elements, where @code{@var{death}(i)} is the
-## transition rate from state @math{i+1} to state @math{i}.
-##
-## @end table
-##
-## @strong{OUTPUTS}
-##
-## @table @var
-##
-## @item Q
-## Infinitesimal generator matrix for the birth-death process.
-##
-## @end table
-##
## @end deftypefn
## Author: Moreno Marzolla <marzolla(at)cs.unibo.it>
Modified: trunk/octave-forge/main/queueing/inst/dtmc_bd.m
===================================================================
--- trunk/octave-forge/main/queueing/inst/dtmc_bd.m 2012-03-19 09:34:32 UTC (rev 9967)
+++ trunk/octave-forge/main/queueing/inst/dtmc_bd.m 2012-03-19 12:27:55 UTC (rev 9968)
@@ -17,68 +17,83 @@
## -*- texinfo -*-
##
-## @deftypefn {Function File} {@var{P} =} dtmc_bd (@var{birth}, @var{death})
+## @deftypefn {Function File} {@var{P} =} dtmc_bd (@var{b}, @var{d})
##
## @cindex Markov chain, discrete time
## @cindex Birth-death process
##
-## Returns the @math{N \times N} transition probability matrix @math{P}
-## for a birth-death process with given rates.
+## Returns the transition probability matrix @math{P} for a discrete
+## birth-death process over state space @math{1, 2, @dots{}, N}.
+## @code{@var{b}(i)} is the transition probability from state
+## @math{i} to @math{i+1}, and @code{@var{d}(i)} is the transition
+## probability from state @math{i+1} to state @math{i}, @math{i=1, 2,
+## @dots{}, N-1}.
##
-## @strong{INPUTS}
+## Matrix @math{\bf P} is therefore defined as:
##
-## @table @var
+## @iftex
+## @tex
+## $$ \pmatrix{ (1-\lambda_1) & \lambda_1 & & & & \cr
+## \mu_1 & (1 - \mu_1 - \lambda_2) & \lambda_2 & & \cr
+## & \mu_2 & (1 - \mu_2 - \lambda_3) & \lambda_3 & & \cr
+## \cr
+## & & \ddots & \ddots & \ddots & & \cr
+## \cr
+## & & & \mu_{N-2} & (1 - \mu_{N-2}-\lambda_{N-1}) & \lambda_{N-1} \cr
+## & & & & \mu_{N-1} & (1-\mu_{N-1}) }
+## $$
+## @end tex
+## @noindent where @math{\lambda_i} and @math{\mu_i} are the birth and
+## death probabilities, respectively.
+## @end iftex
+## @ifnottex
+## @example
+## @group
+## / \
+## | 1-b(1) b(1) |
+## | d(1) (1-d(1)-b(2)) b(2) |
+## | d(2) (1-d(2)-b(3)) b(3) |
+## | |
+## | ... ... ... |
+## | |
+## | d(N-2) (1-d(N-2)-b(N-1)) b(N-1) |
+## | d(N-1) 1-d(N-1) |
+## \ /
+## @end group
+## @end example
+## @end ifnottex
##
-## @item birth
-## Vector with @math{N-1} elements, where @code{@var{birth}(i)} is the
-## transition probability from state @math{i} to state @math{i+1}.
-##
-## @item death
-## Vector with @math{N-1} elements, where @code{@var{death}(i)} is the
-## transition probability from state @math{i+1} to state @math{i}.
-##
-## @end table
-##
-## @strong{OUTPUTS}
-##
-## @table @var
-##
-## @item P
-## Transition probability matrix for the birth-death process.
-##
-## @end table
-##
## @end deftypefn
## Author: Moreno Marzolla <marzolla(at)cs.unibo.it>
## Web: http://www.moreno.marzolla.name/
-function P = dtmc_bd( birth, death )
+function P = dtmc_bd( b, d )
if ( nargin != 2 )
print_usage();
endif
- ( isvector( birth ) && isvector( death ) ) || \
+ ( isvector( b ) && isvector( d ) ) || \
usage( "birth and death must be vectors" );
- birth = birth(:); # make birth a column vector
- death = death(:); # make death a column vector
- size_equal( birth, death ) || \
+ b = b(:); # make b a column vector
+ d = d(:); # make d a column vector
+ size_equal( b, d ) || \
usage( "birth and death vectors must have the same length" );
- all( birth >= 0 ) || \
+ all( b >= 0 ) || \
usage( "birth probabilities must be >= 0" );
- all( death >= 0 ) || \
+ all( d >= 0 ) || \
usage( "death probabilities must be >= 0" );
- all( ([birth; 0] + [0; death]) <= 1 ) || \
- usage( "Inconsistent birth/death probabilities");
- ## builds the infinitesimal generator matrix
- P = diag( birth, 1 ) + diag( death, -1 );
+ all( ([b; 0] + [0; d]) <= 1 ) || \
+ usage( "d(i)+b(i+1) must be <= 1");
+
+ P = diag( b, 1 ) + diag( d, -1 );
P += diag( 1-sum(P,2) );
endfunction
%!test
%! birth = [.5 .5 .3];
%! death = [.6 .2 .3];
-%! fail("dtmc_bd(birth,death)","Inconsistent");
+%! fail("dtmc_bd(birth,death)","must be");
%!demo
%! birth = [ .2 .3 .4 ];
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <mma...@us...> - 2012-03-19 21:31:54
|
Revision: 9972
http://octave.svn.sourceforge.net/octave/?rev=9972&view=rev
Author: mmarzolla
Date: 2012-03-19 21:31:47 +0000 (Mon, 19 Mar 2012)
Log Message:
-----------
new example in documentation
Modified Paths:
--------------
trunk/octave-forge/main/queueing/doc/markovchains.txi
trunk/octave-forge/main/queueing/inst/dtmc.m
trunk/octave-forge/main/queueing/inst/dtmc_fpt.m
trunk/octave-forge/main/queueing/inst/dtmc_mtta.m
Modified: trunk/octave-forge/main/queueing/doc/markovchains.txi
===================================================================
--- trunk/octave-forge/main/queueing/doc/markovchains.txi 2012-03-19 16:31:21 UTC (rev 9971)
+++ trunk/octave-forge/main/queueing/doc/markovchains.txi 2012-03-19 21:31:47 UTC (rev 9972)
@@ -140,12 +140,79 @@
@noindent @strong{EXAMPLE}
+This example is from [GrSn97]. Let us consider a maze with nine rooms,
+as shown in the following figure
+
@example
@group
-@verbatiminclude @value{top_srcdir}/examples/demo_1_dtmc.m
++-----+-----+-----+
+| | | |
+| 1 2 3 |
+| | | |
++- -+- -+- -+
+| | | |
+| 4 5 6 |
+| | | |
++- -+- -+- -+
+| | | |
+| 7 8 9 |
+| | | |
++-----+-----+-----+
@end group
@end example
+A mouse is placed in one of the rooms and can wander around. At each
+step, the mouse moves to one of the neighboring rooms with equal
+probability: if it is in room 1, it van move to room 2 and 4 with
+probability 1/2. If the mouse is in room 8, it can move to either 7, 5
+or 9 with probability 1/3.
+
+The transition probability @math{\bf P} from room @math{i} to room
+@math{j} is the following:
+
+@iftex
+@tex
+$$ {\bf P} =
+\pmatrix{ 0 & 1/2 & 0 & 1/2 & 0 & 0 & 0 & 0 & 0 \cr
+ 1/3 & 0 & 1/3 & 0 & 1/3 & 0 & 0 & 0 & 0 \cr
+ 0 & 1/2 & 0 & 0 & 0 & 1/2 & 0 & 0 & 0 \cr
+ 1/3 & 0 & 0 & 0 & 1/3 & 0 & 1/3 & 0 & 0 \cr
+ 0 & 1/4 & 0 & 1/4 & 0 & 1/4 & 0 & 1/4 & 0 \cr
+ 0 & 0 & 1/3 & 0 & 1/3 & 0 & 0 & 0 & 1/3 \cr
+ 0 & 0 & 0 & 1/2 & 0 & 0 & 0 & 1/2 & 0 \cr
+ 0 & 0 & 0 & 0 & 1/3 & 0 & 1/3 & 0 & 1/3 \cr
+ 0 & 0 & 0 & 0 & 0 & 1/2 & 0 & 1/2 & 0 }
+$$
+@end tex
+@end iftex
+@ifnottex
+@example
+@group
+ / 0 1/2 0 1/2 0 0 0 0 0 \
+ | 1/3 0 1/3 0 1/3 0 0 0 0 |
+ | 0 1/2 0 0 0 1/2 0 0 0 |
+ | 1/3 0 0 0 1/3 0 1/3 0 0 |
+ P = | 0 1/4 0 1/4 0 1/4 0 1/4 0 |
+ | 0 0 1/3 0 1/3 0 0 0 1/3 |
+ | 0 0 0 1/2 0 0 0 1/2 0 |
+ | 0 0 0 0 1/3 0 1/3 0 1/3 |
+ \ 0 0 0 0 0 1/2 0 1/2 0 /
+@end group
+@end example
+@end ifnottex
+
+The stationary state occupancy probability vector can be computed
+using the following code:
+
+@example
+@c @group
+@verbatiminclude @value{top_srcdir}/examples/demo_1_dtmc.m
+@c @end group
+ @result{} 0.083333 0.125000 0.083333 0.125000
+ 0.166667 0.125000 0.083333 0.125000
+ 0.083333
+@end example
+
@c
@node Birth-death process (DTMC)
@subsection Birth-death process
@@ -325,6 +392,30 @@
@end example
@end ifnottex
+According to the definition above, @math{M_{i,i} = 0}. We arbitrarily
+redefine @math{M_{i,i}} to be the @emph{mean recurrence time}
+@math{r_i} for state @math{i}, that is the average number of
+transitions needed to return to state @math{i} starting from
+it. @math{r_i} is defined as:
+
+@iftex
+@tex
+$$ r_i = {1 \over \pi_i} $$
+@end tex
+@end iftex
+@ifnottex
+@example
+@group
+ 1
+r_i = -----
+ \pi_i
+@end group
+@end example
+@end ifnottex
+
+@noindent where @math{\pi_i} is the stationary probability of visiting state
+@math{i}.
+
@DOCSTRING(dtmc_fpt)
@c
Modified: trunk/octave-forge/main/queueing/inst/dtmc.m
===================================================================
--- trunk/octave-forge/main/queueing/inst/dtmc.m 2012-03-19 16:31:21 UTC (rev 9971)
+++ trunk/octave-forge/main/queueing/inst/dtmc.m 2012-03-19 21:31:47 UTC (rev 9972)
@@ -156,7 +156,36 @@
%! p = dtmc(P);
%! assert( p, [.0625 .25 .375 .25 .0625], 10*eps );
+## "Rat maze" problem (p. 441 of [GrSn97]);
+%!test
+%! P = zeros(9,9);
+%! P(1,[2 4]) = 1/2;
+%! P(2,[1 5 3]) = 1/3;
+%! P(3,[2 6]) = 1/2;
+%! P(4,[1 5 7]) = 1/3;
+%! P(5,[2 4 6 8]) = 1/4;
+%! P(6,[3 5 9]) = 1/3;
+%! P(7,[4 8]) = 1/2;
+%! P(8,[7 5 9]) = 1/3;
+%! P(9,[6 8]) = 1/2;
+%! p = dtmc(P);
+%! assert( p, [1/12 1/8 1/12 1/8 1/6 1/8 1/12 1/8 1/12], 10*eps );
+
%!demo
+%! P = zeros(9,9);
+%! P(1,[2 4] ) = 1/2;
+%! P(2,[1 5 3] ) = 1/3;
+%! P(3,[2 6] ) = 1/2;
+%! P(4,[1 5 7] ) = 1/3;
+%! P(5,[2 4 6 8]) = 1/4;
+%! P(6,[3 5 9] ) = 1/3;
+%! P(7,[4 8] ) = 1/2;
+%! P(8,[7 5 9] ) = 1/3;
+%! P(9,[6 8] ) = 1/2;
+%! p = dtmc(P);
+%! disp(p)
+
+%!demo
%! a = 0.2;
%! b = 0.15;
%! P = [ 1-a a; b 1-b];
Modified: trunk/octave-forge/main/queueing/inst/dtmc_fpt.m
===================================================================
--- trunk/octave-forge/main/queueing/inst/dtmc_fpt.m 2012-03-19 16:31:21 UTC (rev 9971)
+++ trunk/octave-forge/main/queueing/inst/dtmc_fpt.m 2012-03-19 21:31:47 UTC (rev 9972)
@@ -73,8 +73,7 @@
error("Cannot compute first passage times for absorbing chains");
endif
- ## Source:
- ## http://www.cs.virginia.edu/~gfx/Courses/2006/DataDriven/bib/texsyn/Chapter11.pdf
+ ## Source [GrSn97]
w = dtmc(P); # steady state probability vector
W = repmat(w,N,1);
## Z = (I - P + W)^-1 where W is the matrix where each row is the
@@ -100,8 +99,7 @@
%! M = dtmc_fpt(P);
%! assert( diag(M)', 1./p, 1e-8 );
-## Example on p. 461 of
-## http://www.cs.virginia.edu/~gfx/Courses/2006/DataDriven/bib/texsyn/Chapter11.pdf
+## Example on p. 461 of [GrSn97]
%!test
%! P = [ 0 1 0 0 0; \
%! .25 .0 .75 0 0; \
@@ -127,6 +125,21 @@
%! endfor
%! endfor
+## "Rat maze" problem (p. 453 of [GrSn97]);
+%!test
+%! P = zeros(9,9);
+%! P(1,[2 4]) = .5;
+%! P(2,[1 5 3]) = 1/3;
+%! P(3,[2 6]) = .5;
+%! P(4,[1 5 7]) = 1/3;
+%! P(5,[2 4 6 8]) = 1/4;
+%! P(6,[3 5 9]) = 1/3;
+%! P(7,[4 8]) = .5;
+%! P(8,[7 5 9]) = 1/3;
+%! P(9,[6 8]) = .5;
+%! M = dtmc_fpt(P);
+%! assert( M(1:9 != 5,5)', [6 5 6 5 5 6 5 6], 10*eps );
+
%!demo
%! P = [ 0.0 0.9 0.1; \
%! 0.1 0.0 0.9; \
Modified: trunk/octave-forge/main/queueing/inst/dtmc_mtta.m
===================================================================
--- trunk/octave-forge/main/queueing/inst/dtmc_mtta.m 2012-03-19 16:31:21 UTC (rev 9971)
+++ trunk/octave-forge/main/queueing/inst/dtmc_mtta.m 2012-03-19 21:31:47 UTC (rev 9972)
@@ -112,8 +112,8 @@
## Source: Grinstead, Charles M.; Snell, J. Laurie (July 1997). "Ch.
## 11: Markov Chains". Introduction to Probability. American
## Mathematical Society. ISBN 978-0821807491.
+ ## http://www.cs.virginia.edu/~gfx/Courses/2006/DataDriven/bib/texsyn/Chapter11.pdf
- ## http://www.cs.virginia.edu/~gfx/Courses/2006/DataDriven/bib/texsyn/Chapter11.pdf
tmpN = inv(eye(k) - P(tr,tr)); # matrix N = (I-Q)^-1
N(tr,tr) = tmpN;
R = P(tr,ab);
@@ -154,8 +154,7 @@
%! assert( B(3,1), 0.5, 10*eps );
%! assert( B(3,5), 0.5, 10*eps );
-## Example on p. 422 of
-## http://www.cs.virginia.edu/~gfx/Courses/2006/DataDriven/bib/texsyn/Chapter11.pdf
+## Example on p. 422 of [GrSn97]
%!test
%! P = dtmc_bd([0 .5 .5 .5 .5], [.5 .5 .5 .5 0]);
%! [t N B] = dtmc_mtta(P);
@@ -230,3 +229,19 @@
%! text(f*1.1,0.2,["Mean Time to Absorption (" num2str(f) ")"]);
%! xlabel("Step number (n)");
%! title("Probability of finishing the game before step n");
+
+## "Rat maze" problem (p. 453 of [GrSn97]);
+%!test
+%! P = zeros(9,9);
+%! P(1,[2 4]) = .5;
+%! P(2,[1 5 3]) = 1/3;
+%! P(3,[2 6]) = .5;
+%! P(4,[1 5 7]) = 1/3;
+%! P(5,:) = 0; P(5,5) = 1;
+%! P(6,[3 5 9]) = 1/3;
+%! P(7,[4 8]) = .5;
+%! P(8,[7 5 9]) = 1/3;
+%! P(9,[6 8]) = .5;
+%! t = dtmc_mtta(P);
+%! assert( t, [6 5 6 5 0 5 6 5 6], 10*eps );
+
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|