用Matlab模拟一个缓冲区大小为10的随机排队系统
function p=queue(mu,lamda)
customer=zeros(1000,6); ? ? ? ? ? ? ? ? ? ? ? ? %每一行代表是一位顧客,每一行的每一列所代表的意思如下所示
NO=1; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? %/*編號*/
intime=2; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? %/*進入隊列時間*/
intertime=3; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?%/*他的下一個人到來的時間間隔*/
starttime=4; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?%/*開始接受服務時間*/
durtime=5; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?%/*服務所需時間*/
leavetime=6; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?%/*離開隊列的時間*/
flag=1; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? %初始化flag=1,當flag=1時,采用泊松和指數分布,當flag=0時,采用平均和瑞利分布
%*********************************InitQueue();%初始化隊列***********************
queue_customernum=0; ? ? ? ? ? ? ? ? ? ? ? ? ? ?%/*隊列中接受服務的顧客數*/
curtime=1; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?%/*當前時間*/
first=0; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?%/*當前接受服務的顧客的編號*/
last=0; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? %/*當前隊列最后一位顧客的編號*/
totalnum=0; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? %/*進入隊列的總的顧客數*/
cusnum=zeros(1,100); ? ? ? ? ? ? ? ? ? ? ? ? ? ?%/*存放觀察到的隊列中接受服務的顧客數*/
p=zeros(1,11); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?%/*存放觀察到的隊列中接受服務的某個顧客數的出現的次數*/
%********************************customer_in();%顧客進入隊列*******************
if queue_customernum~=10
? ? totalnum=totalnum+1;
?? ?queue_customernum=queue_customernum+1;
? ? customer(totalnum,NO)=totalnum;
? ? customer(totalnum,intime)=curtime; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?%/*記錄顧客進入時間*/
? ??
? ? if flag==1
? ? ? ? customer(totalnum,durtime)=poissrnd(mu,1,1); ? ? ? ? ? ? ? ? ? ? ? %/*產生隨機數記錄顧客服務所需時間*/ 泊松分布
? ? ? ? customer(totalnum,intertime)=round(exprnd(lamda,1,1)*10); ? ? ? ? ?%/*此顧客的下一個顧客來的時間間隔*/ 指數分布
? ? else
? ? ? ? customer(totalnum,durtime)=unidrnd(mu,1,1); ? ? ? ? ? ? ? ? ? ? ? ? %/*產生隨機數記錄顧客服務所需時間*/ 均勻分布
? ? ? ? customer(totalnum,intertime)=round(raylrnd(lamda,1,1)*10); ? ? ? ? ?%/*此顧客的下一個顧客來的時間間隔*/ 瑞利分布
? ? end
?? ?last=last+1;
else
? ? customer(totalnum,intertime)=customer(totalnum,intertime)+1;
end
%*****************************customer_serve();%顧客接受服務********************
first=first+1;
customer(first,starttime)=curtime; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?%/*得出開始服務時間和離開時間*/
customer(first,leavetime)=customer(first,durtime)+curtime;
%**************************************************************************
while curtime<=1000 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? %/*當前時間屬于營業時間,允許顧客進入*/
? ? ?curtime=curtime+1;
? ? ?if customer(first,leavetime)==curtime
?? ??? ?%customer_leave();%顧客離開隊列
? ? ? ? queue_customernum=queue_customernum-1;?
? ? ? ??
?? ??? ?%customer_serve();%顧客接受服務
? ? ? ? first=first+1;
? ? ? ? customer(first,starttime)=curtime; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?%/*得出開始服務時間和離開時間*/
? ? ? ? customer(first,leavetime)=customer(first,durtime)+curtime;
? ? ? ??
? ? ?end
? ? ?
? ? ?if (customer(last,intime)+customer(last,intertime))==curtime
?? ??? ?%customer_in(); %顧客進入隊列 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? %/*判斷是否有人符合要進的條件*/
? ? ? ? if queue_customernum~=10
? ? ? ? ? ? ? ? totalnum=totalnum+1;
? ? ? ? ? ? ? ? queue_customernum=queue_customernum+1;
? ? ? ? ? ? ? ? customer(totalnum,NO)=totalnum;
? ? ? ? ? ? ? ? customer(totalnum,intime)=curtime; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?%/*記錄顧客進入時間*/
? ? ? ? ? ? ? ? if flag==1
? ? ? ? ? ? ? ? ? ? customer(totalnum,durtime)=poissrnd(mu,1,1); ? ? ? ? ? ? ? ? ? %/*產生隨機數記錄顧客服務所需時間*/ 泊松分布
? ? ? ? ? ? ? ? ? ? customer(totalnum,intertime)=round(exprnd(lamda,1,1)*10); ? ? ?%/*此顧客的下一個顧客來的時間間隔*/ 指數分布
? ? ? ? ? ? ? ? else
? ? ? ? ? ? ? ? ? ? customer(totalnum,durtime)=unidrnd(mu,1,1); ? ? ? ? ? ? ? ? ? ? %/*產生隨機數記錄顧客服務所需時間*/ 均勻分布
? ? ? ? ? ? ? ? ? ? customer(totalnum,intertime)=round(raylrnd(lamda,1,1)*10); ? ? ?%/*此顧客的下一個顧客來的時間間隔*/ 瑞利分布
? ? ? ? ? ? ? ? end
? ? ? ? ? ? ? ? last=last+1;
? ? ? ? else
? ? ? ? ? ? customer(totalnum,intertime)=customer(totalnum,intertime)+1;
? ? ? ? end
? ? ? ??
? ? ?end
? ? ?
?? ? if rem(curtime,10)==0
?? ??? ? cusnum(1,curtime/10)=queue_customernum;
? ? ?end
end
%************************probability();%計算隊列中顧客數為(0,1,。。。,10)時的概率**********
? for i=1:1:100
?? ?if cusnum(1,i)==0
? ? ? ? p(1,1)=p(1,1)+1;
? ? elseif cusnum(1,i)==1
?? ??? ?p(1,2)=p(1,2)+1;?? ?
? ? elseif cusnum(1,i)==2
?? ??? ?p(1,3)=p(1,3)+1;
? ? elseif cusnum(1,i)==3
?? ??? ?p(1,4)=p(1,4)+1;
? ? elseif cusnum(1,i)==4
?? ??? ?p(1,5)=p(1,5)+1;
? ? elseif cusnum(1,i)==5
?? ??? ?p(1,6)=p(1,6)+1;
? ? elseif cusnum(1,i)==6
?? ??? ?p(1,7)=p(1,7)+1;
? ? elseif cusnum(1,i)==7
?? ??? ?p(1,8)=p(1,8)+1;
? ? elseif cusnum(1,i)==8
?? ??? ?p(1,9)=p(1,9)+1;
? ? elseif cusnum(1,i)==9
?? ??? ?p(1,10)=p(1,10)+1;
? ? elseif cusnum(1,i)==10
?? ??? ?p(1,11)=p(1,11)+1;
? ? end
? end
??
%***************************list();%打印結果****************************
? for j=1:1:11
? ? p(1,j)=p(1,j)/100;
? end
??
? D118
?
總結
以上是生活随笔為你收集整理的用Matlab模拟一个缓冲区大小为10的随机排队系统的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用matlab模拟、检验和估计泊松过程
- 下一篇: VOIP业务仿真建模,使用间歇泊松过程模