ns2通信网仿真作业2.docx
《ns2通信网仿真作业2.docx》由会员分享,可在线阅读,更多相关《ns2通信网仿真作业2.docx(14页珍藏版)》请在冰豆网上搜索。
ns2通信网仿真作业2
《通信网仿真与ns仿真器》作业报告
学院:
计算机学院班级:
10班姓名:
张晓磊学号:
1011041036
专业:
计算机软件与理论
几种排队机模型的性能分析与仿真
1.研究背景介绍
排队的现象,存在于当今世界一切经济之中,如果没有更好的办法配置时间资源.排队就可能是最公平的解决办法。
但是长期以来,人们在服务大厅里办理各项服务业务时,排队等候人数过多,前拥后挤的排队等候,有时排队在一小时以上甚至更久,极大的不方便办理业务的顾客。
而排队机系统的出现极大地改善了服务质量,解决了劳累的排队现象,很好地解决客户在办理业务中所遇到的排队、等候、拥挤和混乱等现象,真正创造舒适、公平、友好的等候环境而提供的服务终端。
基于排队机系统的应用背景,本课题主要研究几种应用于排队机系统的排队机模型,分别是M/M/1计算模型、M/D/1计算模型、D/D/1计算模型,与此同时分别对它们的性能进行分析,最后对3种计算模型在NS2仿真器的辅助下,编写仿真程序进行仿真,来更直观地了解3种计算模型的性能。
2.几种典型的排队机模型性能分析
2.1排队系统的基本组成
一般的排队系统都有三个基本组成部分:
(1)输入过程;
(2)排队规则;(3)服务机构。
(1)输入过程:
输入即指顾客到达排队系统,可能有下列各种不同情况,当然这些情况并不是彼此排斥的。
顾客的总体(称为顾客源)的组成可能是有限的,也可能是无限的。
顾客到来的方式可能是一个一个的,也可能是成批的。
顾客相继到达的间隔时间可以是确定型的,也可以是随机型的。
顾客的到达可以是相互独立的。
就是说,以前的到达情况对以后顾客的到来没有影响,否则就是有关联的。
输入过程可以是平稳的,或称对时间是齐次的,是指描述相继到达的间隔时间分布和所含参数(如期望,方差)都是与时间无关的,否则称为非平稳的。
(2)排队规则:
顾客到达时,如所有服务台都正被占用,在这种情形下顾客可以随即离去,也可以排队等候。
前者称为即时制或损失制,排队等候的称为等待制。
等待制可以采用先到先服务规则;后到先服务规则;随机服务规则;有优先权规则。
(3)服务机构:
(A)服务机构可以没有服务台(服务员),也可以有一个或多个。
(B)在有多个服务台的情形中,它们可以是平行排列、先后排列和混合排列。
(C)服务方式是,可以对单个顾客进行,也可以成批顾客进行。
(D)和输入过程一样,服务时间也分确定型和随机型。
(E)和输入过程一样,服务时间的分布我们总假定是平稳的,即分布的期望值、方差等参数都不受时间的影响。
2.2排队机模型的分类
排队模型按主要特征进行分类。
一般是以相继顾客到达系统的间隔时间分布、服务时间的分布和服务台数目为分类标志。
现代常用的分类方法是英国数学家D.G.肯德尔提出的分类方法,即用肯德尔记号X/Y/Z进行分类。
X处填写相继到达间隔时间的分布;Y处填写服务时间分布;Z处填写并列的服务台数目。
目前典型的排队机模型有M/M/1,M/D/1和D/D/1(其中,M表示到达过程为泊松过程或负指数分布;D表示定长输入)。
其中,D/D/1表示顾客按照确定的时间间隔到达、服务时间为确定的时间间隔和单个服务台的模型;M/D/1表示顾客相继到达的间隔时间为负指数分布、确定的服务时间间隔和单个服务台的模型;M/M/1表示顾客相继到达的时间间隔为负指数分布、服务时间间隔为负指数分布和单个服务台的模型。
2.3M/M/1计算模型
2.3.1标准的M/M/1模型
标准的M/M/1计算模型是指适合下列条件的排队系统:
(1)输入过程:
顾客源是无限的,顾客单个到来,相互独立,一定时间的到达数服从泊松分布,到达过程是平稳的。
(2)排队规则:
单队,且对队长没有限制,先到先服务;
(3)服务机构:
单服务台,各顾客的服务时间是相互独立的,服从相同的负指数分布。
此外,还假定到达间隔时间和服务时间是相互独立的。
2.3.2达到与服务的概率分布
用
表示顾客平均达到率,
表示服务台平均服务率。
对于泊松流,在时间
内,系统内有
个顾客的概率服务泊松分布:
若顾客流为泊松流时,顾客到达的时间间隔服从负指数分布:
从而可求得到达的时间间隔均值为
;到达时间间隔方差为
在这种计算模型中,由于服务机构只有一个服务台,对一个顾客的服务时间,即忙期内两顾客离开系统的时间间隔,服从参数为
的负指数分布,
为平均服务率,即单位时间内离开系统的顾客平均数。
服务时间的均值和方差为:
综上所述,在M/M/1计算模型中,达到的顾客数服从泊松分布,服务时间服从负指数分布。
2.3.3服务系统的运行指标
1.系统中无顾客的概率
2.平均排队的顾客数
3.系统中的平均顾客数
4.顾客花在排队上的平均等待时间
5.顾客在系统中的平均逗留时间
6.顾客得不到及时服务必须排队等待的概率
7、系统中恰好有n个顾客的概率
此外,还有,平均队长:
系统状态的数学期望(顾客数的期望值)
;平均排队长:
排队顾客数的期望值
;逗留时间分布为
;所以平均逗留时间
;平均排队时间:
;关于
:
服务强度,反映了服务员忙期所占的比例,同时实际上也是平均服务台数。
指标参数之间的关系:
。
忙期与闲期,
服务员平均连续忙的时间
;平均连续闲的时间
。
2.4M/D/1计算模型
M/D/1表示顾客相继到达的间隔时间为负指数分布、确定的服务时间间隔和单个服务台的模型。
它是M/G/1计算模型(G表示一般相互独立的随机分布)的一种特殊情况,即M/G/1模型中服务时间均方差
=0的情况。
用
表示单位时间顾客的平均达到数;
表示单位时间内的平均服务顾客数,则一个顾客的平均服务时间为
,服务时间的均方差为
。
在M/G/1计算模型中,达到的顾客数服从泊松分布,服务时间为一般的服务时间。
而作为M/G/1的特殊情况M/D/1计算模型,其达到的顾客数亦服从泊松分布,但服务时间为固定时间。
M/G/1服务系统的运行指标包括:
1.系统中无顾客的概率
2.平均排队的顾客数
3.系统中的平均顾客数
4.顾客花在排队上的平均等待时间
5.系统中顾客的平均逗留时间
6.系统中顾客必须排队等待的概率
7.系统中恰好有n个顾客的概率
2.5D/D/1计算模型
D/D/1计算模型是一种表示顾客按照确定的时间间隔到达、服务时间为确定的时间间隔和单个服务台的模型,它是三个排队模型中最特殊的情况。
值得注意的是D/D/1模型一定要求服务时间为确定的时间。
在D/D/1模型中,用
表示单位时间顾客的平均达到数;
表示单位时间内的平均服务顾客数,则一个顾客的平均服务时间为
,与此同时,如果顾客到达率小于服务率(
),则此时处于无需等待D/D/1队列中。
3.实验仿真结果图
3.1几种排队模型主要的仿真程序
3.1.1M/M/1仿真程序
在M/M/1仿真程序中,我们假设包的到达速率是1packet/s,到达间隔时间服从指数分布,链路的处理速度恒定,定为44000bits/s,包的大小服从指数分布(这样可以代替服务时间的指数分布),分布的参数为44000/(8*u),其中u=1.1packets/s(模拟服务器处理速度)此时参数大致已经设定,贴源码如下:
setns[newSimulator]
settf[openout.trw]
$nstrace-all$tf
setlambda 1
setmu 1.1
setn1 [$nsnode]
setn2[$nsnode]
setlink[$nssimplex-link$n1 $n244kb0msDropTail]
$nsqueue-limit$n1 $n2 100000
setInterArrivalTime[newRandomVariable/Exponential]
$InterArrivalTimesetavg_[expr 1/$lambda]
setpktSize[newRandomVariable/Exponential]
$pktSizesetavg_[expr44000.0/(8*$mu)]
#将n1定义为src
setsrc[newAgent/UDP]
$nsattach-agent$n1$src
#监听队列
setqmon[$nsmonitor-queue$n1 $n2[openqm.outw]0.1]
$linkqueue-sample-timeout
#定义队列中包的个数,初始化为0
setpktAmount0
procfinish{}{
globalnstf
$nsflush-trace
close$tf
exit0
}
procsendpacket{}{
globalnssrcInterArrivalTimepktSizepktAmount
settime[$nsnow]
settempTime[$InterArrivalTimevalue]
$nsat[expr$time+$tempTime]"sendpacket"
settempSize[exprround([$pktSizevalue])]
setbytes$tempSize
#在处理完传进的包后,删除掉一个包,delpacket在下面定义,这里来记录包个数有点问题,这里做法是在当前时刻的$tempSize*8/44000处理完进来包的时间后将包的个数减少1,忽略了等待的过程
$nsat[expr$time+[expr$tempSize*8/44000]]"delpacket"
#puts"$time$bytes"
$srcsend$bytes
#发送后将包数加一
setpktAmount[expr$pktAmount+1]
puts"$time$pktAmount"}
procdelpacket{}{
globalpktAmount
setpktAmount[expr$pktAmount-1]
}
setsink[newAgent/Null]
$nsattach-agent$n2$sink
$nsconnect$src$sink
$nsat0.0001 "sendpacket"
$nsat 1000.0"finish"
$nsrun
3.1.2M/D/1仿真程序
M/D/1的仿真程序是将M/M/1中的
setpktSize[newRandomVariable/Exponential]
$pktSizesetavg_[expr44000.0/(8*$mu)]代码改成setpktSize5000即可。
3.1.3D/D/1仿真程序
setns[newSimulator]
settracefile1[openout.trw]
$nstrace-all$tracefile1
#OpentheNAMtracefile
setnamfile[openout.namw]
$nsnamtrace-all$namfile
#Definea'finish'procedure
procfinish{}{
globalnstracefile1namfile
$nsflush-trace
close$tracefile1
close$namfile
execnamout.n