i=i+1;%jumpup:
acustomerarrives
else
i=i-1;%jumpdown:
acustomerisdeparting
end%if
systsize(k)=i;%systemsizeattimei
tjump(k)=time;
end%fori
tjump=cumsum(tjump);%cumulativejumptimes
stairs(tjump,systsize);
③M/D/1系统
%function[jumptimes,systsize]=simmd1(tmax,lambda)
%SIMMD1simulateaM/D/1queueingsystem.Poissonarrivals
%ofintensitylambda,deterministicservicetimesS=1.
%[jumptimes,systsize]=simmd1(tmax,lambda)
%Inputs:
tmax-simulationinterval
%lambda-arrivalintensity
%Outputs:
jumptimes-timepointsofarrivalsordepartures
%systsize-systemsizeinM/D/1queue
%systtime-systemtimes
%Authors:
%v1.207-Oct-02
%setdefaultparametervaluesifommited
Ⅰ:
nargin=0
nargin=0;
if(nargin==0)
tmax=1500;
lambda=0.95;
end
arrtime=-log(rand)/lambda;%Poissonarrivals
i=1;
while(min(arrtime(i,:
))<=tmax)
arrtime=[arrtime;arrtime(i,:
)-log(rand)/lambda];
i=i+1;
end
n=length(arrtime);%arrivaltimest_1,...t_n
arrsubtr=arrtime-(0:
n-1)';%t_k-(k-1)
arrmatrix=arrsubtr*ones(1,n);
deptime=(1:
n)+max(triu(arrmatrix));%departuretimes
%u_k=k+max(t_1,..,t_k-k+1)
B=[ones(n,1)arrtime;-ones(n,1)deptime'];
Bsort=sortrows(B,2);%sortjumpsinorder
jumps=Bsort(:
1);
jumptimes=[0;Bsort(:
2)];
systsize=[0;cumsum(jumps)];%M/D/1process
systtime=deptime-arrtime';%systemtimes
%plotahistogramofsystemtimes
hist(systtime,30);
Ⅱ:
nargin不为0
%function[jumptimes,systsize]=simmd1(tmax,lambda)
%SIMMD1simulateaM/D/1queueingsystem.Poissonarrivals
%ofintensitylambda,deterministicservicetimesS=1.
%
%[jumptimes,systsize]=simmd1(tmax,lambda)
%
%Inputs:
tmax-simulationinterval
%lambda-arrivalintensity
%Outputs:
jumptimes-timepointsofarrivalsordepartures
%systsize-systemsizeinM/D/1queue
%systtime-systemtimes
%Authors:
%v1.207-Oct-02
%setdefaultparametervaluesifommited
nargin=2;
if(nargin==0)
tmax=1500;
lambda=0.95;
end
arrtime=-log(rand)/lambda;%Poissonarrivals
i=1;
while(min(arrtime(i,:
))<=tmax)
arrtime=[arrtime;arrtime(i,:
)-log(rand)/lambda];
i=i+1;
end
n=length(arrtime);%arrivaltimest_1,...t_n
arrsubtr=arrtime-(0:
n-1)';%t_k-(k-1)
arrmatrix=arrsubtr*ones(1,n);
deptime=(1:
n)+max(triu(arrmatrix));%departuretimes
%u_k=k+max(t_1,..,t_k-k+1)
B=[ones(n,1)arrtime;-ones(n,1)deptime'];
Bsort=sortrows(B,2);%sortjumpsinorder
jumps=Bsort(:
1);
jumptimes=[0;Bsort(:
2)];
systsize=[0;cumsum(jumps)];%M/D/1process
systtime=deptime-arrtime';%systemtimes
%plotahistogramofsystemtimes
hist(systtime,30);
④M/G/infinity系统
%function[jumptimes,systsize]=simmginfty(tmax,lambda)
%SIMMGINFTYsimulateaM/G/infinityqueueingsystem.Arrivalsare
%ahomogeneousPoissonprocessofintensitylambda.Servicetimes
%Paretodistributed(canbemodified).
%[jumptimes,systsize]=simmginfty(tmax,lambda)%
%Inputs:
tmax-simulationinterval
%lambda-arrivalintensity
%Outputs:
jumptimes-timesofstatechangesinthesystem
%systsize-numberofcustomersinsystem
%SeeSIMSTMGINFTY,SIMGEOD1,SIMMM1,SIMMD1,SIMMG1.
%setdefaultparametervaluesifommited
Ⅰ:
nargin=0
nargin=0;
if(nargin==0)
tmax=1500;
lambda=1;
end
%generatePoissonarrivals
%thenumberofpointsisPoisson-distributed
npoints=poissrnd(lambda*tmax);
%conditionedthatnumberofpointsisN,
%thepointsareuniformlydistributed
if(npoints>0)
arrt=sort(rand(npoints,1)*tmax);
else
arrt=[];
end
%uncommentifnotavailablePOISSONRND
%generatePoissonarrivals
%arrt=-log(rand)/lambda;
%i=1;
%while(min(arrt(i,:
))<=tmax)
%arrt=[arrt;arrt(i,:
)-log(rand)/lambda];
%i=i+1;
%end
%npoints=length(arrt);%arrivaltimest_1,...,t_n
%servt=50.*rand(n,1);%uniformservicetimess_1,...,s_k
alpha=1.5;%Paretoservicetimes
servt=rand^(-1/(alpha-1))-1;%stationaryrenewalprocess
servt=[servt;rand(npoints-1,1).^(-1/alpha)-1];servt=10.*servt;%arbitrarychoiceofmean
dept=arrt+servt;%departuretimes
%OutputissystemsizeprocessN.
B=[ones(npoints,1)arrt;-ones(npoints,1)dept];
Bsort=sortrows(B,2);%sortjumpsinorder
jumps=Bsort(:
1);
jumptimes=[0;Bsort(:
2)];
systsize=[0;cumsum(jumps)];%M/G/infinitysystemsize
%process
stairs(jumptimes,systsize);
xmax=max(systsize)+5;
axis([0tmax0xmax]);
grid
Ⅱ:
nargin不为0时
%function[jumptimes,systsize]=simmginfty(tmax,lambda)
%SIMMGINFTYsimulateaM/G/infinityqueueingsystem.Arrivalsare
%ahomogeneousPoissonprocessofintensitylambda.Servicetimes
%Paretodistributed(canbemodified).
%[jumptimes,systsize]=simmginfty(tmax,lambda)%
%Inputs:
tmax-simulationinterval
%lambda-arrivalintensity
%Outputs:
jumptimes-timesofstatechangesinthesystem
%systsize-numberofcustomersinsystem
%SeeSIMSTMGINFTY,SIMGEOD1,SIMMM1,SIMMD1,SIMMG1.
%setdefaultparametervaluesifommited
nargin=2;
if(nargin==0)
tmax=1500;
lambda=1;
end
%generatePoissonarrivals
%thenumberofpointsisPoisson-distributed
npoints=poissrnd(lambda*tmax);
%conditionedthatnumberofpointsisN,
%thepointsareun