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. |