Input buildinfo: https://buildinfos.debian.net/buildinfo-pool/o/octave-queueing/octave-queueing_1.2.7-3_all.buildinfo Use metasnap for getting required timestamps New buildinfo file: /tmp/octave-queueing-1.2.7-3fgs65qpz/octave-queueing_1.2.7-3_all.buildinfo Get source package info: octave-queueing=1.2.7-3 Source URL: http://snapshot.notset.fr/mr/package/octave-queueing/1.2.7-3/srcfiles?fileinfo=1 env -i PATH=/usr/sbin:/usr/bin:/sbin:/bin TMPDIR=/tmp mmdebstrap --arch=amd64 --include=aglfn=1.7+git20191031.4036a9c-2 autoconf=2.69-11.1 automake=1:1.16.2-3 autopoint=0.19.8.1-10 autotools-dev=20180224.1 base-files=11 base-passwd=3.5.47 bash=5.0-6 binutils=2.35-1 binutils-common=2.35-1 binutils-x86-64-linux-gnu=2.35-1 bsdextrautils=2.36-1 bsdutils=1:2.36-1 build-essential=12.8 bzip2=1.0.8-4 ca-certificates=20200601 cme=1.032-1 coreutils=8.32-3 cpp=4:10.1.0-1 cpp-10=10.2.0-3 dash=0.5.10.2-7 debconf=1.5.74 debhelper=13.2 debianutils=4.11 dh-autoreconf=19 dh-octave=0.7.6 dh-octave-autopkgtest=0.7.6 dh-strip-nondeterminism=1.9.0-1 diffstat=1.63-1 diffutils=1:3.7-3 dpkg=1.20.5 dpkg-dev=1.20.5 dwz=0.13-5 epstool=3.09-2 fig2dev=1:3.2.7b-4 file=1:5.38-5 findutils=4.7.0-1 fontconfig=2.13.1-4.2 fontconfig-config=2.13.1-4.2 fonts-dejavu-core=2.37-2 fonts-freefont-otf=20120503-10 fonts-lmodern=2.004.5-6 fonts-urw-base35=20170801.1-3 g++=4:10.1.0-1 g++-10=10.2.0-3 gawk=1:5.0.1+dfsg-1 gcc=4:10.1.0-1 gcc-10=10.2.0-3 gcc-10-base=10.2.0-3 gettext=0.19.8.1-10 gettext-base=0.19.8.1-10 gfortran=4:10.1.0-1 gfortran-10=10.2.0-3 ghostscript=9.52~dfsg-1 gnuplot-data=5.2.8+dfsg1-2 gnuplot-nox=5.2.8+dfsg1-2 gpg=2.2.20-1 gpgconf=2.2.20-1 graphicsmagick=1.4+really1.3.35+hg16297-1 graphicsmagick-imagemagick-compat=1.4+really1.3.35+hg16297-1 grep=3.4-1 groff-base=1.22.4-5 gzip=1.10-2 hdf5-helpers=1.10.6+repack-2 hostname=3.23 init-system-helpers=1.58 intltool-debian=0.35.0+20060710.5 libacl1=2.2.53-8 libaec-dev=1.0.4-1 libaec0=1.0.4-1 libalgorithm-c3-perl=0.10-1 libaliased-perl=0.34-1 libamd2=1:5.8.1+dfsg-1 libapp-cmd-perl=0.331-1 libapt-pkg-perl=0.1.36+b3 libapt-pkg6.0=2.1.7 libarchive-zip-perl=1.68-1 libarpack2=3.7.0-3 libarray-intspan-perl=2.004-1 libasan6=10.2.0-3 libasound2=1.2.2-2.3 libasound2-data=1.2.2-2.3 libassuan0=2.5.3-7.1 libatomic1=10.2.0-3 libattr1=1:2.4.48-5 libaudit-common=1:2.8.5-3 libaudit1=1:2.8.5-3+b1 libavahi-client3=0.8-3 libavahi-common-data=0.8-3 libavahi-common3=0.8-3 libb-hooks-endofscope-perl=0.24-1 libb-hooks-op-check-perl=0.22-1+b2 libbinutils=2.35-1 libblas-dev=3.9.0-2 libblas3=3.9.0-2 libblkid1=2.36-1 libboolean-perl=0.46-1 libbrotli1=1.0.7-7 libbsd0=0.10.0-1 libbz2-1.0=1.0.8-4 libc-bin=2.31-2 libc-dev-bin=2.31-2 libc6=2.31-2 libc6-dev=2.31-2 libcairo2=1.16.0-4 libcamd2=1:5.8.1+dfsg-1 libcap-ng0=0.7.9-2.2 libcapture-tiny-perl=0.48-1 libcarp-assert-more-perl=1.20-1 libcarp-assert-perl=0.21-1 libcc1-0=10.2.0-3 libccolamd2=1:5.8.1+dfsg-1 libcholmod3=1:5.8.1+dfsg-1 libclass-c3-perl=0.34-1 libclass-data-inheritable-perl=0.08-3 libclass-load-perl=0.25-1 libclass-method-modifiers-perl=2.13-1 libclass-xsaccessor-perl=1.19-3+b5 libclone-choose-perl=0.010-1 libclone-perl=0.45-1 libcolamd2=1:5.8.1+dfsg-1 libcom-err2=1.45.6-1 libconfig-model-backend-yaml-perl=2.133-2 libconfig-model-dpkg-perl=2.137 libconfig-model-perl=2.139-1 libconfig-tiny-perl=2.24-1 libconvert-binhex-perl=1.125-1 libcpanel-json-xs-perl=4.19-1 libcroco3=0.6.13-1 libcrypt-dev=1:4.4.16-1 libcrypt1=1:4.4.16-1 libctf-nobfd0=2.35-1 libctf0=2.35-1 libcups2=2.3.3-2 libcurl3-gnutls=7.68.0-1+b1 libcxsparse3=1:5.8.1+dfsg-1 libdata-dpath-perl=0.58-1 libdata-messagepack-perl=1.00-4 libdata-optlist-perl=0.110-1 libdata-section-perl=0.200007-1 libdata-validate-domain-perl=0.10-1 libdatrie1=0.2.12-3 libdb5.3=5.3.28+dfsg1-0.6 libdbus-1-3=1.12.20-1 libdebconfclient0=0.253 libdebhelper-perl=13.2 libdevel-callchecker-perl=0.008-1+b1 libdevel-size-perl=0.83-1+b1 libdevel-stacktrace-perl=2.0400-1 libdouble-conversion3=3.1.5-5 libdpkg-perl=1.20.5 libdrm-amdgpu1=2.4.102-1 libdrm-common=2.4.102-1 libdrm-intel1=2.4.102-1 libdrm-nouveau2=2.4.102-1 libdrm-radeon1=2.4.102-1 libdrm2=2.4.102-1 libdynaloader-functions-perl=0.003-1 libedit2=3.1-20191231-1 libegl-dev=1.3.2-1 libegl-mesa0=20.1.4-1 libegl1=1.3.2-1 libelf1=0.180-1 libemail-address-xs-perl=1.04-1+b2 libencode-locale-perl=1.05-1 liberror-perl=0.17029-1 libevdev2=1.9.1+dfsg-1 libexception-class-perl=1.44-1 libexpat1=2.2.9-1 libexporter-lite-perl=0.08-1 libexporter-tiny-perl=1.002002-1 libffi7=3.3-4 libfftw3-bin=3.3.8-2 libfftw3-dev=3.3.8-2 libfftw3-double3=3.3.8-2 libfftw3-long3=3.3.8-2 libfftw3-quad3=3.3.8-2 libfftw3-single3=3.3.8-2 libfile-basedir-perl=0.08-1 libfile-find-rule-perl=0.34-1 libfile-homedir-perl=1.004-1 libfile-listing-perl=6.04-1 libfile-stripnondeterminism-perl=1.9.0-1 libfile-which-perl=1.23-1 libflac8=1.3.3-1 libfltk-gl1.3=1.3.5-1 libfltk1.3=1.3.5-1 libfont-ttf-perl=1.06-1 libfontconfig1=2.13.1-4.2 libfreetype6=2.10.2+dfsg-3 libfribidi0=1.0.8-2 libfuture-perl=0.45-1 libgbm1=20.1.4-1 libgcc-10-dev=10.2.0-3 libgcc-s1=10.2.0-3 libgcrypt20=1.8.6-2 libgd3=2.3.0-2 libgdbm-compat4=1.18.1-5 libgdbm6=1.18.1-5 libgetopt-long-descriptive-perl=0.105-1 libgfortran-10-dev=10.2.0-3 libgfortran5=10.2.0-3 libgl-dev=1.3.2-1 libgl1=1.3.2-1 libgl1-mesa-dev=20.1.4-1 libgl1-mesa-dri=20.1.4-1 libgl2ps1.4=1.4.2+dfsg1-1 libglapi-mesa=20.1.4-1 libgles-dev=1.3.2-1 libgles1=1.3.2-1 libgles2=1.3.2-1 libglib2.0-0=2.64.4-1 libglpk40=4.65-2 libglu1-mesa=9.0.1-1 libglvnd-dev=1.3.2-1 libglvnd0=1.3.2-1 libglx-dev=1.3.2-1 libglx-mesa0=20.1.4-1 libglx0=1.3.2-1 libgmp10=2:6.2.0+dfsg-6 libgnutls30=3.6.14-2+b1 libgomp1=10.2.0-3 libgpg-error0=1.38-2 libgraphicsmagick++-q16-12=1.4+really1.3.35+hg16297-1 libgraphicsmagick-q16-3=1.4+really1.3.35+hg16297-1 libgraphite2-3=1.3.14-1 libgs9=9.52~dfsg-1 libgs9-common=9.52~dfsg-1 libgssapi-krb5-2=1.17-10 libgudev-1.0-0=233-1 libharfbuzz0b=2.6.7-1 libhash-fieldhash-perl=0.15-1+b2 libhash-merge-perl=0.301-1 libhdf5-103-1=1.10.6+repack-2 libhdf5-cpp-103-1=1.10.6+repack-2 libhdf5-dev=1.10.6+repack-2 libhdf5-fortran-102=1.10.6+repack-2 libhdf5-hl-100=1.10.6+repack-2 libhdf5-hl-cpp-100=1.10.6+repack-2 libhdf5-hl-fortran-100=1.10.6+repack-2 libhogweed6=3.6-2 libhtml-parser-perl=3.72-5 libhtml-tagset-perl=3.20-4 libhtml-tree-perl=5.07-2 libhttp-cookies-perl=6.08-1 libhttp-date-perl=6.05-1 libhttp-message-perl=6.25-1 libhttp-negotiate-perl=6.01-1 libice6=2:1.0.9-2 libicu67=67.1-3 libidn11=1.33-2.4 libidn2-0=2.3.0-1 libijs-0.35=0.35-15 libimport-into-perl=1.002005-1 libinput-bin=1.15.5-1 libinput10=1.15.5-1 libio-async-loop-epoll-perl=0.21-1 libio-async-perl=0.77-3 libio-html-perl=1.001-1 libio-socket-ssl-perl=2.067-1 libio-string-perl=1.08-3 libio-stringy-perl=2.111-3 libio-tiecombine-perl=1.005-1 libipc-system-simple-perl=1.30-1 libisl22=0.22.1-1 libiterator-perl=0.03+ds1-1 libiterator-util-perl=0.02+ds1-1 libitm1=10.2.0-3 libjack-jackd2-0=1.9.14~dfsg-0.1 libjbig0=2.1-3.1+b2 libjbig2dec0=0.18+20200417-1 libjpeg-dev=1:2.0.5-1 libjpeg62-turbo=1:2.0.5-1 libjpeg62-turbo-dev=1:2.0.5-1 libjson-maybexs-perl=1.004002-1 libjson-perl=4.02000-2 libk5crypto3=1.17-10 libkeyutils1=1.6.1-2 libkpathsea6=2020.20200327.54578-4+b1 libkrb5-3=1.17-10 libkrb5support0=1.17-10 liblapack-dev=3.9.0-2 liblapack3=3.9.0-2 liblcms2-2=2.9-4+b1 libldap-2.4-2=2.4.50+dfsg-1+b1 libldap-common=2.4.50+dfsg-1 liblinux-epoll-perl=0.017-1 liblist-compare-perl=0.53-1 liblist-moreutils-perl=0.416-1+b5 liblist-someutils-perl=0.58-1 liblist-utilsby-perl=0.11-1 libllvm10=1:10.0.1-1 liblog-any-adapter-screen-perl=0.140-1 liblog-any-perl=1.708-1 liblog-log4perl-perl=1.50-1 liblsan0=10.2.0-3 libltdl7=2.4.6-14 liblua5.3-0=5.3.3-1.1+b1 liblwp-mediatypes-perl=6.04-1 liblwp-protocol-https-perl=6.09-1 liblz4-1=1.9.2-2 liblzma5=5.2.4-1+b1 libmagic-mgc=1:5.38-5 libmagic1=1:5.38-5 libmailtools-perl=2.21-1 libmd4c0=0.4.4-1+b1 libmetis5=5.1.0.dfsg-7 libmetrics-any-perl=0.06-1 libmime-tools-perl=5.509-1 libmodule-implementation-perl=0.09-1 libmodule-pluggable-perl=5.2-1 libmodule-runtime-perl=0.016-1 libmoo-perl=2.004000-1 libmoox-aliases-perl=0.001006-1 libmoox-struct-perl=0.020-1 libmount1=2.36-1 libmouse-perl=2.5.10-1 libmousex-nativetraits-perl=1.09-2 libmousex-strictconstructor-perl=0.02-2 libmpc3=1.1.0-1 libmpfr6=4.1.0-3 libmro-compat-perl=0.13-1 libmtdev1=1.1.6-1 libnamespace-autoclean-perl=0.29-1 libnamespace-clean-perl=0.27-1 libncurses-dev=6.2-1 libncurses6=6.2-1 libncursesw6=6.2-1 libnet-domain-tld-perl=1.75-1 libnet-http-perl=6.19-1 libnet-smtp-ssl-perl=1.04-1 libnet-ssleay-perl=1.88-3 libnetpbm10=2:10.0-15.3+b2 libnettle8=3.6-2 libnghttp2-14=1.41.0-2 libnumber-compare-perl=0.03-1 libnumber-range-perl=0.12-1 libobject-id-perl=0.1.2-2 liboctave-dev=5.2.0-3+b1 liboctave7=5.2.0-3+b1 libogg0=1.3.2-1+b1 libopengl-dev=1.3.2-1 libopengl0=1.3.2-1 libopenjp2-7=2.3.1-1 libp11-kit0=0.23.20-1 libpackage-stash-perl=0.38-1 libpam-modules=1.3.1-5 libpam-modules-bin=1.3.1-5 libpam-runtime=1.3.1-5 libpam0g=1.3.1-5 libpango-1.0-0=1.44.7-4 libpangocairo-1.0-0=1.44.7-4 libpangoft2-1.0-0=1.44.7-4 libpaper-utils=1.1.28+b1 libpaper1=1.1.28+b1 libparams-classify-perl=0.015-1+b2 libparams-util-perl=1.07-3+b5 libparams-validate-perl=1.29-3 libparse-debcontrol-perl=2.005-4 libparse-recdescent-perl=1.967015+dfsg-2 libpath-iterator-rule-perl=1.014-1 libpath-tiny-perl=0.114-1 libpciaccess0=0.14-1 libpcre2-16-0=10.34-7 libpcre2-8-0=10.34-7 libpcre3=2:8.39-13 libperl5.30=5.30.3-4 libpipeline1=1.5.2-2 libpixman-1-0=0.36.0-1 libpng16-16=1.6.37-2 libpod-constants-perl=0.19-2 libpod-pom-perl=2.01-3 libportaudio2=19.6.0-1 libpsl5=0.21.0-1.1 libptexenc1=2020.20200327.54578-4+b1 libpthread-stubs0-dev=0.4-1 libqhull8.0=2020.1-2 libqrupdate1=1.1.2-4 libqscintilla2-qt5-15=2.11.2+dfsg-7 libqscintilla2-qt5-l10n=2.11.2+dfsg-7 libqt5core5a=5.14.2+dfsg-4 libqt5dbus5=5.14.2+dfsg-4 libqt5gui5=5.14.2+dfsg-4 libqt5help5=5.14.2-2 libqt5network5=5.14.2+dfsg-4 libqt5printsupport5=5.14.2+dfsg-4 libqt5sql5=5.14.2+dfsg-4 libqt5widgets5=5.14.2+dfsg-4 libqt5xml5=5.14.2+dfsg-4 libquadmath0=10.2.0-3 libre-engine-re2-perl=0.13-5+b3 libre2-8=20200706+dfsg-2 libreadline-dev=8.0-4 libreadline8=8.0-4 libregexp-common-perl=2017060201-1 libregexp-pattern-license-perl=3.4.0-1 libregexp-pattern-perl=0.2.14-1 librole-tiny-perl=2.001004-1 librtmp1=2.4+20151223.gitfa8646d.1-2+b2 libsamplerate0=0.1.9-2 libsasl2-2=2.1.27+dfsg-2 libsasl2-modules-db=2.1.27+dfsg-2 libseccomp2=2.4.3-1+b1 libselinux1=3.1-2 libsensors-config=1:3.6.0-2 libsensors5=1:3.6.0-2 libsereal-decoder-perl=4.017+ds-1 libsereal-encoder-perl=4.017+ds-1 libsigsegv2=2.12-2 libsm6=2:1.2.3-1 libsmartcols1=2.36-1 libsndfile1=1.0.28-8 libsoftware-license-perl=0.103014-2 libsoftware-licensemoreutils-perl=1.004-1 libsort-key-perl=1.33-2+b2 libsort-versions-perl=1.62-1 libsqlite3-0=3.32.3-1 libssh2-1=1.8.0-2.1 libssl1.1=1.1.1g-1 libstdc++-10-dev=10.2.0-3 libstdc++6=10.2.0-3 libstrictures-perl=2.000006-1 libstring-copyright-perl=0.003006-1 libstring-escape-perl=2010.002-2 libstring-rewriteprefix-perl=0.008-1 libstruct-dumb-perl=0.12-1 libsub-exporter-perl=0.987-1 libsub-exporter-progressive-perl=0.001013-1 libsub-identify-perl=0.14-1+b2 libsub-install-perl=0.928-1 libsub-name-perl=0.26-1 libsub-override-perl=0.09-2 libsub-quote-perl=2.006006-1 libsub-uplevel-perl=0.2800-1 libsuitesparseconfig5=1:5.8.1+dfsg-1 libsynctex2=2020.20200327.54578-4+b1 libsystemd0=245.6-3 libsz2=1.0.4-1 libtasn1-6=4.16.0-2 libteckit0=2.5.8+ds2-5 libtest-exception-perl=0.43-1 libtest-metrics-any-perl=0.01-2 libtexlua53=2020.20200327.54578-4+b1 libtexluajit2=2020.20200327.54578-4+b1 libtext-autoformat-perl=1.750000-1 libtext-glob-perl=0.11-1 libtext-levenshtein-damerau-perl=0.41-1 libtext-levenshteinxs-perl=0.03-4+b7 libtext-reform-perl=1.20-3 libtext-template-perl=1.59-1 libtext-unidecode-perl=1.30-1 libtext-xslate-perl=3.5.8-1 libthai-data=0.1.28-3 libthai0=0.1.28-3 libtiff5=4.1.0+git191117-2 libtime-duration-perl=1.21-1 libtime-moment-perl=0.44-1+b2 libtimedate-perl=2.3300-1 libtinfo6=6.2-1 libtool=2.4.6-14 libtry-tiny-perl=0.30-1 libtsan0=10.2.0-3 libtype-tiny-perl=1.010002-1 libubsan1=10.2.0-3 libuchardet0=0.0.7-1 libudev1=245.6-3 libumfpack5=1:5.8.1+dfsg-1 libunicode-utf8-perl=0.62-1+b1 libunistring2=0.9.10-4 liburi-perl=1.76-2 libuuid1=2.36-1 libvariable-magic-perl=0.62-1+b2 libvorbis0a=1.3.6-2 libvorbisenc2=1.3.6-2 libvulkan1=1.2.141.0-1 libwacom-common=1.3-2 libwacom2=1.3-2 libwayland-client0=1.18.0-1 libwayland-server0=1.18.0-1 libwebp6=0.6.1-2+b1 libwebpmux3=0.6.1-2+b1 libwmf0.2-7=0.2.8.4-17 libwww-perl=6.46-1 libwww-robotrules-perl=6.02-1 libx11-6=2:1.6.9-2+b1 libx11-data=2:1.6.9-2 libx11-dev=2:1.6.9-2+b1 libx11-xcb1=2:1.6.9-2+b1 libxau-dev=1:1.0.8-1+b2 libxau6=1:1.0.8-1+b2 libxaw7=2:1.0.13-1+b2 libxcb-dri2-0=1.14-2 libxcb-dri3-0=1.14-2 libxcb-glx0=1.14-2 libxcb-icccm4=0.4.1-1.1 libxcb-image0=0.4.0-1+b2 libxcb-keysyms1=0.4.0-1+b2 libxcb-present0=1.14-2 libxcb-randr0=1.14-2 libxcb-render-util0=0.3.9-1+b1 libxcb-render0=1.14-2 libxcb-shape0=1.14-2 libxcb-shm0=1.14-2 libxcb-sync1=1.14-2 libxcb-util0=0.3.8-3+b2 libxcb-xfixes0=1.14-2 libxcb-xinerama0=1.14-2 libxcb-xinput0=1.14-2 libxcb-xkb1=1.14-2 libxcb1=1.14-2 libxcb1-dev=1.14-2 libxcursor1=1:1.2.0-2 libxdamage1=1:1.1.5-2 libxdmcp-dev=1:1.1.2-3 libxdmcp6=1:1.1.2-3 libxext6=2:1.3.3-1+b2 libxfixes3=1:5.0.3-2 libxft2=2.3.2-2 libxi6=2:1.7.10-1 libxinerama1=2:1.1.4-2 libxkbcommon-x11-0=0.10.0-1 libxkbcommon0=0.10.0-1 libxml-libxml-perl=2.0134+dfsg-2 libxml-namespacesupport-perl=1.12-1 libxml-sax-base-perl=1.09-1 libxml-sax-perl=1.02+dfsg-1 libxml-writer-perl=0.625-1 libxml2=2.9.10+dfsg-5+b1 libxmu6=2:1.1.2-2+b3 libxpm4=1:3.5.12-1 libxrender1=1:0.9.10-1 libxshmfence1=1.3-1 libxt6=1:1.1.5-1+b3 libxxf86vm1=1:1.1.4-1+b2 libyaml-0-2=0.2.2-1 libyaml-libyaml-perl=0.82+repack-1 libyaml-perl=1.30-1 libyaml-tiny-perl=1.73-1 libz3-4=4.8.8-1 libzstd1=1.4.5+dfsg-3 libzzip-0-13=0.13.62-3.2 licensecheck=3.0.47-1 lintian=2.85.0 linux-libc-dev=5.7.10-1 login=1:4.8.1-1 lsb-base=11.1.0 m4=1.4.18-4 make=4.3-4 man-db=2.9.3-2 mawk=1.3.4.20200120-2 ncurses-base=6.2-1 ncurses-bin=6.2-1 netbase=6.1 netpbm=2:10.0-15.3+b2 octave=5.2.0-3+b1 octave-common=5.2.0-3 openssl=1.1.1g-1 patch=2.7.6-6 patchutils=0.4.2-1 perl=5.30.3-4 perl-base=5.30.3-4 perl-modules-5.30=5.30.3-4 perl-openssl-defaults=5 po-debconf=1.0.21 poppler-data=0.4.9-2 readline-common=8.0-4 sed=4.7-1 sensible-utils=0.0.12+nmu1 shared-mime-info=1.15-1 sysvinit-utils=2.96-3 t1utils=1.41-4 tar=1.30+dfsg-7 tex-common=6.15 texinfo=6.7.0.dfsg.2-5 texlive=2020.20200629-1 texlive-base=2020.20200629-1 texlive-binaries=2020.20200327.54578-4+b1 texlive-font-utils=2020.20200629-1 texlive-fonts-recommended=2020.20200629-1 texlive-latex-base=2020.20200629-1 texlive-latex-recommended=2020.20200629-1 texlive-plain-generic=2020.20200629-1 ucf=3.0043 util-linux=2.36-1 x11-common=1:7.7+20 x11proto-core-dev=2020.1-1 x11proto-dev=2020.1-1 xdg-utils=1.1.3-2 xkb-data=2.29-2 xorg-sgml-doctools=1:1.11-1 xtrans-dev=1.4.0-1 xz-utils=5.2.4-1+b1 zlib1g=1:1.2.11.dfsg-2 zlib1g-dev=1:1.2.11.dfsg-2 --variant=apt --aptopt=Acquire::Check-Valid-Until "false" --aptopt=Acquire::http::Dl-Limit "1000"; --aptopt=Acquire::https::Dl-Limit "1000"; --aptopt=Acquire::Retries "5"; --aptopt=APT::Get::allow-downgrades "true"; --keyring=/usr/share/keyrings/ --essential-hook=chroot "$1" sh -c "apt-get --yes install fakeroot util-linux" --essential-hook=copy-in /usr/share/keyrings/debian-archive-bullseye-automatic.gpg /usr/share/keyrings/debian-archive-bullseye-security-automatic.gpg /usr/share/keyrings/debian-archive-bullseye-stable.gpg /usr/share/keyrings/debian-archive-buster-automatic.gpg /usr/share/keyrings/debian-archive-buster-security-automatic.gpg /usr/share/keyrings/debian-archive-buster-stable.gpg /usr/share/keyrings/debian-archive-keyring.gpg /usr/share/keyrings/debian-archive-removed-keys.gpg /usr/share/keyrings/debian-archive-stretch-automatic.gpg /usr/share/keyrings/debian-archive-stretch-security-automatic.gpg /usr/share/keyrings/debian-archive-stretch-stable.gpg /usr/share/keyrings/debian-ports-archive-keyring-removed.gpg /usr/share/keyrings/debian-ports-archive-keyring.gpg /usr/share/keyrings/debian-keyring.gpg /etc/apt/trusted.gpg.d/ --essential-hook=chroot "$1" sh -c "rm /etc/apt/sources.list && echo 'deb http://snapshot.notset.fr/archive/debian/20210814T212851Z/ bookworm main deb-src http://snapshot.notset.fr/archive/debian/20210814T212851Z/ bookworm main deb http://snapshot.notset.fr/archive/debian/20200810T084439Z/ unstable main deb http://snapshot.notset.fr/archive/debian/20200727T204945Z/ unstable main' >> /etc/apt/sources.list && apt-get update" --customize-hook=chroot "$1" useradd --no-create-home -d /nonexistent -p "" builduser -s /bin/bash --customize-hook=chroot "$1" env sh -c "apt-get source --only-source -d octave-queueing=1.2.7-3 && mkdir -p /build/octave-queueing-lVNuyQ && dpkg-source --no-check -x /*.dsc /build/octave-queueing-lVNuyQ/octave-queueing-1.2.7 && chown -R builduser:builduser /build/octave-queueing-lVNuyQ" --customize-hook=chroot "$1" env --unset=TMPDIR runuser builduser -c "cd /build/octave-queueing-lVNuyQ/octave-queueing-1.2.7 && env DEB_BUILD_OPTIONS="parallel=4" LANG="C.UTF-8" LC_ALL="C.UTF-8" SOURCE_DATE_EPOCH="1596031779" dpkg-buildpackage -uc -a amd64 --build=all" --customize-hook=sync-out /build/octave-queueing-lVNuyQ /tmp/octave-queueing-1.2.7-3fgs65qpz bullseye /dev/null deb http://snapshot.notset.fr/archive/debian/20200727T204945Z unstable main I: automatically chosen mode: root I: chroot architecture amd64 is equal to the host's architecture I: automatically chosen format: tar I: using /tmp/mmdebstrap.oWa5KFf_5z as tempdir I: running apt-get update... I: downloading packages with apt... I: extracting archives... I: installing essential packages... I: running --essential-hook in shell: sh -c 'chroot "$1" sh -c "apt-get --yes install fakeroot util-linux"' exec /tmp/mmdebstrap.oWa5KFf_5z Reading package lists... Building dependency tree... util-linux is already the newest version (2.36-1). The following NEW packages will be installed: fakeroot libfakeroot 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. Need to get 132 kB of archives. After this operation, 393 kB of additional disk space will be used. Get:1 http://snapshot.notset.fr/archive/debian/20200727T204945Z unstable/main amd64 libfakeroot amd64 1.24-1 [45.7 kB] Get:2 http://snapshot.notset.fr/archive/debian/20200727T204945Z unstable/main amd64 fakeroot amd64 1.24-1 [85.9 kB] debconf: delaying package configuration, since apt-utils is not installed Fetched 132 kB in 0s (910 kB/s) Selecting previously unselected package libfakeroot:amd64. (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 4578 files and directories currently installed.) Preparing to unpack .../libfakeroot_1.24-1_amd64.deb ... Unpacking libfakeroot:amd64 (1.24-1) ... Selecting previously unselected package fakeroot. Preparing to unpack .../fakeroot_1.24-1_amd64.deb ... Unpacking fakeroot (1.24-1) ... Setting up libfakeroot:amd64 (1.24-1) ... Setting up fakeroot (1.24-1) ... update-alternatives: using /usr/bin/fakeroot-sysv to provide /usr/bin/fakeroot (fakeroot) in auto mode Processing triggers for libc-bin (2.31-2) ... I: running special hook: copy-in /usr/share/keyrings/debian-archive-bullseye-automatic.gpg /usr/share/keyrings/debian-archive-bullseye-security-automatic.gpg /usr/share/keyrings/debian-archive-bullseye-stable.gpg /usr/share/keyrings/debian-archive-buster-automatic.gpg /usr/share/keyrings/debian-archive-buster-security-automatic.gpg /usr/share/keyrings/debian-archive-buster-stable.gpg /usr/share/keyrings/debian-archive-keyring.gpg /usr/share/keyrings/debian-archive-removed-keys.gpg /usr/share/keyrings/debian-archive-stretch-automatic.gpg /usr/share/keyrings/debian-archive-stretch-security-automatic.gpg /usr/share/keyrings/debian-archive-stretch-stable.gpg /usr/share/keyrings/debian-ports-archive-keyring-removed.gpg /usr/share/keyrings/debian-ports-archive-keyring.gpg /usr/share/keyrings/debian-keyring.gpg /etc/apt/trusted.gpg.d/ I: running --essential-hook in shell: sh -c 'chroot "$1" sh -c "rm /etc/apt/sources.list && echo 'deb http://snapshot.notset.fr/archive/debian/20210814T212851Z/ bookworm main deb-src http://snapshot.notset.fr/archive/debian/20210814T212851Z/ bookworm main deb http://snapshot.notset.fr/archive/debian/20200810T084439Z/ unstable main deb http://snapshot.notset.fr/archive/debian/20200727T204945Z/ unstable main' >> /etc/apt/sources.list && apt-get update"' exec /tmp/mmdebstrap.oWa5KFf_5z Get:1 http://snapshot.notset.fr/archive/debian/20210814T212851Z bookworm InRelease [81.6 kB] Get:2 http://snapshot.notset.fr/archive/debian/20200810T084439Z unstable InRelease [146 kB] Hit:3 http://snapshot.notset.fr/archive/debian/20200727T204945Z unstable InRelease Ign:4 http://snapshot.notset.fr/archive/debian/20210814T212851Z bookworm/main Sources Ign:5 http://snapshot.notset.fr/archive/debian/20210814T212851Z bookworm/main amd64 Packages Ign:4 http://snapshot.notset.fr/archive/debian/20210814T212851Z bookworm/main Sources Ign:5 http://snapshot.notset.fr/archive/debian/20210814T212851Z bookworm/main amd64 Packages Ign:4 http://snapshot.notset.fr/archive/debian/20210814T212851Z bookworm/main Sources Ign:5 http://snapshot.notset.fr/archive/debian/20210814T212851Z bookworm/main amd64 Packages Get:4 http://snapshot.notset.fr/archive/debian/20210814T212851Z bookworm/main Sources [11.4 MB] Get:5 http://snapshot.notset.fr/archive/debian/20210814T212851Z bookworm/main amd64 Packages [11.1 MB] Ign:6 http://snapshot.notset.fr/archive/debian/20200810T084439Z unstable/main amd64 Packages Ign:6 http://snapshot.notset.fr/archive/debian/20200810T084439Z unstable/main amd64 Packages Ign:6 http://snapshot.notset.fr/archive/debian/20200810T084439Z unstable/main amd64 Packages Get:6 http://snapshot.notset.fr/archive/debian/20200810T084439Z unstable/main amd64 Packages [11.3 MB] Fetched 34.0 MB in 38s (899 kB/s) Reading package lists... I: installing remaining packages inside the chroot... I: running --customize-hook in shell: sh -c 'chroot "$1" useradd --no-create-home -d /nonexistent -p "" builduser -s /bin/bash' exec /tmp/mmdebstrap.oWa5KFf_5z I: running --customize-hook in shell: sh -c 'chroot "$1" env sh -c "apt-get source --only-source -d octave-queueing=1.2.7-3 && mkdir -p /build/octave-queueing-lVNuyQ && dpkg-source --no-check -x /*.dsc /build/octave-queueing-lVNuyQ/octave-queueing-1.2.7 && chown -R builduser:builduser /build/octave-queueing-lVNuyQ"' exec /tmp/mmdebstrap.oWa5KFf_5z Reading package lists... NOTICE: 'octave-queueing' packaging is maintained in the 'Git' version control system at: https://salsa.debian.org/pkg-octave-team/octave-queueing.git Please use: git clone https://salsa.debian.org/pkg-octave-team/octave-queueing.git to retrieve the latest (possibly unreleased) updates to the package. Need to get 951 kB of source archives. Get:1 http://snapshot.notset.fr/archive/debian/20210814T212851Z bookworm/main octave-queueing 1.2.7-3 (dsc) [2162 B] Get:2 http://snapshot.notset.fr/archive/debian/20210814T212851Z bookworm/main octave-queueing 1.2.7-3 (tar) [942 kB] Get:3 http://snapshot.notset.fr/archive/debian/20210814T212851Z bookworm/main octave-queueing 1.2.7-3 (diff) [7420 B] Fetched 951 kB in 1s (1120 kB/s) Download complete and in download only mode W: Download is performed unsandboxed as root as file 'octave-queueing_1.2.7-3.dsc' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied) dpkg-source: info: extracting octave-queueing in /build/octave-queueing-lVNuyQ/octave-queueing-1.2.7 dpkg-source: info: unpacking octave-queueing_1.2.7.orig.tar.gz dpkg-source: info: unpacking octave-queueing_1.2.7-3.debian.tar.xz dpkg-source: info: using patch list from debian/patches/series dpkg-source: info: applying doc-Makefile.patch dpkg-source: info: applying info-dir-section.patch dpkg-source: info: applying texinfo-absolute-path.patch dpkg-source: info: applying xseealso-texi2pdf.patch I: running --customize-hook in shell: sh -c 'chroot "$1" env --unset=TMPDIR runuser builduser -c "cd /build/octave-queueing-lVNuyQ/octave-queueing-1.2.7 && env DEB_BUILD_OPTIONS="parallel=4" LANG="C.UTF-8" LC_ALL="C.UTF-8" SOURCE_DATE_EPOCH="1596031779" dpkg-buildpackage -uc -a amd64 --build=all"' exec /tmp/mmdebstrap.oWa5KFf_5z dpkg-buildpackage: info: source package octave-queueing dpkg-buildpackage: info: source version 1.2.7-3 dpkg-buildpackage: info: source distribution unstable dpkg-buildpackage: info: source changed by Rafael Laboissière dpkg-source --before-build . dpkg-source: info: using options from octave-queueing-1.2.7/debian/source/options: --extend-diff-ignore=doc/INSTALL|doc/.*\.png|doc/.*\.pdf|doc/queueing\.html debian/rules clean dh clean --buildsystem=octave --with=octave debian/rules override_dh_auto_clean make[1]: Entering directory '/build/octave-queueing-lVNuyQ/octave-queueing-1.2.7' [ ! -f doc/Makefile ] || make -C doc clean make[2]: Entering directory '/build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/doc' \rm -f *.fns *.pdf *.aux *.log *.dvi *.out *.info *.html *.ky *.tp *.toc *.vr *.cp *.fn *.pg *.op *.au *.aus *.cps x.log *~ DOCSTRINGS INSTALL make[2]: Leaving directory '/build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/doc' dh_auto_clean dh_octave_clean make[2]: Entering directory '/build/octave-queueing-lVNuyQ/octave-queueing-1.2.7' make[2]: *** src: No such file or directory. Stop. make[2]: Leaving directory '/build/octave-queueing-lVNuyQ/octave-queueing-1.2.7' make[1]: Leaving directory '/build/octave-queueing-lVNuyQ/octave-queueing-1.2.7' dh_autoreconf_clean -O--buildsystem=octave dh_clean -O--buildsystem=octave debian/rules binary-indep dh binary-indep --buildsystem=octave --with=octave dh_update_autotools_config -i -O--buildsystem=octave dh_autoreconf -i -O--buildsystem=octave dh_octave_version -i -O--buildsystem=octave Checking the Octave version... ok dh_auto_configure -i -O--buildsystem=octave debian/rules override_dh_auto_build make[1]: Entering directory '/build/octave-queueing-lVNuyQ/octave-queueing-1.2.7' [ ! -f doc/Makefile ] || make -C doc html pdf info make[2]: Entering directory '/build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/doc' fig2dev -L png -m 3 qn_open_single.fig qn_open_single.png fig2dev -L png -m 3 qn_closed_single.fig qn_closed_single.png fig2dev -L png -m 3 qn_web_model.fig qn_web_model.png octave-cli --no-window-system -p../inst/ -q demo_web.m Throughput and response time vs population mix 0.02 |----------------------------------------------------------------| | $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ | 0.015 |-+ $$ $$$$$ +-| 0.01 |-+ ### ********* +-| | ########################################## | 0.005 |-+ ***** ####### +-| | ***?***Class 1 ###?###Class 2 $$$?$$$System # | 0 |----------------------------------------------------------------| 0 0.2 0.4 0.6 0.8 1 |-----------------------------------------------------------| 8000 |-+ + ######### + + ************* +-| | $$$$$$ ###### ********* $$$$$ | 6000 |-+ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ +-| 4000 |-+ ****** ###### +-| | ****** ############### | 2000 |-+ ********** +-| | ***?***Class 1 ###?###Class 2 $$$?$$$System | 0 |-----------------------------------------------------------| 0 0.2 0.4 0.6 0.8 1 Power as a function of the population mix 3.5e-06 |--------------------------------------------------------------| | + $$$$$$$$$$$$$$$$$$$$$$$$$$$$ + | | **$$$* $$$ | 3e-06 |-+ *$$ * $$$ +-| | *$ * | | *$ * $$$ | 2.5e-06 |-+ *$ *** $$$ +-| | $$ ####### | 2e-06 |-+ $* *** ### ### $ +-| | * *** ### # | | **### # | 1.5e-06 |-+ ### *** # +-| | ###### ****** ****###* | | ### ###### ******** | 1e-06 |-+ ######## # +-| | | | ***?***Class 1 ###?###Class 2 $$$?$$$System | 5e-07 |--------------------------------------------------------------| 0 0.2 0.4 0.6 0.8 1 Class 1 population mix error: writing file '/nonexistent/.octave_hist': No such file or directory error: ignoring const execution_exception& while preparing to exit for i in web.eps power.eps ; do sed -i -e "s:/Title (.*):/Title ($i):" $i ; done convert -density 100 -background white -flatten web.eps web.png convert -density 100 -background white -flatten power.eps power.png fig2dev -L png -m 3 qn_closed_multi_apl.fig qn_closed_multi_apl.png fig2dev -L png -m 3 qn_closed_multi_cs.fig qn_closed_multi_cs.png makeinfo --html --no-split queueing.texi fig2dev -L pdf qn_open_single.fig qn_open_single.pdf fig2dev -L pdf qn_closed_single.fig qn_closed_single.pdf fig2dev -L pdf qn_web_model.fig qn_web_model.pdf epstopdf web.eps epstopdf power.eps fig2dev -L pdf qn_closed_multi_apl.fig qn_closed_multi_apl.pdf fig2dev -L pdf qn_closed_multi_cs.fig qn_closed_multi_cs.pdf texi2pdf -o queueing.pdf queueing.texi This is pdfTeX, Version 3.14159265-2.6-1.40.21 (TeX Live 2020/Debian) (preloaded format=pdfetex) restricted \write18 enabled. entering extended mode (./queueing.texi (/usr/share/texmf/tex/texinfo/texinfo.tex Loading texinfo [version 2019-09-20.22]: pdf, fonts, markup, glyphs, page headings, tables, conditionals, indexing, sectioning, toc, environments, defuns, macros, cross references, insertions, (/usr/share/texlive/texmf-dist/tex/generic/epsf/epsf.tex This is `epsf.tex' v2.7.4 <14 February 2011> ) localization, formatting, and turning on texinfo input format.) (/build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/doc/conf.texi) [1{/var/lib /texmf/fonts/map/pdftex/updmap/pdftex.map}] [2] [-1] [-2] (/build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/doc/summary.texi Chapter 1 Cross reference values unknown; you must run TeX again. [1]) (/build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/doc/installation.texi [2] Chapter 2 [3] [4] [5] [6] [7] Writing index file queueing.cp [8] [9]) (/build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/doc/markovchains.texi Chapter 3 [10] Writing index file queueing.fn [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23]) (/build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/doc/singlestation.texi Chapter 4 [24] [25] [26] [27] [28] [29] [30] [31] [32] [33]) (/build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/doc/queueingnetworks.texi Chapter 5 [34] [35] [36] pdfTeX warning: pdfetex (file ./qn_closed_single.pdf): PDF inclusion: found PDF version <1.7>, but at most version <1.5> allowed <./qn_closed_single.pdf> [37] pdfTeX warning: pdfetex (file ./qn_open_single.pdf): PDF inclusion: found PDF v ersion <1.7>, but at most version <1.5> allowed <./qn_open_single.pdf> [38] [39] [40] [41] [42] Overfull \hbox (37.93651pt too wide) in paragraph at lines 815--815 [][] | Overfull \hbox (26.43913pt too wide) in paragraph at lines 815--815 [][] | [43] [44] [45] [46] [47] [48] [49] [50] [51] [52] [53] [54] [55] [56] [57] [58] [59] [60] [61] Overfull \hbox (20.69044pt too wide) in paragraph at lines 2843--2843 [][] | [62] [63] [64] [65] [66] [67] [68] [69] [70] [71] pdfTeX warning: pdfetex (file ./qn_closed_multi_apl.pdf): PDF inclusion: found PDF version <1.7>, but at most version <1.5> allowed <./qn_closed_multi_apl.pdf> [72] pdfTeX warning: pdfetex (file ./qn_web_model.pdf): PDF inclusion: found PDF ver sion <1.7>, but at most version <1.5> allowed <./qn_web_model.pdf> Underfull \hbox (badness 10000) in paragraph at lines 3854--3854 @textbf Class Underfull \hbox (badness 10000) in paragraph at lines 3854--3855 @textbf Class [73] <./web.pdf> [74] <./power.pdf> [75] pdfTeX warning: pdfetex (file ./qn_closed_multi_cs.pdf): PDF inclusion: found P DF version <1.7>, but at most version <1.5> allowed <./qn_closed_multi_cs.pdf> [76]) (/build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/doc/references.texi Chapter 6 [77] [78] [79] [80]) (/build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/doc/gpl.texi Appendix A [81] [82] [83] [84] [85] [86] [87] [88] [89] [90] [91] [92]) (Concept Index) [93] [94] No file queueing.cps. (Function Index) [95] [96] No file queueing.fns. [97] [98] ) (see the transcript file for additional information) Output written on queueing.pdf (102 pages, 536103 bytes). Transcript written on queueing.log. This is pdfTeX, Version 3.14159265-2.6-1.40.21 (TeX Live 2020/Debian) (preloaded format=pdfetex) restricted \write18 enabled. entering extended mode (./queueing.texi (/usr/share/texmf/tex/texinfo/texinfo.tex Loading texinfo [version 2019-09-20.22]: pdf, fonts, markup, glyphs, page headings, tables, conditionals, indexing, sectioning, toc, environments, defuns, macros, cross references, insertions, (/usr/share/texlive/texmf-dist/tex/generic/epsf/epsf.tex This is `epsf.tex' v2.7.4 <14 February 2011> ) localization, formatting, and turning on texinfo input format.) (/build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/doc/conf.texi) [1{/var/lib /texmf/fonts/map/pdftex/updmap/pdftex.map}] [2] (/build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/doc/queueing.toc [-1]) [-2] (/build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/doc/queueing.toc) (/build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/doc/queueing.toc) (/build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/doc/summary.texi Chapter 1 (/build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/doc/queueing.aux ) [1]) (/build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/doc/installation.texi [2] Chapter 2 [3] [4] [5] [6] [7] Writing index file queueing.cp [8] [9]) (/build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/doc/markovchains.texi Chapter 3 [10] Writing index file queueing.fn [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23]) (/build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/doc/singlestation.texi Chapter 4 [24] [25] [26] [27] [28] [29] [30] [31] [32] [33]) (/build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/doc/queueingnetworks.texi Chapter 5 [34] [35] [36] pdfTeX warning: pdfetex (file ./qn_closed_single.pdf): PDF inclusion: found PDF version <1.7>, but at most version <1.5> allowed <./qn_closed_single.pdf> [37] pdfTeX warning: pdfetex (file ./qn_open_single.pdf): PDF inclusion: found PDF v ersion <1.7>, but at most version <1.5> allowed <./qn_open_single.pdf> [38] [39] [40] [41] [42] Overfull \hbox (37.93651pt too wide) in paragraph at lines 815--815 [][] | Overfull \hbox (26.43913pt too wide) in paragraph at lines 815--815 [][] | [43] [44] [45] [46] [47] [48] [49] [50] [51] [52] [53] [54] [55] [56] [57] [58] [59] [60] [61] Overfull \hbox (20.69044pt too wide) in paragraph at lines 2843--2843 [][] | [62] [63] [64] [65] [66] [67] [68] [69] [70] [71] pdfTeX warning: pdfetex (file ./qn_closed_multi_apl.pdf): PDF inclusion: found PDF version <1.7>, but at most version <1.5> allowed <./qn_closed_multi_apl.pdf> [72] pdfTeX warning: pdfetex (file ./qn_web_model.pdf): PDF inclusion: found PDF ver sion <1.7>, but at most version <1.5> allowed <./qn_web_model.pdf> Underfull \hbox (badness 10000) in paragraph at lines 3854--3854 @textbf Class Underfull \hbox (badness 10000) in paragraph at lines 3854--3855 @textbf Class [73] <./web.pdf> [74] <./power.pdf> [75] pdfTeX warning: pdfetex (file ./qn_closed_multi_cs.pdf): PDF inclusion: found P DF version <1.7>, but at most version <1.5> allowed <./qn_closed_multi_cs.pdf> [76]) (/build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/doc/references.texi Chapter 6 [77] [78] [79] [80]) (/build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/doc/gpl.texi Appendix A [81] [82] [83] [84] [85] [86] [87] [88] [89] [90] [91] [92]) (Concept Index) [93] [94] (/build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/doc/queueing.cps [95]) (Function Index) [96] (/build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/doc/queueing.fns) [97] [98] ) (see the transcript file for additional information) Output written on queueing.pdf (102 pages, 579990 bytes). Transcript written on queueing.log. makeinfo queueing.texi make[2]: Leaving directory '/build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/doc' dh_auto_build # This problem was detected by Lintian (info-document-missing-image-file). # The image files are shared now by the HTML and INFO forms of # documentation. sed -i -e 's:src="\(.*\.png\)":src="/usr/share/doc/octave-queueing/\1":' doc/queueing.info make[1]: Leaving directory '/build/octave-queueing-lVNuyQ/octave-queueing-1.2.7' dh_auto_test -i -O--buildsystem=octave create-stamp debian/debhelper-build-stamp dh_testroot -i -O--buildsystem=octave dh_prep -i -O--buildsystem=octave dh_auto_install -i -O--buildsystem=octave octave --no-gui --no-history --silent --no-init-file --no-window-system /usr/share/dh-octave/install-pkg.m warning: creating installation directory /build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/debian/octave-queueing/usr/share/octave/packages warning: called from install at line 30 column 5 pkg at line 441 column 9 /usr/share/dh-octave/install-pkg.m at line 43 column 1 For information about changes from previous versions of the queueing package, run 'news queueing'. rmdir: failed to remove '/build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/debian/octave-queueing/usr/lib/x86_64-linux-gnu/octave/packages': No such file or directory chmod: cannot access 'debian/*/usr/lib/*/octave/packages/*/*/*.oct': No such file or directory chmod: cannot access 'debian/*/usr/lib/*/octave/packages/*/*/*.mex': No such file or directory dh_octave_check -i -O--buildsystem=octave Checking package... Checking m files ... [inst/ctmcfpt.m] >>>>> /build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/inst/ctmcfpt.m ***** demo Q = [ -1.0 0.9 0.1; ... 0.1 -1.0 0.9; ... 0.9 0.1 -1.0 ]; M = ctmcfpt(Q) m = ctmcfpt(Q,1,3) ***** test N = 10; Q = reshape(1:N^2,N,N); Q(1:N+1:end) = 0; Q -= diag(sum(Q,2)); M = ctmcfpt(Q); assert( all(diag(M) < 10*eps) ); 1 test, 1 passed, 0 known failure, 0 skipped [inst/qncsmvablo.m] >>>>> /build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/inst/qncsmvablo.m ***** test fail( "qncsmvablo( 10, [1 1], [4 5], [0 1; 1 0] )", "capacity"); fail( "qncsmvablo( 6, [1 1], [4 5], [0 1; 1 1] )", "stochastic"); fail( "qncsmvablo( 5, [1 1 1], [1 1], [0 1; 1 1] )", "3 elements"); ***** test # This is the example on section v) p. 422 of the reference paper M = [12 10 14]; P = [0 1 0; 0 0 1; 1 0 0]; S = [1/1 1/2 1/3]; K = 27; [U R Q X]=qncsmvablo( K, S, M, P ); assert( R, [11.80 1.66 14.4], 1e-2 ); ***** test # This is example 2, i) and ii) p. 424 of the reference paper M = [4 5 5]; S = [1.5 2 1]; P = [0 1 0; 0 0 1; 1 0 0]; K = 10; [U R Q X]=qncsmvablo( K, S, M, P ); assert( R, [6.925 8.061 4.185], 1e-3 ); K = 12; [U R Q X]=qncsmvablo( K, S, M, P ); assert( R, [7.967 9.019 8.011], 1e-3 ); ***** test # This is example 3, i) and ii) p. 424 of the reference paper M = [8 7 6]; S = [0.2 1.2 1.4]; P = [ 0 0.5 0.5; 1 0 0; 1 0 0 ]; K = 10; [U R Q X] = qncsmvablo( K, S, M, P ); assert( R, [1.674 5.007 7.639], 1e-3 ); K = 12; [U R Q X] = qncsmvablo( K, S, M, P ); assert( R, [2.166 5.372 6.567], 1e-3 ); ***** test # Network which never blocks, central server model M = [50 50 50]; S = [1 1/0.8 1/0.4]; P = [0 0.7 0.3; 1 0 0; 1 0 0]; K = 40; [U1 R1 Q1] = qncsmvablo( K, S, M, P ); V = qncsvisits(P); [U2 R2 Q2] = qncsmva( K, S, V ); assert( U1, U2, 1e-5 ); assert( R1, R2, 1e-5 ); assert( Q1, Q2, 1e-5 ); 5 tests, 5 passed, 0 known failure, 0 skipped [inst/qnopen.m] >>>>> /build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/inst/qnopen.m ***** test # Example 34.1 p. 572 lambda = 3; V = [16 7 8]; S = [0.01 0.02 0.03]; [U R Q X] = qnopen( lambda, S, V ); assert( R, [0.0192 0.0345 0.107], 1e-2 ); assert( U, [0.48 0.42 0.72], 1e-2 ); ***** test V = [1 1; 1 1]; S = [1 3; 2 4]; lambda = [3/19 2/19]; [U R Q] = qnopen(lambda, S, diag( lambda / sum(lambda) ) * V); assert( U(1,1), 3/19, 1e-6 ); assert( U(2,1), 4/19, 1e-6 ); assert( R(1,1), 19/12, 1e-6 ); assert( R(1,2), 57/2, 1e-6 ); assert( Q(1,1), .25, 1e-6 ); 2 tests, 2 passed, 0 known failure, 0 skipped [inst/qncsmvaap.m] >>>>> /build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/inst/qncsmvaap.m ***** test fail( "qncsmvaap()", "Invalid" ); fail( "qncsmvaap( 10, [1 2], [1 2 3] )", "S, V and m" ); fail( "qncsmvaap( 10, [-1 1], [1 1] )", ">= 0" ); fail( "qncsmvaap( 10, [1 2], [1 2], [1 2] )", "supports"); fail( "qncsmvaap( 10, [1 2], [1 2], [1 1], 0, -1)", "tol"); ***** test # Example p. 117 Lazowska et al. S = [0.605 2.1 1.35]; V = [1 1 1]; N = 3; Z = 15; m = 1; [U R Q X] = qncsmvaap(N, S, V, m, Z); Rs = dot(V,R); Xs = N/(Z+Rs); assert( Q, [0.0973 0.4021 0.2359], 1e-3 ); assert( Xs, 0.1510, 1e-3 ); assert( Rs, 4.87, 1e-3 ); ***** demo 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] = qncsmva(n,S,V,m,Z); Xmva(n) = X(1)/V(1); Rmva(n) = dot(R,V); [U R Q X] = qncsmvaap(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"); legend("boxoff"); 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"); legend("boxoff"); ylabel("Response Time R(n)"); xlabel("Number of Requests n"); 2 tests, 2 passed, 0 known failure, 0 skipped [inst/qncsaba.m] >>>>> /build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/inst/qncsaba.m ***** test fail("qncsaba(-1,0)", "N must be"); fail("qncsaba(1,[])", "nonempty"); fail("qncsaba(1,[-1 2])", "nonnegative"); fail("qncsaba(1,[1 2],[1 2 3])", "incompatible size"); fail("qncsaba(1,[1 2 3],[1 2 -1])", "nonnegative"); fail("qncsaba(1,[1 2 3],[1 2 3],[1 2])", "incompatible size"); fail("qncsaba(1,[1 2 3],[1 2 3],[1 2 1])", "not supported"); fail("qncsaba(1,[1 2 3],[1 2 3],[1 1 1],-1)", "nonnegative"); fail("qncsaba(1,[1 2 3],[1 2 3],1,[0 0])", "scalar"); ***** test N = 20; S = [ 4.6*2 8 ]; Z = 120; [X_l X_u R_l R_u] = qncsaba(N, S, ones(size(S)), ones(size(S)), Z); assert( [X_u R_l], [0.109 64], 1e-3 ); 2 tests, 2 passed, 0 known failure, 0 skipped [inst/ctmcexps.m] >>>>> /build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/inst/ctmcexps.m ***** test Q = [-1 1; 1 -1]; L = ctmcexps(Q,10,[1 0]); L = ctmcexps(Q,linspace(0,10,100),[1 0]); ***** test Q = ctmcbd( [1 2 3], [3 2 1] ); p0 = [1 0 0 0]; t = linspace(0,10,10); L1 = L2 = zeros(length(t),4); # compute L using the differential equation formulation ff = @(x,t) (x(:)'*Q+p0); fj = @(x,t) (Q); L1 = lsode( {ff, fj}, zeros(size(p0)), t ); # compute L using ctmcexps (integral formulation) for i=1:length(t) L2(i,:) = ctmcexps(Q,t(i),p0); endfor assert( L1, L2, 1e-5); ***** demo lambda = 0.5; N = 4; b = lambda*[1:N-1]; d = zeros(size(b)); Q = ctmcbd(b,d); t = linspace(0,10,100); p0 = zeros(1,N); p0(1)=1; L = zeros(length(t),N); for i=1:length(t) L(i,:) = ctmcexps(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"); legend("boxoff"); xlabel("Time"); ylabel("Expected sojourn time"); ***** demo lambda = 0.5; N = 4; b = lambda*[1:N-1]; d = zeros(size(b)); Q = ctmcbd(b,d); p0 = zeros(1,N); p0(1)=1; L = ctmcexps(Q,p0); disp(L); 2 tests, 2 passed, 0 known failure, 0 skipped [inst/qsmminf.m] >>>>> /build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/inst/qsmminf.m ***** test fail( "qsmminf( [1 2], [1 2 3] )", "incompatible size"); fail( "qsmminf( [-1 -1], [1 1] )", ">0" ); ***** demo ## Given a M/M/inf and M/M/m queue, compute the steady-state probability pk ## of having k requests in the systen. lambda = 5; mu = 1.1; m = 5; k = 0:20; pk_inf = qsmminf(lambda, mu, k); pk_m = qsmmm(lambda, mu, 5, k); plot(k, pk_inf, "-o;M/M/\\infty;", "linewidth", 2, ... k, pk_m, "-x;M/M/5;", "linewidth", 2); xlabel("N. of requests (k)"); ylabel("P_k"); title(sprintf("M/M/\\infty and M/M/%d systems, \\lambda = %g, \\mu = %g", m, lambda, mu)); 1 test, 1 passed, 0 known failure, 0 skipped [inst/ctmcbd.m] >>>>> /build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/inst/ctmcbd.m ***** test birth = [ 1 1 1 ]; death = [ 2 2 2 ]; Q = ctmcbd( birth, death ); assert( ctmc(Q), [ 8/15 4/15 2/15 1/15 ], 1e-5 ); 1 test, 1 passed, 0 known failure, 0 skipped [inst/qncsbsb.m] >>>>> /build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/inst/qncsbsb.m ***** test fail("qncsbsb(-1,0)", "N must be"); fail("qncsbsb(1,[])", "nonempty"); fail("qncsbsb(1,[-1 2])", "nonnegative"); fail("qncsbsb(1,[1 2],[1 2 3])", "incompatible size"); fail("qncsbsb(1,[1 2 3],[1 2 3],[1 2])", "incompatible size"); fail("qncsbsb(1,[1 2 3],[1 2 3],[1 2 1])", "M/M/1 servers"); fail("qncsbsb(1,[1 2 3],[1 2 3],[1 1 1],-1)", "nonnegative"); fail("qncsbsb(1,[1 2 3],[1 2 3],[1 1 1],[0 0])", "scalar"); 1 test, 1 passed, 0 known failure, 0 skipped [inst/qncspb.m] >>>>> /build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/inst/qncspb.m ***** test fail( "qncspb( 1, [] )", "vector" ); fail( "qncspb( 1, [0 -1])", "nonnegative" ); fail( "qncspb( 0, [1 2] )", "positive" ); fail( "qncspb( -1, [1 2])", "nonnegative" ); fail( "qncspb( 1, [1 2], [1,1], [2, 2])", "single server" ); fail( "qncspb( 1, [1 2], [1,1], [1, 1], -1)", "nonnegative" ); ***** # shared test function ***** function test_pb( D, expected, Z=0 ) for i=1:rows(expected) N = expected(i,1); [X_lower X_upper] = qncspb(N,D,ones(size(D)),ones(size(D)),Z); X_exp_lower = expected(i,2); X_exp_upper = expected(i,3); assert( [N X_lower X_upper], [N X_exp_lower X_exp_upper], 1e-4 ) endfor ***** test # table IV D = [ 0.1 0.1 0.09 0.08 ]; # N X_lower X_upper expected = [ 2 4.3174 4.3174; ... 5 6.6600 6.7297; ... 10 8.0219 8.2700; ... 20 8.8672 9.3387; ... 80 9.6736 10.000 ]; test_pb(D, expected); 2 tests, 2 passed, 0 known failure, 0 skipped [inst/qnomvisits.m] >>>>> /build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/inst/qnomvisits.m ***** test fail( "qnomvisits( zeros(3,3,3), [1 1 1] )", "matrix"); ***** test C = 2; K = 4; P = zeros(C,K,C,K); # class 1 routing P(1,1,1,1) = .05; P(1,1,1,2) = .45; P(1,1,1,3) = .5; P(1,2,1,1) = 0.1; P(1,3,1,1) = 0.2; # class 2 routing P(2,1,2,1) = .01; P(2,1,2,3) = .5; P(2,1,2,4) = .49; P(2,3,2,1) = 0.2; P(2,4,2,1) = 0.16; lambda = [0.1 0 0 0.1 ; 0 0 0.2 0.1]; lambda_sum = sum(lambda(:)); V = qnomvisits(P, lambda); assert( all(V(:)>=0) ); for i=1:K for c=1:C assert(V(c,i), lambda(c,i) / lambda_sum + sum(sum(V .* P(:,:,c,i))), 1e-5); endfor endfor ***** test # example 7.7 p. 304 Bolch et al. # Note that the book uses a slightly different notation than # what we use here. Specifically, the book defines the routing # probabilities as P(i,r,j,s) (i,j are service centers, r,s are job # classes) while the queueing package uses P(r,i,s,j). # A more serious problem arises in the definition of external arrivals. # The computation of V(r,i) as given in the book (called e_ir # in Eq 7.14) is performed in terms of P_{0, js}, defined as # "the probability in an open network that a job from outside the network # enters the jth node as a job of the sth class" (p. 267). This is # compliant with eq. 7.12 where the external class r arrival rate at center # i is computed as \lambda * P_{0,ir}. However, example 7.7 wrongly # defines P_{0,11} = P_{0,12} = 1, instead of P_{0,11} = P_{0,12} = 0.5 # Therefore the resulting visit ratios they obtain must be divided by two. P = zeros(2,3,2,3); lambda = S = zeros(2,3); P(1,1,1,2) = 0.4; P(1,1,1,3) = 0.3; P(1,2,1,1) = 0.6; P(1,2,1,3) = 0.4; P(1,3,1,1) = 0.5; P(1,3,1,2) = 0.5; P(2,1,2,2) = 0.3; P(2,1,2,3) = 0.6; P(2,2,2,1) = 0.7; P(2,2,2,3) = 0.3; P(2,3,2,1) = 0.4; P(2,3,2,2) = 0.6; lambda(1,1) = lambda(2,1) = 1; V = qnomvisits(P,lambda); assert( V, [ 3.333 2.292 1.917; 10 8.049 8.415] ./ 2, 1e-3); 3 tests, 3 passed, 0 known failure, 0 skipped [inst/qncsconvld.m] >>>>> /build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/inst/qncsconvld.m ***** test K=3; S = [ 1 1 1; 1 1 1 ]; V = [ 1 .667 .2 ]; fail( "qncsconvld(K,S,V)", "size mismatch" ); ***** test # Example 8.1 p. 318 Bolch et al. K=3; S = [ 1/0.8 ./ [1 2 2]; 1/0.6 ./ [1 2 3]; 1/0.4 ./ [1 1 1] ]; V = [ 1 .667 .2 ]; [U R Q X G] = qncsconvld( K, S, V ); assert( G, [1 2.861 4.218 4.465], 5e-3 ); assert( X, [0.945 0.630 0.189], 1e-3 ); assert( Q, [1.290 1.050 0.660], 1e-3 ); assert( R, [1.366 1.667 3.496], 1e-3 ); ***** test # Example 8.3 p. 331 Bolch et al. # compare results of convolution with those of mva K = 6; S = [ 0.02 0.2 0.4 0.6 ]; V = [ 1 0.4 0.2 0.1 ]; [U_mva R_mva Q_mva X_mva] = qncsmva(K, S, V); [U_con R_con Q_con X_con G] = qncsconvld(K, repmat(S',1,K), V ); assert( U_mva, U_con, 1e-5 ); assert( R_mva, R_con, 1e-5 ); assert( Q_mva, Q_con, 1e-5 ); assert( X_mva, X_con, 1e-5 ); ***** test # Compare the results of convolution to those of mva S = [ 0.02 0.2 0.4 0.6 ]; K = 6; V = [ 1 0.4 0.2 0.1 ]; m = [ 1 5 2 1 ]; [U_mva R_mva Q_mva X_mva] = qncsmva(K, S, V); [U_con R_con Q_con X_con G] = qncsconvld(K, repmat(S',1,K), V); assert( U_mva, U_con, 1e-5 ); assert( R_mva, R_con, 1e-5 ); assert( Q_mva, Q_con, 1e-5 ); assert( X_mva, X_con, 1e-5 ); ***** function r = S_function(k,n) M = [ 1/0.8 ./ [1 2 2]; 1/0.6 ./ [1 2 3]; 1/0.4 ./ [1 1 1] ]; r = M(k,n); ***** test # Example 8.1 p. 318 Bolch et al. K=3; V = [ 1 .667 .2 ]; [U R Q X G] = qncsconvld( K, @S_function, V ); assert( G, [1 2.861 4.218 4.465], 5e-3 ); assert( X, [0.945 0.630 0.189], 1e-3 ); assert( Q, [1.290 1.050 0.660], 1e-3 ); assert( R, [1.366 1.667 3.496], 1e-3 ); 5 tests, 5 passed, 0 known failure, 0 skipped [inst/qncsvisits.m] >>>>> /build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/inst/qncsvisits.m ***** test P = [-1 0; 0 0]; fail( "qncsvisits(P)", "invalid" ); P = [1 0; 0.5 0]; fail( "qncsvisits(P)", "invalid" ); P = [1 2 3; 1 2 3]; fail( "qncsvisits(P)", "square" ); P = [0 1; 1 0]; fail( "qncsvisits(P,0)", "range" ); fail( "qncsvisits(P,3)", "range" ); ***** test ## Closed, single class network P = [0 0.3 0.7; 1 0 0; 1 0 0]; V = qncsvisits(P); assert( V*P,V,1e-5 ); assert( V, [1 0.3 0.7], 1e-5 ); ***** test ## Test tolerance of the qncsvisits() function. ## This test builds transition probability matrices and tries ## to compute the visit counts on them. for k=[5, 10, 20, 50] P = reshape(1:k^2, k, k); P = P ./ repmat(sum(P,2),1,k); V = qncsvisits(P); assert( V*P, V, 1e-5 ); endfor ***** demo P = [0 0.3 0.7; ... 1 0 0 ; ... 1 0 0 ]; V = qncsvisits(P) 3 tests, 3 passed, 0 known failure, 0 skipped [inst/dtmcisir.m] >>>>> /build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/inst/dtmcisir.m ***** test P = [0 .5 0; 0 0 0]; fail( "dtmcisir(P)" ); ***** test P = [0 1 0; 0 .5 .5; 0 1 0]; [r s] = dtmcisir(P); assert( r == 0 ); assert( max(s), 2 ); assert( min(s), 1 ); ***** test P = [.5 .5 0; .2 .3 .5; 0 .2 .8]; [r s] = dtmcisir(P); assert( r == 1 ); assert( max(s), 1 ); assert( min(s), 1 ); 3 tests, 3 passed, 0 known failure, 0 skipped [inst/qsammm.m] >>>>> /build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/inst/qsammm.m ***** test [U R Q X] = qsammm( 73,[10,15,20,20,25] ); assert( U, 0.81, 1e-2 ); assert( Q, 6.5278, 1e-4 ); 1 test, 1 passed, 0 known failure, 0 skipped [inst/qncmbsb.m] >>>>> /build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/inst/qncmbsb.m ***** test fail("qncmbsb([],[])", "nonempty"); fail("qncmbsb([1 0], [1 2 3])", "2 rows"); fail("qncmbsb([1 0], [1 2 3; 4 5 -1])", "nonnegative"); fail("qncmbsb([1 2], [1 2 3; 4 5 6], [1 2 3])", "2 x 3"); fail("qncmbsb([1 2], [1 2 3; 4 5 6], [1 2 3; 4 5 -1])", "nonnegative"); fail("qncmbsb([1 2], [1 2 3; 1 2 3], [1 2 3; 1 2 3], [1 1])", "3 elements"); fail("qncmbsb([1 2], [1 2 3; 1 2 3], [1 2 3; 1 2 3], [1 1 2])", "not supported"); fail("qncmbsb([1 2], [1 2 3; 1 2 3], [1 2 3; 1 2 3], [1 1 -1],[1 2 3])", "2 elements"); fail("qncmbsb([1 2], [1 2 3; 1 2 3], [1 2 3; 1 2 3], [1 1 -1],[1 -2])", "nonnegative"); fail("qncmbsb([1 2], [1 2 3; 1 2 3], [1 2 3; 1 2 3], [1 1 -1],[1 0])", "only supports"); ***** test [Xl Xu Rl Ru] = qncmbsb([0 0], [1 2 3; 1 2 3]); assert( all(Xl(:) == 0) ); assert( all(Xu(:) == 0) ); assert( all(Rl(:) == 0) ); assert( all(Ru(:) == 0) ); ***** demo S = [10 7 5 4; ... 5 2 4 6]; NN=20; Xl = Xu = Rl = Ru = Xmva = Rmva = zeros(NN,2); for n=1:NN N=[n,10]; [a b c d] = qncmbsb(N,S); Xl(n,:) = a; Xu(n,:) = b; Rl(n,:) = c; Ru(n,:) = d; [U R Q X] = qncmmva(N,S,ones(size(S))); Xmva(n,:) = X(:,1)'; Rmva(n,:) = sum(R,2)'; endfor subplot(2,2,1); plot(1:NN,Xl(:,1), 1:NN,Xu(:,1), 1:NN,Xmva(:,1),";MVA;", "linewidth", 2); ylim([0, 0.2]); title("Class 1 throughput"); legend("boxoff"); subplot(2,2,2); plot(1:NN,Xl(:,2), 1:NN,Xu(:,2), 1:NN,Xmva(:,2),";MVA;", "linewidth", 2); ylim([0, 0.2]); title("Class 2 throughput"); legend("boxoff"); subplot(2,2,3); plot(1:NN,Rl(:,1), 1:NN,Ru(:,1), 1:NN,Rmva(:,1),";MVA;", "linewidth", 2); ylim([0, 700]); title("Class 1 response time"); legend("location", "northwest"); legend("boxoff"); subplot(2,2,4); plot(1:NN,Rl(:,2), 1:NN,Ru(:,2), 1:NN,Rmva(:,2),";MVA;", "linewidth", 2); ylim([0, 700]); title("Class 2 response time"); legend("location", "northwest"); legend("boxoff"); 2 tests, 2 passed, 0 known failure, 0 skipped [inst/qnos.m] >>>>> /build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/inst/qnos.m ***** test lambda = 0; S = [1 1 1]; V = [1 1 1]; fail( "qnos(lambda,S,V)","lambda must be"); lambda = 1; S = [1 0 1]; fail( "qnos(lambda,S,V)","S must be"); S = [1 1 1]; m = [1 1]; fail( "qnos(lambda,S,V,m)","incompatible size"); V = [1 1 1 1]; fail( "qnos(lambda,S,V)","incompatible size"); fail( "qnos(1.0, [0.9 1.2], [1 1])", "exceeded at center 2"); fail( "qnos(1.0, [0.9 2.0], [1 1], [1 2])", "exceeded at center 2"); qnos(1.0, [0.9 1.9], [1 1], [1 2]); # should not fail qnos(1.0, [0.9 1.9], [1 1], [1 0]); # should not fail qnos(1.0, [1.9 1.9], [1 1], [0 0]); # should not fail qnos(1.0, [1.9 1.9], [1 1], [2 2]); # should not fail ***** test # Example 34.1 p. 572 Bolch et al. lambda = 3; V = [16 7 8]; S = [0.01 0.02 0.03]; [U R Q X] = qnos( lambda, S, V ); assert( R, [0.0192 0.0345 0.107], 1e-2 ); assert( U, [0.48 0.42 0.72], 1e-2 ); assert( Q, R.*X, 1e-5 ); # check Little's Law ***** test # Example p. 113, Lazowska et al. V = [121 70 50]; S = [0.005 0.03 0.027]; lambda=0.3; [U R Q X] = qnos( lambda, S, V ); assert( U(1), 0.182, 1e-3 ); assert( X(1), 36.3, 1e-2 ); assert( Q(1), 0.222, 1e-3 ); assert( Q, R.*X, 1e-5 ); # check Little's Law ***** test lambda=[1]; P=[0]; V=qnosvisits(P,lambda); S=[0.25]; [U1 R1 Q1 X1]=qnos(sum(lambda),S,V); [U2 R2 Q2 X2]=qsmm1(lambda(1),1/S(1)); assert( U1, U2, 1e-5 ); assert( R1, R2, 1e-5 ); assert( Q1, Q2, 1e-5 ); assert( X1, X2, 1e-5 ); ***** test lambda = 1.1; V = 1; m = [2]; S = [1]; [U1 R1 Q1 X1] = qnos(lambda,S,V,m); m = [-1]; lambda = 90.0; [U1 R1 Q1 X1] = qnos(lambda,S,V,m); ***** demo lambda = 3; V = [16 7 8]; S = [0.01 0.02 0.03]; [U R Q X] = qnos( lambda, S, V ); R_s = dot(R,V) # System response time N = sum(Q) # Average number in system ***** test # Example 7.4 p. 287 Bolch et al. S = [ 0.04 0.03 0.06 0.05 ]; P = [ 0 0.5 0.5 0; 1 0 0 0; 0.6 0 0 0; 1 0 0 0 ]; lambda = [0 0 0 4]; V=qnosvisits(P,lambda); k = [ 3 2 4 1 ]; [U R Q X] = qnos( sum(lambda), S, V ); assert( X, [20 10 10 4], 1e-4 ); assert( U, [0.8 0.3 0.6 0.2], 1e-2 ); assert( R, [0.2 0.043 0.15 0.0625], 1e-3 ); assert( Q, [4, 0.429 1.5 0.25], 1e-3 ); 6 tests, 6 passed, 0 known failure, 0 skipped [inst/qnosaba.m] >>>>> /build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/inst/qnosaba.m ***** test fail( "qnosaba( 0.1, [] )", "vector" ); fail( "qnosaba( 0.1, [0 -1])", "nonnegative" ); fail( "qnosaba( 0, [1 2] )", "lambda" ); fail( "qnosaba( -1, [1 2])", "lambda" ); fail( "qnosaba( 1, [1 2 3], [1 2] )", "incompatible size"); fail( "qnosaba( 1, [1 2 3], [-1 2 3] )", "nonnegative"); ***** test [Xl Xu Rl Ru] = qnosaba( 1, [1 1] ); assert( Xl, 0 ); assert( Ru, +inf ); 2 tests, 2 passed, 0 known failure, 0 skipped [inst/ctmcmtta.m] >>>>> /build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/inst/ctmcmtta.m ***** test Q = [0 1 0; 1 0 1; 0 1 0 ]; Q -= diag( sum(Q,2) ); fail( "ctmcmtta(Q,[1 0 0])", "no absorbing"); ***** test Q = [0 1 0; 1 0 1; 0 0 0; 0 0 0 ]; fail( "ctmcmtta(Q,[1 0 0])", "square matrix"); ***** test Q = [0 1 0; 1 0 1; 0 0 0 ]; fail( "ctmcmtta(Q,[1 0 0])", "infinitesimal"); ***** test Q = [ 0 0.1 0 0; ... 0.9 0 0.1 0; ... 0 0.9 0 0.1; ... 0 0 0 0 ]; Q -= diag( sum(Q,2) ); assert( ctmcmtta( Q,[0 0 0 1] ), 0 ); # state 4 is absorbing ***** test Q = [-1 1; 0 0]; assert( ctmcmtta( Q, [0 1] ), 0 ); # state 2 is absorbing assert( ctmcmtta( Q, [1 0] ), 1 ); # the result has been computed by hand ***** demo mu = 0.01; death = [ 3 4 5 ] * mu; birth = 0*death; Q = ctmcbd(birth,death); t = ctmcmtta(Q,[0 0 0 1]) ***** demo 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) = ctmcmtta(Q,p); endfor plot(initial_state,t,"+"); xlabel("Initial state"); ylabel("MTTA"); 5 tests, 5 passed, 0 known failure, 0 skipped [inst/ctmcisir.m] >>>>> /build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/inst/ctmcisir.m ***** test Q = [-.5 .5 0; 1 0 0]; fail( "ctmcisir(Q)" ); ***** test Q = [-1 1 0; .5 -.5 0; 0 0 0]; [r s] = ctmcisir(Q); assert( r == 0 ); assert( max(s), 2 ); assert( min(s), 1 ); ***** test Q = [-.5 .5 0; .2 -.7 .5; .2 0 -.2]; [r s] = ctmcisir(Q); assert( r == 1 ); assert( max(s), 1 ); assert( min(s), 1 ); 3 tests, 3 passed, 0 known failure, 0 skipped [inst/qncmaba.m] >>>>> /build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/inst/qncmaba.m ***** test fail("qncmaba([],[])", "nonempty"); fail("qncmaba([1 0], [1 2 3])", "2 rows"); fail("qncmaba([1 0], [1 2 3; 4 5 -1])", "nonnegative"); fail("qncmaba([1 2], [1 2 3; 4 5 6], [1 2 3])", "2 x 3"); fail("qncmaba([1 2], [1 2 3; 4 5 6], [1 2 3; 4 5 -1])", "nonnegative"); fail("qncmaba([1 2], [1 2 3; 1 2 3], [1 2 3; 1 2 3], [1 1])", "3 elements"); fail("qncmaba([1 2], [1 2 3; 1 2 3], [1 2 3; 1 2 3], [1 1 2])", "not supported"); fail("qncmaba([1 2], [1 2 3; 1 2 3], [1 2 3; 1 2 3], [1 1 -1],[1 2 3])", "2 elements"); fail("qncmaba([1 2], [1 2 3; 1 2 3], [1 2 3; 1 2 3], [1 1 -1],[1 -2])", "nonnegative"); ***** test [Xl Xu Rl Ru] = qncmaba([0 0], [1 2 3; 1 2 3]); assert( all(Xl(:) == 0) ); assert( all(Xu(:) == 0) ); assert( all(Rl(:) == 0) ); assert( all(Ru(:) == 0) ); ***** demo S = [10 7 5 4; ... 5 2 4 6]; NN=20; Xl = Xu = Rl = Ru = Xmva = Rmva = zeros(NN,2); for n=1:NN N=[n,10]; [a b c d] = qncmaba(N,S); Xl(n,:) = a; Xu(n,:) = b; Rl(n,:) = c; Ru(n,:) = d; [U R Q X] = qncmmva(N,S,ones(size(S))); Xmva(n,:) = X(:,1)'; Rmva(n,:) = sum(R,2)'; endfor subplot(2,2,1); plot(1:NN,Xl(:,1), 1:NN,Xu(:,1), 1:NN,Xmva(:,1), ";MVA;", "linewidth", 2); ylim([0, 0.2]); title("Class 1 throughput"); legend("boxoff"); subplot(2,2,2); plot(1:NN,Xl(:,2), 1:NN,Xu(:,2), 1:NN,Xmva(:,2), ";MVA;", "linewidth", 2); ylim([0, 0.2]); title("Class 2 throughput"); legend("boxoff"); subplot(2,2,3); plot(1:NN,Rl(:,1), 1:NN,Ru(:,1), 1:NN,Rmva(:,1), ";MVA;", "linewidth", 2); ylim([0, 700]); title("Class 1 response time"); legend("location", "northwest"); legend("boxoff"); subplot(2,2,4); plot(1:NN,Rl(:,2), 1:NN,Ru(:,2), 1:NN,Rmva(:,2), ";MVA;", "linewidth", 2); ylim([0, 700]); title("Class 2 response time"); legend("location", "northwest"); legend("boxoff"); 2 tests, 2 passed, 0 known failure, 0 skipped [inst/dtmcfpt.m] >>>>> /build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/inst/dtmcfpt.m ***** test P = [1 1 1; 1 1 1]; fail( "dtmcfpt(P)" ); ***** test P = dtmcbd([1 1 1], [0 0 0] ); fail( "dtmcfpt(P)", "absorbing" ); ***** test P = [ 0.0 0.9 0.1; ... 0.1 0.0 0.9; ... 0.9 0.1 0.0 ]; p = dtmc(P); M = dtmcfpt(P); assert( diag(M)', 1./p, 1e-8 ); ***** test P = [ 0 1 0 0 0; ... .25 .0 .75 0 0; ... 0 .5 0 .5 0; ... 0 0 .75 0 .25; ... 0 0 0 1 0 ]; M = dtmcfpt(P); assert( M, [16 1 2.6667 6.3333 21.3333; ... 15 4 1.6667 5.3333 20.3333; ... 18.6667 3.6667 2.6667 3.6667 18.6667; ... 20.3333 5.3333 1.6667 4 15; ... 21.3333 6.3333 2.6667 1 16 ], 1e-4 ); ***** test sz = 10; P = reshape( 1:sz^2, sz, sz ); normP = repmat(sum(P,2),1,columns(P)); P = P./normP; M = dtmcfpt(P); for i=1:rows(P) for j=1:columns(P) assert( M(i,j), 1 + dot(P(i,:), M(:,j)) - P(i,j)*M(j,j), 1e-8); endfor endfor ***** 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 = dtmcfpt(P); assert( M(1:9 != 5,5)', [6 5 6 5 5 6 5 6], 100*eps ); 6 tests, 6 passed, 0 known failure, 0 skipped [inst/ctmc.m] >>>>> /build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/inst/ctmc.m ***** test Q = [-1 1 0 0; 2 -3 1 0; 0 2 -3 1; 0 0 2 -2]; q = ctmc(Q); assert( q*Q, 0*q, 1e-5 ); assert( q, [8/15 4/15 2/15 1/15], 1e-5 ); ***** test fail( "ctmc([1 1; 1 1])", "infinitesimal" ); fail( "ctmc([1 1 1; 1 1 1])", "square" ); ***** test Q = [0 0 0; ... 0 -1 1; ... 0 1 -1]; q = ctmc(Q); assert( q*Q, 0*q, 1e-5 ); assert( q, [ 0 0.5 0.5 ], 1e-5 ); ***** test lambda = 1; mu = 2; Q = [ -lambda lambda 0 0 ; ... mu -(lambda+mu) lambda 0 ; ... 0 mu -(lambda+mu) lambda ; ... 0 0 mu -mu ]; q = ctmc(Q); assert( q, [8/15 4/15 2/15 1/15], 1e-5 ); ***** test Q = [ -1 0.4 0.6 0 0 0; ... 2 -3 0 0.4 0.6 0; ... 3 0 -4 0 0.4 0.6; ... 0 2 0 -2 0 0; ... 0 3 2 0 -5 0; ... 0 0 3 0 0 -3 ]; q = ctmc(Q); assert( q, [0.6578 0.1315 0.1315 0.0263 0.0263 0.0263], 1e-4 ); ***** test Q = [-1 1 0 0 0 0 0; ... 0 -3 1 0 2 0 0; ... 0 0 -3 1 0 2 0; ... 0 0 0 -2 0 0 2; ... 2 0 0 0 -3 1 0; ... 0 2 0 0 0 -3 1; ... 0 0 2 0 0 0 -2 ]; q = ctmc(Q); assert( q, [0.2192 0.1644 0.1507 0.0753 0.1096 0.1370 0.1438], 1e-4 ); ***** test a = 0.2; b = 0.8; Q = [-a a; b -b]; qlim = ctmc(Q); q = ctmc(Q, 100, [1 0]); assert( qlim, q, 1e-5 ); ***** test ll = 0.1; mu = 100; eta = 5; Q = zeros(9,9); ## 6--1, 7=sleep2 8=sleep1 9=crash Q(6,5) = 6*ll; Q(5,4) = 5*ll; Q(4,3) = 4*ll; Q(3,2) = 3*ll; Q(2,1) = 2*ll; Q(2,7) = mu; Q(1,9) = ll; Q(1,8) = mu; Q(8,9) = ll; Q(7,8) = 2*ll; Q(7,6) = eta; Q(8,6) = eta; Q -= diag(sum(Q,2)); q0 = zeros(1,9); q0(6) = 1; q = ctmc(Q,10,q0); assert( q(9), 0.000504, 1e-6 ); q = ctmc(Q,2,q0); assert( q, [3.83e-7 1.938e-4 0.0654032 0.2216998 0.4016008 0.3079701 0.0030271 0.0000998 5e-6], 1e-5 ); # Compute probability that no shuttle needs to leave during 10 years Q(7,:) = Q(8,:) = 0; # make states 7 and 8 absorbing q = ctmc(Q,10,q0); assert( 1-sum(q(7:9)), 0.3901, 1e-4 ); ***** demo Q = [ -1 1; ... 1 -1 ]; q = ctmc(Q) ***** demo 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"); legend("boxoff"); ***** test sec = 1; min = 60*sec; hour = 60*min; ## the state space enumeration is {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); assert( p, [0.9983916, 0.000002995, 0.0000066559, 0.00159742, 0.0000012779], 1e-6 ); Q(3,:) = Q(5,:) = 0; # make states 3 and 5 absorbing p0 = [1 0 0 0 0]; MTBF = ctmcmtta(Q, p0) / hour; assert( fix(MTBF), 24857); ***** demo 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 = ctmcmtta(Q, p0) / hour; printf("System MTBF %.2f hours\n",MTBF); 9 tests, 9 passed, 0 known failure, 0 skipped [inst/qsmm1k.m] >>>>> /build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/inst/qsmm1k.m ***** test lambda = mu = 1; K = 10; [U R Q X p0] = qsmm1k(lambda,mu,K); assert( Q, K/2, 1e-7 ); assert( U, 1-p0, 1e-7 ); ***** test lambda = 1; mu = 1.2; K = 10; [U R Q X p0 pK] = qsmm1k(lambda, mu, K); prob = qsmm1k(lambda, mu, K, 0:K); assert( p0, prob(1), 1e-7 ); assert( pK, prob(K+1), 1e-7 ); ***** test # Compare the result with the equivalent Markov chain lambda = 0.8; mu = 0.8; K = 10; [U1 R1 Q1 X1] = qsmm1k( lambda, mu, K ); birth = lambda*ones(1,K); death = mu*ones(1,K); q = ctmc(ctmcbd( birth, death )); U2 = 1-q(1); Q2 = dot( [0:K], q ); assert( U1, U2, 1e-4 ); assert( Q1, Q2, 1e-4 ); ***** demo ## Given a M/M/1/K queue, compute the steady-state probability pk ## of having n requests in the systen. lambda = 0.2; mu = 0.25; K = 10; n = 0:10; pn = qsmm1k(lambda, mu, K, n); plot(n, pn, "-o", "linewidth", 2); xlabel("N. of requests (n)"); ylabel("p_n"); title(sprintf("M/M/1/%d system, \\lambda = %g, \\mu = %g", K, lambda, mu)); 3 tests, 3 passed, 0 known failure, 0 skipped [inst/qncmmva.m] >>>>> /build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/inst/qncmmva.m ***** test S = [1 1 2; 1 1 1]; V = [1 1 1; 1 1 1]; N = [1 1]; m = [1 1 2]; fail( "qncmmva(N)" ); fail( "qncmmva(N,S,V,m)", "independent" ); S = [0 0 0; 1 1 1]; fail( "qncmmva(N,S,V,m)", "must contain at least" ); S = [1 2 3; 1 2 3]; N = [1 1]; V = zeros(3,2,3); fail( "qncmmva(N,S,V)", "size mismatch" ); fail( "qncmmva([0.3 1], [1 2; 3 4])", "integer"); fail( "qncmmva([-1 0], [1 2; 3 4])", "nonnegative"); ***** test S = [1 1 1; 1 1 1]; N = [0 0]; [U R Q X] = qncmmva(N, S); assert( U, 0*S ); assert( R, 0*S ); assert( Q, 0*S ); assert( X, 0*S ); ***** test S = [1 1 1; 1 1 1]; V = [1 1 1; 1 1 1]; N = [0 0]; m = [2 2 2]; [U R Q X] = qncmmva(N, S, V, m); assert( U, 0*S ); assert( R, 0*S ); assert( Q, 0*S ); assert( X, 0*S ); ***** test S = [ 1/10 1/3; 2/5 1 ]; V = [ 10 9; 5 4 ]; N = [ 1 1 ]; [U R Q X] = qncmmva(N,S,V); assert( Q, [ 4/19 15/19; 5/19 14/19 ], 1e-3 ); assert( R .* V, [ 4/3 5; 5/2 7 ], 1e-3 ); assert( diag( X ./ V )', [ 3/19 2/19 ], 1e-3 ); assert( all(U(:)<=1) ); assert( Q, R.*X, 1e-5 ); # Little's Law ***** test S = [0.02 0.2 0.4 0.6]; V = [1 0.4 0.2 0.1]; N = [6]; [U R Q X] = qncmmva( N, S, V ); assert( Q, [0.244 2.261 2.261 1.234], 1e-3 ); assert( R, [0.025 0.570 1.140 1.244], 1e-3 ); assert( X, [9.920 3.968 1.984 0.992], 1e-3 ); assert( U, [0.198 0.794 0.794 0.595], 1e-3 ); ***** test S = [1 0 .025; 0 15 .5]; V = [1 0 1; 0 1 1]; N = [2 1]; m = [-1 -1 1]; [U R Q X] = qncmmva(N,S,V,m); assert( R(1,1), 1, 1e-3 ); assert( R(2,2), 15, 1e-3 ); assert( R(1,3), .027, 1e-3 ); assert( R(2,3), .525, 1e-3 ); assert( X(1,1)+X(1,2), 1.949, 1e-3 ); assert( X(2,1)+X(2,2), 0.064, 1e-3 ); assert( sum(Q,1), [1.949, .966, .085], 1e-3 ); assert( all(U(:,3)<=1) ); assert( Q, R.*X, 1e-5 ); # Little's Law ***** test S = [1 0 .025; 0 15 .5]; V = [1 0 1; 0 1 1]; N = [15 5]; m = [-1 -1 1]; [U R Q X] = qncmmva(N,S,V,m); # FIXME: I replaced 14.3->14.323 assert( U, [14.323 0 .358; 0 4.707 .157], 1e-3 ); # FIXME: I replaced 14.3->14.323 assert( X, [14.323 0 14.323; 0 .314 .314 ], 1e-3 ); # FIXME: I replaced 14.3->14.323 assert( Q, [14.323 0 .677; 0 4.707 .293 ], 1e-3 ); assert( R, [1 0 .047; 0 15 .934 ], 1e-3 ); assert( Q, R.*X, 1e-5 ); # Little's Law ***** test S = [ 0.2 0.4 1; 0.2 0.6 2 ]; V = [ 1 0.6 0.4; 1 0.3 0.7 ]; N = [ 2 1 ]; m = [ 2 1 -1 ]; [U R Q X] = qncmmva(N,S,V,m); assert( Q, [ 0.428 0.726 0.845; 0.108 0.158 0.734 ], 1e-3 ); assert( X(1,1), 2.113, 1e-3 ); # CHECK assert( X(2,1), 0.524, 1e-3 ); # CHECK assert( all(U(:)<=1) ); assert( Q, R.*X, 1e-5 ); # Little's Law ***** test C = 2; # two classes K = 4; # four servers S = V = zeros(C,K); S(1,:) = linspace(1,2,K); S(2,:) = linspace(2,3,K); V(1,:) = linspace(4,1,K); V(2,:) = linspace(6,3,K); N = [10 0]; # class 2 has no customers [U1 R1 Q1 X1] = qncmmva(N,S,V); [U2 R2 Q2 X2] = qncsmva(N(1),S(1,:),V(1,:)); assert( U1(1,:), U2, 1e-5 ); assert( R1(1,:), R2, 1e-5 ); assert( Q1(1,:), Q2, 1e-5 ); assert( X1(1,:), X2, 1e-5 ); ***** test Z = [1 15]; V = [1; 1]; S = [.025; .5]; N = [15; 5]; [U R Q X] = qncmmva(N, S, V, 1, Z); assert( U, [.358; .157], 1e-3 ); assert( Q, [.677; .293], 1e-3 ); assert( X, [14.323; .314], 1e-3 ); ## NOTE: X(1,1) = 14.3 in Schwetman assert( R, [.047; .934], 1e-3 ); assert( Q, R.*X, 1e-5 ); # Little's Law ***** test C = 2; K = 6; P = zeros(C,K,C,K); P(1,1,1,2) = P(2,1,2,2) = 1; P(1,2,1,3) = P(1,2,1,4) = P(1,2,1,5) = P(1,2,1,6) = .25; P(2,2,2,3) = P(2,2,2,4) = P(2,2,2,5) = P(2,2,2,6) = .25; P(1,3,1,1) = P(1,4,1,1) = P(1,5,1,1) = P(1,6,1,1) = .9; P(1,3,1,2) = P(1,4,1,2) = P(1,5,1,2) = P(1,6,1,2) = .1; P(2,3,2,1) = P(2,4,2,1) = P(2,5,2,1) = P(2,6,2,1) = .05; P(2,3,2,2) = P(2,4,2,2) = P(2,5,2,2) = P(2,6,2,2) = .95; N = [40 4]; S = [ 5.0 .010 .035 .035 .035 .035; ... 10.0 .100 .035 .035 .035 .035 ]; V = qncmvisits(P); [U R Q X] = qncmmva(N, S, V, [-1 1 1 1 1 1]); # FIXME: The results below were computed with JMVA; the numbers # in the paper are different (wrong?!?)!! assert( U, [39.457941 0.087684 0.076724 0.076724 0.076724 0.076724; ... 2.772704 0.554541 0.048522 0.048522 0.048522 0.048522 ], 1e-5 ); assert( R.*V, [5 0.024363 0.011081 0.011081 0.011081 0.011081; ... 10 3.636155 0.197549 0.197549 0.197549 0.197549 ], 1e-5 ); assert( Q(:,1), [39.457941 2.772704]', 1e-5 ); assert( Q(:,2), [0.192262 1.008198]', 1e-5 ); assert( Q(:,3), [0.087449 0.054775]', 1e-5 ); assert( Q(:,4), Q(:,5), 1e-5 ); assert( Q(:,5), Q(:,6), 1e-5 ); assert( X(:,1), [7.891588 0.277270]', 1e-5 ); assert( X(:,2), [8.768431 5.545407]', 1e-5 ); assert( X(:,3), [2.192108 1.386352]', 1e-5 ); assert( X(:,4), X(:,5), 1e-5 ); assert( X(:,5), X(:,6), 1e-5 ); assert( Q, R.*X, 1e-5 ); # Little's Law ***** test C = 2; # two classes K = 4; # four servers C = 2; K = 4; P = zeros(C,K,C,K); S = zeros(C,K); # Routing # class 1 routing P(1,1,1,1) = .05; P(1,1,1,2) = .45; P(1,1,1,3) = .5; P(1,2,1,1) = 1; P(1,3,1,1) = 1; # class 2 routing P(2,1,2,1) = .01; P(2,1,2,3) = .5; P(2,1,2,4) = .49; P(2,3,2,1) = 1; P(2,4,2,1) = 1; # Compute visits V = qncmvisits(P); # Define population and service times N = [3 2]; S = [0.01 0.09 0.10 0.08; ... 0.05 0.09 0.10 0.08]; [U1 R1 Q1 X1] = qncmmva(N,S,V); # this invokes __qncmmva_nocs [U2 R2 Q2 X2] = qncmmva(N,S,P); # this invokes __qncmmva_cs assert( U2, U1, 1e-5 ); assert( R2, R1, 1e-5 ); assert( Q2, Q1, 1e-5 ); assert( X2, X1, 1e-5 ); ***** test S = [1 0 .025; 0 15 .5]; V = [1 0 1; 0 1 1]; N = [15 5]; m = [-1 -1 1]; [U R Q X] = qncmmva(N,S,V,m); assert( U, [14.323 0 .358; 0 4.707 .157], 1e-3 ); assert( R, [1.0 0 .047; 0 15 .934], 1e-3 ); assert( Q, [14.323 0 .677; 0 4.707 .293], 1e-3 ); assert( X, [14.323 0 14.323; 0 .314 .314], 1e-3 ); ***** test S = [.025 1 15; .5 1 15 ]; P = zeros(2,3,2,3); P(1,1,1,2) = P(1,2,1,1) = 1; P(2,1,2,3) = P(2,3,2,1) = 1; N = [15 5]; m = [1 -1 -1]; r = [1 1]; # reference station is station 1 [U R Q X] = qncmmva(N,S,P,r,m); # FIXME: I replaced 14.3->14.323 assert( U, [0.358 14.323 0; 0.156 0 4.707], 1e-3 ); # FIXME: I replaced 14.3->14.323 assert( X, [14.323 14.3230 0; .314 0 .314 ], 1e-3 ); # FIXME: I replaced 14.3->14.323 assert( Q, [.677 14.323 0; .293 0 4.707], 1e-3 ); assert( R, [.047 1 15.0; .934 1 15.0], 1e-3 ); assert( Q, R.*X, 1e-5 ); # Little's Law ***** test C = 2; K = 3; S = [.01 .07 .10; ... .05 .07 .10 ]; P = zeros(C,K,C,K); P(1,1,1,2) = .7; P(1,1,1,3) = .2; P(1,1,2,1) = .1; P(2,1,2,2) = .3; P(2,1,2,3) = .5; P(2,1,1,1) = .2; P(1,2,1,1) = P(2,2,2,1) = 1; P(1,3,1,1) = P(2,3,2,1) = 1; N = [3 0]; [U R Q X] = qncmmva(N, S, P); assert( R, [.015 .133 .163; .073 .133 .163], 1e-3 ); assert( X, [12.609 8.826 2.522; 6.304 1.891 3.152], 1e-3 ); assert( Q, [.185 1.175 .412; .462 .252 .515], 1e-3 ); assert( U, [.126 .618 .252; .315 .132 .315], 1e-3 ); ***** test V = [ 1.00 0.45 0.50 0.00; ... 1.00 0.00 0.50 0.49 ]; N = [3 2]; S = [0.01 0.09 0.10 0.08; ... 0.05 0.09 0.10 0.08]; [U R Q X] = qncmmva(N, S, V); assert( U, [ 0.1215 0.4921 0.6075 0.0000; ... 0.3433 0.0000 0.3433 0.2691 ], 1e-4 ); assert( Q, [ 0.2131 0.7539 2.0328 0.0000; ... 0.5011 0.0000 1.1839 0.3149 ], 1e-4 ); assert( R.*V, [0.0175 0.0620 0.1672 0.0000; ... 0.0729 0.0000 0.1724 0.0458 ], 1e-4 ); assert( X, [12.1517 5.4682 6.0758 0.0000; ... 6.8669 0.0000 3.4334 3.3648 ], 1e-4 ); ***** test N = [1 1 1]; S = [0.20000 0.02000 0.00000 0.00000; 0.20000 0.00000 0.02000 0.00000; 0.20000 0.00000 0.00000 0.02000]; V = [1 1 0 0; 1 0 1 0; 1 0 0 1]; [U R Q X] = qncmmva(N,S,V); assert( Q(1,2), Q(2,3), 1e-5); assert( Q(2,3), Q(3,4), 1e-5); assert( abs(max(Q(:,1)) - min(Q(:,1))) < 1e-5 ); ***** demo 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] = qncmmva( 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, ";Class 1;", "linewidth", 2, ... b, X2, ";Class 2;", "linewidth", 2, ... b, XX, ";System;", "linewidth", 2 ); legend("location","south"); legend("boxoff"); 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"); legend("boxoff"); xlabel("Population mix \\beta for Class 1"); ylabel("Resp. Time"); ***** demo S = [1 0 .025; 0 15 .5]; P = zeros(2,3,2,3); P(1,1,1,3) = P(1,3,1,1) = 1; P(2,2,2,3) = P(2,3,2,2) = 1; V = qncmvisits(P,[3 3]); # reference station is station 3 N = [15 5]; m = [-1 -1 1]; [U R Q X] = qncmmva(N,S,V,m) ***** demo C = 2; K = 3; S = [.01 .07 .10; ... .05 .07 .10 ]; P = zeros(C,K,C,K); P(1,1,1,2) = .7; P(1,1,1,3) = .2; P(1,1,2,1) = .1; P(2,1,2,2) = .3; P(2,1,2,3) = .5; P(2,1,1,1) = .2; P(1,2,1,1) = P(2,2,2,1) = 1; P(1,3,1,1) = P(2,3,2,1) = 1; N = [3 0]; [U R Q X] = qncmmva(N, S, P) 17 tests, 17 passed, 0 known failure, 0 skipped [inst/dtmc.m] >>>>> /build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/inst/dtmc.m ***** test P = [0.75 0.25; 0.5 0.5]; p = dtmc(P); assert( p*P, p, 1e-5 ); assert( p, [0.6666 0.3333], 1e-4 ); ***** test #Example 2.11 p. 44 Bolch et al. P = [0.5 0.5; 0.5 0.5]; p = dtmc(P); assert( p, [0.5 0.5], 1e-3 ); ***** test fail("dtmc( [1 1 1; 1 1 1] )", "square"); ***** test a = 0.2; b = 0.8; P = [1-a a; b 1-b]; plim = dtmc(P); p = dtmc(P, 100, [1 0]); assert( plim, p, 1e-5 ); ***** test P = [0 1 0 0 0; ... .25 0 .75 0 0; ... 0 .5 0 .5 0; ... 0 0 .75 0 .25; ... 0 0 0 1 0 ]; p = dtmc(P); assert( p, [.0625 .25 .375 .25 .0625], 10*eps ); ***** 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]; 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"); legend("boxoff"); 6 tests, 6 passed, 0 known failure, 0 skipped [inst/qnmknode.m] >>>>> /build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/inst/qnmknode.m ***** test fail( "qnmknode( 'pippo', 1 )", "must be one" ); fail( "qnmknode( '-/g/1-ps', 1, 1, 1)", "Invalid call" ); 1 test, 1 passed, 0 known failure, 0 skipped [inst/qnomaba.m] >>>>> /build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/inst/qnomaba.m ***** test fail( "qnomaba( [1 1], [1 1 1; 1 1 1; 1 1 1] )", "2 rows" ); 1 test, 1 passed, 0 known failure, 0 skipped [inst/qncmvisits.m] >>>>> /build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/inst/qncmvisits.m ***** test ## Closed, multiclass network C = 2; K = 3; P = zeros(C,K,C,K); P(1,1,1,2) = 1; P(1,2,1,1) = 1; P(2,1,2,3) = 1; P(2,3,2,1) = 1; V = qncmvisits(P); for c=1:C for k=1:K assert(V(c,k), sum(sum(V .* P(:,:,c,k))), 1e-5); endfor endfor ***** test ## Test multiclass network. Example from Schwetman (figure 7, page 9 of ## http://docs.lib.purdue.edu/cstech/259/ ## "Testing network-of-queues software, technical report CSD-TR 330, ## Purdue University). C = 2; K = 4; P = zeros(C,K,C,K); # class 1 routing P(1,1,1,1) = .05; P(1,1,1,2) = .45; P(1,1,1,3) = .5; P(1,2,1,1) = 1; P(1,3,1,1) = 1; # class 2 routing P(2,1,2,1) = .01; P(2,1,2,3) = .5; P(2,1,2,4) = .49; P(2,3,2,1) = 1; P(2,4,2,1) = 1; V = qncmvisits(P); for c=1:C for i=1:K assert(V(c,i), sum(sum(V .* P(:,:,c,i))), 1e-5); endfor endfor ***** test ## Network with class switching. ## This is the example in figure 9 of ## Schwetman, "Implementing the Mean Value Analysis ## Algorithm fort the solution of Queueing Network Models", Technical ## Report CSD-TR-355, Department of Computer Science, Purdue Univrsity, ## Feb 15, 1982, http://docs.lib.purdue.edu/cstech/286/ C = 2; K = 3; S = [.01 .07 .10; ... .05 0.7 .10 ]; P = zeros(C,K,C,K); P(1,1,1,2) = .7; P(1,1,1,3) = .2; P(1,1,2,1) = .1; P(2,1,2,2) = .3; P(2,1,2,3) = .5; P(2,1,1,1) = .2; P(1,2,1,1) = P(1,3,1,1) = 1; P(2,2,2,1) = P(2,3,2,1) = 1; N = [3 0]; V = qncmvisits(P); VV = [10 7 2; 5 1.5 2.5]; # result given in Schwetman; our function computes something different, but that's ok since visit counts are actually ratios assert( V ./ repmat(V(:,1),1,K), VV ./ repmat(VV(:,1),1,K), 1e-5 ); ***** test ## two disjoint classes: must produce two disjoing chains C = 2; K = 3; P = zeros(C,K,C,K); P(1,1,1,2) = 1; P(1,2,1,1) = 1; P(2,1,2,3) = 1; P(2,3,2,1) = 1; [nc r] = qncmvisits(P); assert( r(1) != r(2) ); ***** test ## two classes, one chain C = 2; K = 3; P = zeros(C,K,C,K); P(1,1,1,2) = .5; P(1,2,2,1) = 1; P(2,1,2,3) = .5; P(2,3,1,1) = 1; [nc r] = qncmvisits(P); assert( r(1) == r(2) ); ***** test ## a "Moebius strip". Note that this configuration is invalid, and ## therefore our algorithm must raise an error. This is because this ## network has two chains, but both chains contain both classes C = 2; K = 2; P = zeros(C,K,C,K); P(1,1,2,2) = 1; P(2,2,1,1) = 1; P(2,1,1,2) = 1; P(1,2,2,1) = 1; fail( "qncmvisits(P)", "different"); ***** test ## Network with two classes representing independent chains. ## This is example in figure 8 of ## Schwetman, "Implementing the Mean Value Analysis ## Algorithm fort the solution of Queueing Network Models", Technical ## Report CSD-TR-355, Department of Computer Science, Purdue Univrsity, ## Feb 15, 1982, http://docs.lib.purdue.edu/cstech/286/ C = 2; K = 2; P = zeros(C,K,C,K); P(1,1,1,3) = P(1,3,1,1) = 1; P(2,2,2,3) = P(2,3,2,2) = 1; V = qncmvisits(P,[1,2]); assert( V, [1 0 1; 0 1 1], 1e-5 ); ***** test C = 2; K = 3; P = zeros(C,K,C,K); P(1,1,1,2) = 1; P(1,2,1,3) = 1; P(1,3,2,2) = 1; P(2,2,1,1) = 1; [V ch] = qncmvisits(P); assert( ch, [1 1] ); ***** test C = 2; K = 3; P = zeros(C,K,C,K); P(1,1,1,2) = 1; P(1,2,1,3) = 1; P(1,3,2,2) = 1; P(2,2,2,1) = 1; P(2,1,1,2) = 1; [V ch] = qncmvisits(P); assert( ch, [1 1] ); 9 tests, 9 passed, 0 known failure, 0 skipped [inst/dtmcbd.m] >>>>> /build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/inst/dtmcbd.m ***** test birth = [.5 .5 .3]; death = [.6 .2 .3]; fail("dtmcbd(birth,death)","must be"); ***** demo birth = [ .2 .3 .4 ]; death = [ .1 .2 .3 ]; P = dtmcbd( birth, death ); disp(P) 1 test, 1 passed, 0 known failure, 0 skipped [inst/qnsolve.m] >>>>> /build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/inst/qnsolve.m ***** test # Example 8.7 p. 349 Bolch et al. N = 3; Q1 = qnmknode( "m/m/m-fcfs", .5, 2 ); Q2 = qnmknode( "m/m/m-fcfs", 1/1.667 ); Q3 = qnmknode( "m/m/m-fcfs", 1/1.25 ); Q4 = qnmknode( "m/m/m-fcfs", 1./[1 2 3] ); V = [ 1 .5 .5 1 ]; [U R Q X] = qnsolve("closed",N, { Q1, Q2, Q3, Q4 }, V); assert( Q, [0.624 0.473 0.686 1.217], 1e-3 ); assert( R, [0.512 0.776 1.127 1], 1e-3 ); ***** test # Example 8.7 p. 349 Bolch et al. N = 3; Q1 = qnmknode( "m/m/m-fcfs", 1/2, 2 ); Q2 = qnmknode( "m/m/m-fcfs", 1/1.667 ); Q3 = qnmknode( "m/m/m-fcfs", 1/1.25 ); Q4 = qnmknode( "-/g/inf", 1 ); V = [ 1 .5 .5 1 ]; [U R Q X] = qnsolve("closed",N, { Q1, Q2, Q3, Q4 }, V); assert( Q, [0.624 0.473 0.686 1.217], 1e-3 ); assert( R, [0.512 0.776 1.127 1], 1e-3 ); ***** test # Example 8.4 p. 333 Bolch et al. N = 3; Q1 = qnmknode( "m/m/m-fcfs", .5, 2 ); Q2 = qnmknode( "m/m/m-fcfs", .6 ); Q3 = qnmknode( "m/m/m-fcfs", .8 ); Q4 = qnmknode( "-/g/inf", 1 ); V = [ 1 .5 .5 1 ]; [U R Q X] = qnsolve("closed",N, { Q1, Q2, Q3, Q4 }, V); assert( U(1:3), [.304 .365 .487], 1e-3 ); assert( X, [1.218 0.609 0.609 1.218], 1e-3 ); ***** test # Same as above, with center 1 replaced with a load-dependent service center N = 3; Q1 = qnmknode( "m/m/m-fcfs", [.5 .25 .25] ); Q2 = qnmknode( "m/m/m-fcfs", .6 ); Q3 = qnmknode( "m/m/m-fcfs", .8 ); Q4 = qnmknode( "m/m/m-fcfs", [1 1/2 1/3] ); V = [ 1 .5 .5 1 ]; [U R Q X] = qnsolve("closed",N, { Q1, Q2, Q3, Q4 }, V); assert( U(2:3), [.365 .487], 1e-3 ); ## NOTE: Utilization U(1) is computed differently from M/M/m nodes and load-dependent M/M/1 nodes assert( X, [1.218 0.609 0.609 1.218], 1e-3 ); ***** test # Example 7.4 p. 287 Bolch et al. QQ = { qnmknode( "m/m/m-fcfs", 0.04 ), ... qnmknode( "m/m/m-fcfs", 0.03 ), ... qnmknode( "m/m/m-fcfs", 0.06 ), ... qnmknode( "m/m/m-fcfs", 0.05 ) }; P = [ 0 0.5 0.5 0; 1 0 0 0; 0.6 0 0 0; 1 0 0 0 ]; lambda = [0 0 0 4]; [U R Q X] = qnsolve("open", sum(lambda), QQ, qnosvisits(P,lambda) ); assert( X, [20 10 10 4], 1e-4 ); assert( U, [0.8 0.3 0.6 0.2], 1e-2 ); assert( R, [0.2 0.043 0.15 0.0625], 1e-3 ); assert( Q, [4, 0.429 1.5 0.25], 1e-3 ); ***** test V = [1 1; 1 1]; Q1 = qnmknode( "m/m/m-fcfs", [1;2] ); Q2 = qnmknode( "m/m/m-fcfs", [3;4] ); lambda = [3/19 2/19]; [U R Q] = qnsolve("open", lambda, { Q1, Q2 }, diag( lambda / sum(lambda) ) * V); assert( U(1,1), 3/19, 1e-6 ); assert( U(2,1), 4/19, 1e-6 ); assert( R(1,1), 19/12, 1e-6 ); assert( R(1,2), 57/2, 1e-6 ); assert( Q(1,1), .25, 1e-6 ); ***** test QQ = { qnmknode( "m/m/m-fcfs", [0.2; 0.2], 2 ), ... 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 ); assert( Q, [ 0.428 0.726 0.845; 0.108 0.158 0.734 ], 1e-3 ); assert( X(1,1), 2.113, 1e-3 ); # CHECK assert( X(2,1), 0.524, 1e-3 ); # CHECK assert( all( all(U(:,[1,2])<=1) ) ); ***** test 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 ); assert( Q, [ 0.428 0.726 0.845; 0.108 0.158 0.734 ], 1e-3 ); assert( X(1,1), 2.113, 1e-3 ); # CHECK assert( X(2,1), 0.524, 1e-3 ); # CHECK assert( all( all(U(:,[1,2])<=1) ) ); ***** test # example p. 26 Schwetman QQ = { qnmknode( "m/m/m-fcfs", [.25; .25] ), qnmknode( "-/g/1-ps", [0; .1] ) }; V = [1 0; 1 1]; lambda = [1 0]; N = [0 3]; [U R Q X] = qnsolve( "mixed", lambda, N, QQ, V ); assert( U(1,1), .25, 1e-3 ); assert( X(1,1), 1.0, 1e-3 ); assert( [R(1,1) R(2,1) R(2,2)], [1.201 0.885 0.135], 1e-3 ); ***** demo 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 ); 9 tests, 9 passed, 0 known failure, 0 skipped [inst/dtmcexps.m] >>>>> /build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/inst/dtmcexps.m ***** test P = dtmcbd([1 1 1 1], [0 0 0 0]); L = dtmcexps(P,[1 0 0 0 0]); t = dtmcmtta(P,[1 0 0 0 0]); assert( L, [1 1 1 1 0] ); assert( sum(L), t ); ***** test P = dtmcbd(linspace(0.1,0.4,5),linspace(0.4,0.1,5)); p0 = [1 0 0 0 0 0]; L = dtmcexps(P,0,p0); assert( L, p0 ); 2 tests, 2 passed, 0 known failure, 0 skipped [inst/qncsmvald.m] >>>>> /build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/inst/qncsmvald.m ***** test N = 0; S = [1 2; 3 4; 5 6; 7 8]; V = [1 1 1 4]; [U R Q X] = qncsmvald(N, S, V); assert( U, 0*V ); assert( R, 0*V ); assert( Q, 0*V ); assert( X, 0*V ); ***** test # Exsample 3.42 p. 577 Jain V = [ 16 10 5 ]; N = 20; S = [ 0.125 0.3 0.2 ]; Sld = repmat( S', 1, N ); Z = 4; [U1 R1 Q1 X1] = qncsmvald(N,Sld,V,Z); [U2 R2 Q2 X2] = qncsmva(N,S,V,ones(1,3),Z); assert( U1, U2, 1e-3 ); assert( R1, R2, 1e-3 ); assert( Q1, Q2, 1e-3 ); assert( X1, X2, 1e-3 ); ***** test # Example 8.7 p. 349 Bolch et al. N = 3; Sld = 1 ./ [ 2 4 4; ... 1.667 1.667 1.667; ... 1.25 1.25 1.25; ... 1 2 3 ]; V = [ 1 .5 .5 1 ]; [U R Q X] = qncsmvald(N,Sld,V); assert( Q, [0.624 0.473 0.686 1.217], 1e-3 ); assert( R, [0.512 0.776 1.127 1], 1e-3 ); assert( all( U<=1) ); ***** test # Example 8.4 p. 333 Bolch et al. N = 3; S = [ .5 .6 .8 1 ]; m = [2 1 1 N]; Sld = zeros(3,N); Sld(1,:) = .5 ./ [1 2 2]; Sld(2,:) = [.6 .6 .6]; Sld(3,:) = [.8 .8 .8]; Sld(4,:) = 1 ./ [1 2 3]; V = [ 1 .5 .5 1 ]; [U1 R1 Q1 X1] = qncsmvald(N,Sld,V); [U2 R2 Q2 X2] = qncsmva(N,S,V,m); ## Note that qncsmvald computes the utilization in a different ## way as qncsmva; in fact, qncsmva knows that service ## center i has m(i)>1 servers, but qncsmvald does not. Thus, ## utilizations for multiple-server nodes cannot be compared assert( U1([2,3]), U2([2,3]), 1e-3 ); assert( R1, R2, 1e-3 ); assert( Q1, Q2, 1e-3 ); assert( X1, X2, 1e-3 ); 4 tests, 4 passed, 0 known failure, 0 skipped [inst/engset.m] >>>>> /build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/inst/engset.m ***** test fail("erlangb(1, -1)", "positive"); fail("erlangb(-1, 1)", "positive"); fail("erlangb(1, 0)", "positive"); fail("erlangb(0, 1)", "positive"); fail("erlangb('foo',1)", "positive"); fail("erlangb(1,'bar')", "positive"); fail("erlangb([1 1],[1 1 1])","common size"); 1 test, 1 passed, 0 known failure, 0 skipped [inst/qnosvisits.m] >>>>> /build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/inst/qnosvisits.m ***** test fail( "qnosvisits([0 .5; .5 0],[0 -1])", "contains negative" ); fail( "qnosvisits([1 1 1; 1 1 1], [1 1])", "square" ); ***** test ## Open, single class network P = [0 0.2 0.5; 1 0 0; 1 0 0]; lambda = [ 0.1 0.3 0.2 ]; V = qnosvisits(P,lambda); assert( V*P+lambda/sum(lambda),V,1e-5 ); ***** demo p = 0.3; lambda = 1.2 P = [0 0.3 0.5; ... 1 0 0 ; ... 1 0 0 ]; V = qnosvisits(P,[1.2 0 0]) ***** demo 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 = qnosvisits(P,lambda); S = [2 1 2 1.8]; m = [3 1 1 2]; [U R Q X] = qnos( sum(lambda), S, V, m ) 2 tests, 2 passed, 0 known failure, 0 skipped [inst/qnosbsb.m] >>>>> /build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/inst/qnosbsb.m ***** test fail( "qnosbsb( 0.1, [] )", "vector" ); fail( "qnosbsb( 0.1, [0 -1])", "nonnegative" ); fail( "qnosbsb( 0, [1 2] )", "lambda" ); fail( "qnosbsb( -1, [1 2])", "lambda" ); ***** test [Xl Xu Rl Ru] = qnosbsb(0.1,[1 2 3]); assert( Xl, 0 ); 2 tests, 2 passed, 0 known failure, 0 skipped [inst/qncmnpop.m] >>>>> /build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/inst/qncmnpop.m ***** test H = qncmnpop( [1 2 2] ); assert( H, [1 1 0 0 0 0; 1 2 2 1 0 0; 1 3 5 5 3 1] ); 1 test, 1 passed, 0 known failure, 0 skipped [inst/qncscmva.m] >>>>> /build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/inst/qncscmva.m ***** test N=5; S = [1 0.3 0.8 0.9]; V = [1 1 1 1]; [U1 R1 Q1 X1] = qncscmva( N, S(1:3), repmat(S(4),1,N), V ); [U2 R2 Q2 X2] = qncsmva(N, S, V); assert( X1, X2, 1e-5 ); assert( U1, U2, 1e-5 ); assert( R1, R2, 1e-5 ); assert( Q1, Q2, 1e-5 ); ***** test N=5; S = [1 1 1 1 1; ... 1 1 1 1 1; ... 1 1 1 1 1; ... 1 1/2 1/3 1/4 1/5]; V = [1 1 1 1]; [U1 R1 Q1 X1] = qncscmva( N, S(1:3,1), S(4,:), V ); [U2 R2 Q2 X2] = qncsmvald(N, S, V); assert( U1, U2, 1e-5 ); assert( R1, R2, 1e-5 ); assert( Q1, Q2, 1e-5 ); assert( X1, X2, 1e-5 ); ***** test N=5; S = [1 1 1 1 1; ... 1 1 1 1 1; ... 1 1 1 1 1; ... 1 1/2 1/3 1/4 1/5]; V = [1 2 1 1]; Z = 3; [U1 R1 Q1 X1] = qncscmva( N, S(1:3,1), S(4,:), V, Z ); [U2 R2 Q2 X2] = qncsmvald(N, S, V, Z); assert( U1, U2, 1e-5 ); assert( R1, R2, 1e-5 ); assert( Q1, Q2, 1e-5 ); assert( X1, X2, 1e-5 ); ***** demo maxN = 90; # Max population size Rmva = Rconv = Rcmva = zeros(1,maxN); # Results S = 4; Z = 10; m = 8; old = warning("query","qn:numerical-instability"); warning("off","qn:numerical-instability"); for N=1:maxN [U R] = qncsmva(N,S,1,m,Z); # Use MVA Rmva(N) = R(1); [U R] = qncsconv(N,[S Z],[1 1],[m -1]); # Use Convolution Rconv(N) = R(1); if ( N > m ) Scmva = S ./ min(1:N,m); else Scmva = S ./ (1:N); endif [U R] = qncscmva(N,[],Scmva,1,Z); # Use CMVA Rcmva(N) = R(1); endfor warning(old.state,"qn:numerical-instability"); plot(1:maxN, Rmva, ";MVA;", ... 1:maxN, Rconv, ";Convolution;", ... 1:maxN, Rcmva, ";CNVA;", "linewidth",2); xlabel("Population size (N)"); ylabel("Response Time"); ax=axis(); ax(3) = 0; ax(4) = 40; axis(ax); legend("location","northwest"); legend("boxoff"); 3 tests, 3 passed, 0 known failure, 0 skipped [inst/qncsmva.m] >>>>> /build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/inst/qncsmva.m ***** test fail( "qncsmva()", "Invalid" ); fail( "qncsmva( 10, [1 2], [1 2 3] )", "incompatible size" ); fail( "qncsmva( 10, [-1 1], [1 1] )", "nonnegative" ); fail( "qncsmva( 10.3, [-1 1], [1 1] )", "integer" ); fail( "qncsmva( -0.3, [-1 1], [1 1] )", "nonnegative" ); ***** test qncsmva(1,1,1,1); qncsmva(1,1,1,-1); qncsmva(1,1,1,2); qncsmva(1,[1 1],[1 1],[-1 -1]); qncsmva(1,[1 1],[1 1],[1 1]); qncsmva(1,[1 1],[1 1],[2 2]); ***** test N = 0; S = [1 2 3 4]; V = [1 1 1 4]; [U R Q X] = qncsmva(N, S, V); assert( U, 0*S ); assert( R, 0*S ); assert( Q, 0*S ); assert( X, 0*S ); ***** test N = 0; S = [1 2 3 4]; V = [1 1 1 4]; m = [2 3 4 5]; [U R Q X] = qncsmva(N, S, V, m); assert( U, 0*S ); assert( R, 0*S ); assert( Q, 0*S ); assert( X, 0*S ); ***** test # Exsample 3.42 p. 577 Jain S = [ 0.125 0.3 0.2 ]'; V = [ 16 10 5 ]; N = 20; m = ones(1,3)'; Z = 4; [U R Q X] = qncsmva(N,S,V,m,Z); assert( R, [ .373 4.854 .300 ], 1e-3 ); assert( Q, [ 1.991 16.177 0.500 ], 1e-3 ); assert( all( U>=0 ) ); assert( all( U<=1 ) ); assert( Q, R.*X, 1e-5 ); # Little's Law ***** test # Exsample 3.42 p. 577 Jain S = [ 0.125 0.3 0.2 ]; V = [ 16 10 5 ]; N = 20; m = ones(1,3); Z = 4; [U R Q X] = qncsmva(N,S,V,m,Z); assert( R, [ .373 4.854 .300 ], 1e-3 ); assert( Q, [ 1.991 16.177 0.500 ], 1e-3 ); assert( all( U>=0 ) ); assert( all( U<=1 ) ); assert( Q, R.*X, 1e-5 ); # Little's Law ***** test # Example 8.4 p. 333 Bolch et al. S = [ .5 .6 .8 1 ]; N = 3; m = [2 1 1 -1]; V = [ 1 .5 .5 1 ]; [U R Q X] = qncsmva(N,S,V,m); assert( Q, [ 0.624 0.473 0.686 1.217 ], 1e-3 ); assert( X, [ 1.218 0.609 0.609 1.218 ], 1e-3 ); assert( all(U >= 0 ) ); assert( all(U( m>0 ) <= 1 ) ); assert( Q, R.*X, 1e-5 ); # Little's Law ***** test # Example 8.3 p. 331 Bolch et al. # This is a single-class network, which however nothing else than # a special case of multiclass network S = [ 0.02 0.2 0.4 0.6 ]; K = 6; V = [ 1 0.4 0.2 0.1 ]; [U R Q X] = qncsmva(K, S, V); assert( U, [ 0.198 0.794 0.794 0.595 ], 1e-3 ); assert( R, [ 0.025 0.570 1.140 1.244 ], 1e-3 ); assert( Q, [ 0.244 2.261 2.261 1.234 ], 1e-3 ); assert( X, [ 9.920 3.968 1.984 0.992 ], 1e-3 ); ***** test # Check bound analysis N = 10; # max population for n=1:N S = [1 0.8 1.2 0.5]; V = [1 2 2 1]; [U R Q X] = qncsmva(n, S, V); Xs = X(1)/V(1); Rs = dot(R,V); # Compare with balanced system bounds [Xlbsb Xubsb Rlbsb Rubsb] = qncsbsb( n, S .* V ); assert( Xlbsb<=Xs ); assert( Xubsb>=Xs ); assert( Rlbsb<=Rs ); assert( Rubsb>=Rs ); # Compare with asymptotic bounds [Xlab Xuab Rlab Ruab] = qncsaba( n, S .* V ); assert( Xlab<=Xs ); assert( Xuab>=Xs ); assert( Rlab<=Rs ); assert( Ruab>=Rs ); endfor ***** demo S = [ 0.125 0.3 0.2 ]; V = [ 16 10 5 ]; N = 20; m = ones(1,3); Z = 4; [U R Q X] = qncsmva(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 ); 9 tests, 9 passed, 0 known failure, 0 skipped [inst/dtmctaexps.m] >>>>> /build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/inst/dtmctaexps.m ***** test P = dtmcbd([1 1 1 1], [0 0 0 0]); p0 = [1 0 0 0 0]; L = dtmctaexps(P,p0); assert( L, [.25 .25 .25 .25 0], 10*eps ); 1 test, 1 passed, 0 known failure, 0 skipped [inst/qnom.m] >>>>> /build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/inst/qnom.m ***** test fail( "qnom([1 1], [.9; 1.0])", "exceeded at center 1"); fail( "qnom([1 1], [0.9 .9; 0.9 1.0])", "exceeded at center 2"); #qnom([1 1], [.9; 1.0],[],2); # should not fail, M/M/2-FCFS #qnom([1 1], [.9; 1.0],[],-1); # should not fail, -/G/1-PS fail( "qnom(1./[2 3], [1.9 1.9 0.9; 2.9 3.0 2.9])", "exceeded at center 2"); #qnom(1./[2 3], [1 1.9 0.9; 0.3 3.0 1.5],[],[1 2 1]); # should not fail ***** test V = [1 1; 1 1]; S = [1 3; 2 4]; lambda = [3/19 2/19]; [U R Q X] = qnom(lambda, S, diag( lambda / sum(lambda) ) * V ); assert( U(1,1), 3/19, 1e-6 ); assert( U(2,1), 4/19, 1e-6 ); assert( R(1,1), 19/12, 1e-6 ); assert( R(1,2), 57/2, 1e-6 ); assert( Q(1,1), .25, 1e-6 ); assert( Q, R.*X, 1e-5 ); # Little's Law ***** test # example p. 138 Zahorjan et al. V = [ 10 9; 5 4]; S = [ 1/10 1/3; 2/5 1]; lambda = [3/19 2/19]; [U R Q X] = qnom(lambda, S, diag( lambda / sum(lambda) ) * V ); assert( X(1,1), 1.58, 1e-2 ); assert( U(1,1), .158, 1e-3 ); assert( R(1,1), .158, 1e-3 ); # modified from the original example, as the reference above considers R as the residence time, not the response time assert( Q(1,1), .25, 1e-2 ); assert( Q, R.*X, 1e-5 ); # Little's Law ***** test # example 7.7 p. 304 Bolch et al. Please note that the book uses the # notation P(i,r,j,s) (i,j are service centers, r,s are job # classes) while the queueing package uses P(r,i,s,j) P = zeros(2,3,2,3); lambda = S = zeros(2,3); P(1,1,1,2) = 0.4; P(1,1,1,3) = 0.3; P(1,2,1,1) = 0.6; P(1,2,1,3) = 0.4; P(1,3,1,1) = 0.5; P(1,3,1,2) = 0.5; P(2,1,2,2) = 0.3; P(2,1,2,3) = 0.6; P(2,2,2,1) = 0.7; P(2,2,2,3) = 0.3; P(2,3,2,1) = 0.4; P(2,3,2,2) = 0.6; S(1,1) = 1/8; S(1,2) = 1/12; S(1,3) = 1/16; S(2,1) = 1/24; S(2,2) = 1/32; S(2,3) = 1/36; lambda(1,1) = lambda(2,1) = 1; V = qnomvisits(P,lambda); assert( V, [ 3.333 2.292 1.917; 10 8.049 8.415] ./ 2, 1e-3); [U R Q X] = qnom(sum(lambda,2), S, V); assert( sum(U,1), [0.833 0.442 0.354], 1e-3 ); # Note: the value of K_22 (corresponding to Q(2,2)) reported in the book # is 0.5. However, hand computation using the exact same formulas # from the book produces a different value, 0.451 assert( Q, [2.5 0.342 0.186; 2.5 0.451 0.362], 1e-3 ); ***** test P = zeros(2,2,2,2); P(1,1,1,2) = 0.8; P(1,2,1,1) = 1; P(2,1,2,2) = 0.9; P(2,2,2,1) = 1; S = zeros(2,2); S(1,1) = 1.5; S(1,2) = 1.2; S(2,1) = 0.8; S(2,2) = 2.5; lambda = zeros(2,2); lambda(1,1) = 1/20; lambda(2,1) = 1/30; [U1 R1 Q1 X1] = qnom(lambda, S, P); # qnom_cs [U2 R2 Q2 X2] = qnom(sum(lambda,2), S, qnomvisits(P,lambda)); # qnom_nocs assert( U1, U2, 1e-5 ); assert( R1, R2, 1e-5 ); assert( Q1, Q2, 1e-5 ); assert( X1, X2, 1e-5 ); ***** demo P = zeros(2,2,2,2); lambda = zeros(2,2); S = zeros(2,2); P(1,1,2,1) = P(1,2,2,1) = 0.2; P(1,1,2,2) = P(2,2,2,2) = 0.8; S(1,1) = S(1,2) = 0.1; S(2,1) = S(2,2) = 0.05; rr = 1:100; Xk = zeros(2,length(rr)); for r=rr lambda(1,1) = lambda(1,2) = 1/r; [U R Q X] = qnom(lambda,S,P); Xk(:,r) = sum(X,1)'; endfor plot(rr,Xk(1,:),";Server 1;","linewidth",2, ... rr,Xk(2,:),";Server 2;","linewidth",2); legend("boxoff"); xlabel("Class 1 interarrival time"); ylabel("Throughput"); 5 tests, 5 passed, 0 known failure, 0 skipped [inst/ctmctaexps.m] >>>>> /build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/inst/ctmctaexps.m ***** test Q = [ 0 0.1 0 0; ... 0.9 0 0.1 0; ... 0 0.9 0 0.1; ... 0 0 0 0 ]; Q -= diag( sum(Q,2) ); M = ctmctaexps(Q, [1 0 0 0]); assert( sum(M), 1, 10*eps ); ***** demo 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-5,30,100); p = zeros(1,N); p(1)=1; M = zeros(length(t),N); for i=1:length(t) M(i,:) = ctmctaexps(Q,t(i),p); endfor clf; 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"); legend("boxoff"); xlabel("Time"); ylabel("Time-averaged Expected sojourn time"); ***** demo 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(0,1*day,101); PP = ctmctaexps(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 clf; semilogy(TT,A,";Steady-state;", ... TT,At,";Instantaneous;", ... TT,Abart,";Interval base;"); ax = axis(); ax(3) = 1-1e-5; axis(ax); legend("boxoff"); 1 test, 1 passed, 0 known failure, 0 skipped [inst/qsmmmk.m] >>>>> /build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/inst/qsmmmk.m ***** test lambda = mu = m = 1; k = 10; [U R Q X p0] = qsmmmk(lambda,mu,m,k); assert( Q, k/2, 1e-7 ); assert( U, 1-p0, 1e-7 ); ***** test lambda = [1 0.8 2 9.2 0.01]; mu = lambda + 0.17; k = 12; [U1 R1 Q1 X1] = qsmm1k(lambda,mu,k); [U2 R2 Q2 X2] = qsmmmk(lambda,mu,1,k); assert( U1, U2, 1e-5 ); assert( R1, R2, 1e-5 ); assert( Q1, Q2, 1e-5 ); assert( X1, X2, 1e-5 ); #assert( [U1 R1 Q1 X1], [U2 R2 Q2 X2], 1e-5 ); ***** test lambda = 0.9; mu = 0.75; k = 10; [U1 R1 Q1 X1 p01] = qsmmmk(lambda,mu,1,k); [U2 R2 Q2 X2 p02] = qsmm1k(lambda,mu,k); assert( [U1 R1 Q1 X1 p01], [U2 R2 Q2 X2 p02], 1e-5 ); ***** test lambda = 0.8; mu = 0.85; m = 3; k = 5; [U1 R1 Q1 X1 p0] = qsmmmk( lambda, mu, m, k ); birth = lambda*ones(1,k); death = [ mu*linspace(1,m,m) mu*m*ones(1,k-m) ]; q = ctmc(ctmcbd( birth, death )); U2 = dot( q, min( 0:k, m )/m ); assert( U1, U2, 1e-4 ); Q2 = dot( [0:k], q ); assert( Q1, Q2, 1e-4 ); assert( p0, q(1), 1e-4 ); ***** test # This test comes from an example I found on the web lambda = 40; mu = 30; m = 3; k = 7; [U R Q X p0] = qsmmmk( lambda, mu, m, k ); assert( p0, 0.255037, 1e-6 ); assert( R, 0.036517, 1e-6 ); ***** test # This test comes from an example I found on the web lambda = 50; mu = 10; m = 4; k = 6; [U R Q X p0 pk] = qsmmmk( lambda, mu, m, k ); assert( pk, 0.293543, 1e-6 ); ***** test # This test comes from an example I found on the web lambda = 3; mu = 2; m = 2; k = 5; [U R Q X p0 pk] = qsmmmk( lambda, mu, m, k ); assert( p0, 0.179334, 1e-6 ); assert( pk, 0.085113, 1e-6 ); assert( Q, 2.00595, 1e-5 ); assert( R-1/mu, 0.230857, 1e-6 ); # waiting time in the queue ***** demo ## Given a M/M/m/K queue, compute the steady-state probability pn ## of having n jobs in the systen. lambda = 0.2; mu = 0.25; m = 5; K = 20; n = 0:10; pn = qsmmmk(lambda, mu, m, K, n); plot(n, pn, "-o", "linewidth", 2); xlabel("N. of jobs (n)"); ylabel("P_n"); title(sprintf("M/M/%d/%d system, \\lambda = %g, \\mu = %g", m, K, lambda, mu)); 7 tests, 7 passed, 0 known failure, 0 skipped [inst/qsmm1.m] >>>>> /build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/inst/qsmm1.m ***** test fail( "qsmm1(10,5)", "capacity exceeded" ); fail( "qsmm1(1,1)", "capacity exceeded" ); fail( "qsmm1([2 2], [1 1 1])", "incompatible size"); ***** test [U R Q X P0] = qsmm1(0, 1); assert( U, 0 ); assert( R, 1 ); assert( Q, 0 ); assert( X, 0 ); assert( P0, 1 ); ***** test [U R Q X P0] = qsmm1(0.2, 1.0); pk = qsmm1(0.2, 1.0, 0); assert(P0, pk); ***** demo ## Given a M/M/1 queue, compute the steady-state probability pk ## of having k requests in the systen. lambda = 0.2; mu = 0.25; k = 0:10; pk = qsmm1(lambda, mu, k); plot(k, pk, "-o", "linewidth", 2); xlabel("N. of requests (k)"); ylabel("p_k"); title(sprintf("M/M/1 system, \\lambda = %g, \\mu = %g", lambda, mu)); 3 tests, 3 passed, 0 known failure, 0 skipped [inst/dtmcmtta.m] >>>>> /build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/inst/dtmcmtta.m ***** test fail( "dtmcmtta(1,2,3)" ); fail( "dtmcmtta()" ); ***** test P = dtmcbd([0 .5 .5 .5], [.5 .5 .5 0]); [t N B] = dtmcmtta(P); assert( t, [0 3 4 3 0], 10*eps ); assert( B([2 3 4],[1 5]), [3/4 1/4; 1/2 1/2; 1/4 3/4], 10*eps ); assert( B(1,1), 1 ); assert( B(5,5), 1 ); ***** test P = dtmcbd([0 .5 .5 .5], [.5 .5 .5 0]); [t N B] = dtmcmtta(P); assert( t(3), 4, 10*eps ); assert( B(3,1), 0.5, 10*eps ); assert( B(3,5), 0.5, 10*eps ); ***** test P = dtmcbd([0 .5 .5 .5 .5], [.5 .5 .5 .5 0]); [t N B] = dtmcmtta(P); assert( t(2:5), [4 6 6 4], 100*eps ); assert( B(2:5,1), [.8 .6 .4 .2]', 100*eps ); assert( B(2:5,6), [.2 .4 .6 .8]', 100*eps ); ***** demo n = 6; P = zeros(101,101); for j=0:(100-n) i=1:n; P(1+j,1+j+i) = 1/n; endfor for j=(101-n):100 P(1+j,1+j) = (n-100+j)/n; endfor for j=(101-n):100 i=1:(100-j); P(1+j,1+j+i) = 1/n; endfor Pstar = P; ## setup snakes and ladders SL = [1 38; ... 4 14; ... 9 31; ... 16 6; ... 21 42; ... 28 84; ... 36 44; ... 47 26; ... 49 11; ... 51 67; ... 56 53; ... 62 19; ... 64 60; ... 71 91; ... 80 100; ... 87 24; ... 93 73; ... 95 75; ... 98 78 ]; for ii=1:rows(SL); i = SL(ii,1); j = SL(ii,2); Pstar(1+i,:) = 0; for k=0:100 if ( k != i ) Pstar(1+k,1+j) = P(1+k,1+j) + P(1+k,1+i); endif endfor Pstar(:,1+i) = 0; endfor Pstar += diag( 1-sum(Pstar,2) ); # spy(Pstar); pause nsteps = 250; # number of steps Pfinish = zeros(1,nsteps); # Pfinish(i) = probability of finishing after step i pstart = zeros(1,101); pstart(1) = 1; pn = pstart; for i=1:nsteps pn = pn*Pstar; Pfinish(i) = pn(101); # state 101 is the ending (absorbing) state endfor f = dtmcmtta(Pstar,pstart); printf("Average number of steps to complete 'snakes and ladders': %f\n", f ); plot(Pfinish,"linewidth",2); line([f,f],[0,1]); text(f*1.1,0.2,["Mean Time to Absorption (" num2str(f) ")"]); xlabel("Step number (n)"); title("Probability of finishing 'snakes and ladders' before step n"); ***** 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 = dtmcmtta(P); assert( t, [6 5 6 5 0 5 6 5 6], 10*eps ); 5 tests, 5 passed, 0 known failure, 0 skipped [inst/qncsgb.m] >>>>> /build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/inst/qncsgb.m ***** test fail( "qncsgb( 1, [] )", "vector" ); fail( "qncsgb( 1, [0 -1])", "nonnegative" ); fail( "qncsgb( 0, [1 2] )", "> 0" ); fail( "qncsgb( -1, [1 2])", "nonnegative" ); fail( "qncsgb( 1, [1 2],1,[1 -1])", "single server" ); ***** # shared test function ***** function test_gb( D, expected, Z=0 ) for i=1:rows(expected) N = expected(i,1); [X_lower X_upper Q_lower Q_upper] = qncsgb(N,D,1,1,Z); X_exp_lower = expected(i,2); X_exp_upper = expected(i,3); assert( [N X_lower X_upper], [N X_exp_lower X_exp_upper], 1e-4 ) endfor ***** xtest # table IV D = [ 0.1 0.1 0.09 0.08 ]; # N X_lower X_upper expected = [ 2 4.3040 4.3174; ... 5 6.6859 6.7524; ... 10 8.1521 8.2690; ... 20 9.0947 9.2431; ... 80 9.8233 9.8765 ]; test_gb(D, expected); !!!!! known failure ASSERT errors for: assert ([N, X_lower, X_upper],[N, X_exp_lower, X_exp_upper],1e-4) Location | Observed | Expected | Reason (3) 4.3813 4.3174 Abs err 0.063891 exceeds tol 0.0001 by 0.06 ***** xtest # table V D = [ 0.1 0.1 0.09 0.08 ]; Z = 1; # N X_lower X_upper expected = [ 2 1.4319 1.5195; ... 5 3.3432 3.5582; ... 10 5.7569 6.1410; ... 20 8.0856 8.6467; ... 80 9.7147 9.8594]; test_gb(D, expected, Z); !!!!! known failure ASSERT errors for: assert ([N, X_lower, X_upper],[N, X_exp_lower, X_exp_upper],1e-4) Location | Observed | Expected | Reason (3) 1.5219 1.5195 Abs err 0.0023822 exceeds tol 0.0001 by 0.002 ***** test P = [0 0.3 0.7; 1 0 0; 1 0 0]; S = [1 0.6 0.2]; m = ones(1,3); V = qncsvisits(P); Z = 2; Nmax = 20; tol = 1e-5; # compensate for numerical errors ## Test case with Z>0 for n=1:Nmax [X_gb_lower X_gb_upper NC NC Q_gb_lower Q_gb_upper] = qncsgb(n, S.*V, 1, 1, Z); [U R Q X] = qnclosed( n, S, V, m, Z ); X_mva = X(1)/V(1); 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 P = [0 0.3 0.7; 1 0 0; 1 0 0]; S = [1 0.6 0.2]; V = qncsvisits(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 NC NC Q_gb_lower Q_gb_upper] = qncsgb(n, S.*V); [U R Q X] = qnclosed( n, S, V ); X_mva = X(1)/V(1); 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 5 tests, 3 passed, 2 known failures, 0 skipped [inst/dtmcchkP.m] >>>>> /build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/inst/dtmcchkP.m ***** test [r err] = dtmcchkP( [1 1 1; 1 1 1] ); assert( r, 0 ); assert( index(err, "square") > 0 ); ***** test [r err] = dtmcchkP( [1 0 0; 0 0.5 0; 0 0 0] ); assert( r, 0 ); assert( index(err, "stochastic") > 0 ); ***** test P = [0 1; 1 0]; assert( dtmcchkP(P), 2 ); ***** test P = dtmcbd( linspace(0.1,0.4,10), linspace(0.4,0.1,10) ); assert( dtmcchkP(P), rows(P) ); ***** test N = 1000; P = reshape( 1:N^2, N, N ); P(1:N+1:end) = 0; P = P ./ repmat(sum(P,2),1,N); assert( dtmcchkP(P), N ); 5 tests, 5 passed, 0 known failure, 0 skipped [inst/qncmmvabs.m] >>>>> /build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/inst/qncmmvabs.m ***** test S = [ 1 3 3; 2 4 3]; V = [ 1 1 3; 1 1 3]; N = [ 1 1 ]; m = [1 ; 1 ]; Z = [2 2 2]; fail( "qncmmvabs(N,S,V,m,Z)", "m must be" ); m = [1 ; 1 ; 1]; fail( "qncmmvabs(N,S,V,m,Z)", "Z must be" ); ***** test S = [ 1 3; 2 4]; V = [ 1 1; 1 1]; N = [ 1 1 ]; m = ones(1,2); [U R Q X] = qncmmvabs(N,S,V,m); assert( Q, [ .192 .808; .248 .752 ], 1e-3 ); Xc = ( X(:,1)./V(:,1) )'; assert( Xc, [ .154 .104 ], 1e-3 ); # Compute the (overall) class-c system response time R_c = N ./ Xc; assert( R_c, [ 6.508 9.614 ], 5e-3 ); ***** demo 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] = qncmmvabs(N,S,V,m); 2 tests, 2 passed, 0 known failure, 0 skipped [inst/ctmcchkQ.m] >>>>> /build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/inst/ctmcchkQ.m ***** test Q = [0]; [result err] = ctmcchkQ(Q); assert( result, 1 ); assert( err, "" ); ***** test N = 10; Q = ctmcbd(rand(1,N-1),rand(1,N-1)); [result err] = ctmcchkQ(Q); assert( result, N ); assert( err, "" ); ***** test Q = [1 2 3; 4 5 6]; [result err] = ctmcchkQ(Q); assert( result, 0 ); assert( index(err, "square") > 0 ); ***** test N = 10; Q = ctmcbd(rand(1,N-1),rand(1,N-1)); Q(2,1) = -1; [result err] = ctmcchkQ(Q); assert( result, 0 ); assert( index(err, "infinitesimal") > 0 ); ***** test N = 10; Q = ctmcbd(linspace(1,N-1,N-1),linspace(1,N-1,N-1)); Q(1,1) += 7; [result err] = ctmcchkQ(Q); assert( result, 0 ); assert( index(err, "infinitesimal") > 0 ); 5 tests, 5 passed, 0 known failure, 0 skipped [inst/qnmix.m] >>>>> /build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/inst/qnmix.m ***** test lambda = [1 0 0]; N = [1 1 1]; S = V = [1 1 1; 1 1 1; 1 1 1]; fail( "qnmix( lambda, N, S, V)", "same time"); N = [0 0 1]; fail( "qnmix( lambda, N, S, V)", "open nor closed" ); N = [0 1 2]; m = [ 1 1 2 ]; fail( "qnmix( lambda, N, S, V, m)", "single-server and delay" ); S = V = [1 1 1; 1 1 1]; fail( "qnmix( lambda, N, S, V)", "rows" ); ***** test # Example p. 148 Zahorjan et al. lambda = [1 1/2 0 0]; N = [0 0 1 1]; V = [1 1; 1 1; 1 1; 1 1]; S = [1/4 1/6; 1/2 1; 1/2 1; 1 4/3]; [U R Q X] = qnmix(lambda, N, S, V ); assert( Q(3,1), 4/19, 1e-4 ); assert( Q(3,2), 15/19, 1e-4 ); assert( Q(4,1), 5/19, 1e-4 ); assert( Q(4,2), 14/19, 1e-4 ); assert( Q, R.*X, 1e-5 ); # Little's Law ***** test # Example 8.6 p. 345 Bolch et al. lambda = [0.5 0.25 0 0]; N = [0 0 1 1]; V = [2 1; 2.5 1.5; 1 0.5; 1 0.4]; S = [0.4 0.6; 0.8 1.6; 0.3 0.5; 0.5 0.8]; [U R Q X] = qnmix( lambda, N, S, V ); assert( U([1 2],:), [0.4 0.3; 0.5 0.6], 1e-3 ); assert( R([3 4],:), [4.829 6.951; 7.727 11.636], 1e-3 ); assert( Q([3 4],:), [0.582 0.418; 0.624 0.376], 1e-3 ); assert( Q([1 2],:), [8.822 5.383; 11.028 10.766], 1e-3 ); #FIXME assert( R([1 2],:), [8.822 10.766; 17.645 28.710], 1e-3 ); assert( X(3,1)/V(3,1), 0.120, 1e-3 ); assert( X(4,1)/V(4,1), 0.081, 1e-3 ); assert( Q, R.*X, 1e-5 ); # Little's Law ***** test ## example figure 10 p. 26 Schwetman, "Implementing the Mean Value ## Analysis for the Solution of Queueing Network Models", Technical ## Report CSD-TR-355, feb 15, 1982, Purdue University. S = [.25 0; .25 .10]; V = [1 0; 1 1]; lambda = [1 0]; N = [0 3]; [U R Q X] = qnmix( lambda, N, S, V ); assert( U(1,1), .25, 1e-3 ); assert( X(1,1), 1.0, 1e-3 ); assert( [R(1,1) R(2,1) R(2,2)], [1.201 0.885 0.135], 1e-3 ); assert( Q, R.*X, 1e-5 ); # Little's Law 4 tests, 4 passed, 0 known failure, 0 skipped [inst/erlangc.m] >>>>> /build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/inst/erlangc.m ***** test fail("erlangc('foo',1)", "positive"); fail("erlangc(1,'bar')", "positive"); 1 test, 1 passed, 0 known failure, 0 skipped [inst/qnmarkov.m] >>>>> /build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/inst/qnmarkov.m ***** test S = [5 2.5]; P = [0 1; 1 0]; C = [3 3]; m = [1 1]; [U R Q X] = qnmarkov( 3, S, C, P, m ); assert( U, [0.9333 0.4667], 1e-4 ); assert( X, [0.1867 0.1867], 1e-4 ); assert( R, [12.1429 3.9286], 1e-4 ); ***** test S = [1/0.8 1/0.6 1/0.4]; P = [0.6 0.3 0.1; 0.2 0.3 0.5; 0.4 0.1 0.5]; C = [3 3 3]; [U R Q X] = qnmarkov( 3, S, C, P ); assert( U, [0.543 0.386 0.797], 1e-3 ); assert( Q, [0.873 0.541 1.585], 1e-3 ); ***** xtest S = [2 0.9]; C = [7 5]; P = [0 1; 1 0]; [U R Q X] = qnmarkov( 10, S, C, P ); assert( Q, [6.73 3.27], 1e-3 ); !!!!! known failure ASSERT errors for: assert (Q,[6.73, 3.27],1e-3) Location | Observed | Expected | Reason (1) 6.4826 6.73 Abs err 0.2474 exceeds tol 0.001 by 0.2 (2) 3.5174 3.27 Abs err 0.2474 exceeds tol 0.001 by 0.2 ***** test S = [1/0.8 1/0.6 1/0.4]; P = [(1-0.667-0.2) 0.667 0.2; 1 0 0; 1 0 0]; m = [2 3 1]; C = [3 3 3]; [U R Q X] = qnmarkov( 3, S, C, P, m ); assert( U, [0.590 0.350 0.473], 1e-3 ); assert( Q(1:2), [1.290 1.050], 1e-3 ); ***** test p = 0.5; # transition prob. from S2 to S1 mu = [1 2]; # Service rates C = [2 1]; # Capacities lambda = [0.5 0]; # arrival rate at service center 1 PP = [ 0 1; p 0 ]; [U R Q X] = qnmarkov( lambda, 1./mu, C, PP ); ## Now we generate explicitly the infinitesimal generator matrix ## of the underlying MC. ## 00 01 10 11 20 21 QQ = [ 0 0 lambda(1) 0 0 0; ... ## 00 mu(2)*(1-p) 0 mu(2)*p lambda(1) 0 0; ... ## 01 0 mu(1) 0 0 lambda(1) 0; ... ## 10 0 0 mu(2)*(1-p) 0 mu(2)*p lambda(1); ... ## 11 0 0 0 mu(1) 0 0; ... ## 20 0 0 0 0 mu(2)*(1-p) 0 ]; ## 21 ## Complete matrix sum_el = sum(QQ,2); QQ -= diag(sum_el); q = ctmc(QQ); ## Compare results assert( U(1), 1-sum(q([1, 2])), 1e-5 ); assert( U(2), 1-sum(q([1,3,5])), 1e-5 ); ***** test P = [0 0.5 0.5; 1 0 0; 1 0 0]; C = [6 6 6]; S = [1 0.8 1.8]; N = 6; [U1 R1 Q1 X1] = qnclosed( N, S, qncsvisits(P) ); [U2 R2 Q2 X2] = qnmarkov( N, S, C, P ); assert( U1, U2, 1e-6 ); assert( R1, R2, 1e-6 ); assert( Q1, Q2, 1e-6 ); assert( X1, X2, 1e-6 ); 6 tests, 5 passed, 1 known failure, 0 skipped [inst/qncsconv.m] >>>>> /build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/inst/qncsconv.m ***** test # Example 8.1 p. 318 Bolch et al. K=3; S = [ 1/0.8 1/0.6 1/0.4 ]; m = [2 3 1]; V = [ 1 .667 .2 ]; [U R Q X G] = qncsconv( K, S, V, m ); assert( G, [1 2.861 4.218 4.465], 5e-3 ); assert( X, [0.945 0.630 0.189], 1e-3 ); assert( U, [0.590 0.350 0.473], 1e-3 ); assert( Q, [1.290 1.050 0.660], 1e-3 ); assert( R, [1.366 1.667 3.496], 1e-3 ); ***** test # Example 8.3 p. 331 Bolch et al. # compare results of convolution to those of mva S = [ 0.02 0.2 0.4 0.6 ]; K = 6; V = [ 1 0.4 0.2 0.1 ]; [U_mva R_mva Q_mva X_mva G_mva] = qncsmva(K, S, V); [U_con R_con Q_con X_con G_con] = qncsconv(K, S, V); assert( U_mva, U_con, 1e-5 ); assert( R_mva, R_con, 1e-5 ); assert( Q_mva, Q_con, 1e-5 ); assert( X_mva, X_con, 1e-5 ); assert( G_mva, G_con, 1e-5 ); ***** test # Compare the results of convolution to those of mva S = [ 0.02 0.2 0.4 0.6 ]; K = 6; V = [ 1 0.4 0.2 0.1 ]; m = [ 1 -1 2 1 ]; # center 2 is IS [U_mva R_mva Q_mva X_mva] = qncsmva(K, S, V, m); [U_con R_con Q_con X_con G] = qncsconv(K, S, V, m ); assert( U_mva, U_con, 1e-5 ); assert( R_mva, R_con, 1e-5 ); assert( Q_mva, Q_con, 1e-5 ); assert( X_mva, X_con, 1e-5 ); ***** demo n = [1 2 0]; N = sum(n); # 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] = qncsconv( N, S, V, m ); p = [0 0 0]; # initialize p # Compute the probability to have n(k) jobs at service center k for k=1:3 p(k) = (V(k)*S(k))^n(k) / G(N+1) * ... (G(N-n(k)+1) - V(k)*S(k)*G(N-n(k)) ); printf("Prob( n(%d) = %d )=%f\n", k, n(k), p(k) ); endfor 3 tests, 3 passed, 0 known failure, 0 skipped [inst/qncmpopmix.m] >>>>> /build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/inst/qncmpopmix.m ***** demo N = [2 3]; mix = qncmpopmix(3, N) ***** test N = [-1 2 2]; fail( "qncmpopmix(1, N)" ); ***** test N = [2 2 2]; fail( "qncmpopmix(7, N)" ); ***** test N = [2 3 4]; f = qncmpopmix(0, N ); assert( f, [0 0 0] ); f = qncmpopmix( 1, N ); assert( f, [1 0 0; 0 1 0; 0 0 1] ); f = qncmpopmix( 2, N ); assert( f, [2 0 0; 1 1 0; 0 2 0; 1 0 1; 0 1 1; 0 0 2] ); f = qncmpopmix( 3, N ); assert( f, [2 1 0; 1 2 0; 0 3 0; 2 0 1; 1 1 1; 0 2 1; 1 0 2; 0 1 2; 0 0 3] ); ***** test N = [2 1]; f = qncmpopmix( 1, N ); assert( f, [1 0; 0 1] ); f = qncmpopmix( 2, N ); assert( f, [2 0; 1 1] ); 4 tests, 4 passed, 0 known failure, 0 skipped [inst/erlangb.m] >>>>> /build/octave-queueing-lVNuyQ/octave-queueing-1.2.7/inst/erlangb.m ***** test fail("erlangb(1, -1)", "positive"); fail("erlangb(-1, 1)", "positive"); fail("erlangb(1, 0)", "positive"); fail("erlangb(0, 1)", "positive"); fail("erlangb('foo',1)", "positive"); fail("erlangb(1,'bar')", "positive"); fail("erlangb([1 1],[1 1 1])","common size"); 1 test, 1 passed, 0 known failure, 0 skipped Checking C++ files ... Summary: 198 tests, 195 passed, 3 known failures, 0 skipped dh_installdocs -i -O--buildsystem=octave dh_installchangelogs -i -O--buildsystem=octave dh_octave_changelogs -i -O--buildsystem=octave dh_octave_examples -i -O--buildsystem=octave dh_installinfo -i -O--buildsystem=octave dh_installsystemduser -i -O--buildsystem=octave dh_perl -i -O--buildsystem=octave dh_link -i -O--buildsystem=octave dh_strip_nondeterminism -i -O--buildsystem=octave dh_compress -i -O--buildsystem=octave dh_fixperms -i -O--buildsystem=octave dh_missing -i -O--buildsystem=octave dh_octave_substvar -i -O--buildsystem=octave dh_installdeb -i -O--buildsystem=octave dh_gencontrol -i -O--buildsystem=octave dh_md5sums -i -O--buildsystem=octave dh_builddeb -i -O--buildsystem=octave dpkg-deb: building package 'octave-queueing' in '../octave-queueing_1.2.7-3_all.deb'. dpkg-genbuildinfo --build=all dpkg-genchanges --build=all >../octave-queueing_1.2.7-3_all.changes dpkg-genchanges: info: binary-only arch-indep upload (source code and arch-specific packages not included) dpkg-source --after-build . dpkg-source: info: using options from octave-queueing-1.2.7/debian/source/options: --extend-diff-ignore=doc/INSTALL|doc/.*\.png|doc/.*\.pdf|doc/queueing\.html dpkg-buildpackage: info: binary-only upload (no source included) I: running special hook: sync-out /build/octave-queueing-lVNuyQ /tmp/octave-queueing-1.2.7-3fgs65qpz I: cleaning package lists and apt cache... I: creating tarball... I: done I: removing tempdir /tmp/mmdebstrap.oWa5KFf_5z... I: success in 1044.3358 seconds md5: octave-queueing_1.2.7-3_all.deb: OK sha1: octave-queueing_1.2.7-3_all.deb: OK sha256: octave-queueing_1.2.7-3_all.deb: OK Checksums: OK