排队系统的统计模拟实现
数学建模论文(蒙特卡罗的多服务台和单服务台排队系统)
![数学建模论文(蒙特卡罗的多服务台和单服务台排队系统)](https://img.taocdn.com/s3/m/b6cb17e8d0d233d4b14e69c5.png)
课程名称:数学建模与数学实验学院:专业:姓名:学号:指导老师:利用Monte Carlo方法模拟单服务台排队系统和多服务台排队系统摘要蒙特卡罗方法(Monte Carlo)又称统计模拟法随机抽样技术,是一种随机模拟方法,以概率和统计理论方法为基础的一种计算方法,是使用随机数(或更常见的伪随机数)来解决很多计算问题的方法。
将所求解的问题同一定的概率模型相联系,用电子计算机实现统计模拟或抽样,以获得问题的近似解。
本文通过两个具体的服务机构为例,分别说明如何利用蒙特卡洛方法模拟单服务台排队系统和多服务台排队系统。
单服务台排队系统(排队模型之港口系统):通过排队论和蒙特卡洛方法解决了生产系统的效率问题,通过对工具到达时间和服务时间的计算机拟合,将基本模型确定在//1M M排队模型,通过对此基本模型的分析和改进,在概率论相关理论的基础之上使用计算机模拟仿真(蒙特卡洛法)对生产系统的整个运行过程进行模拟,得出最后的结论。
多服务台排队系统(开水供应模型):为了解决水房打水时的拥挤问题。
根据相关数据和假设推导,最终建立了多服务窗排队M/G/n模型,用极大似然估计和排队论等方法对其进行了求解,并用Matlab软件对数据进行了处理和绘图。
用灵敏度分析对结果进行了验证。
本模型比较完美地解决了水房排队拥挤问题,而且经过简单的修改,它可以用于很多类似的排队问题。
关键词:蒙特卡洛方法,排队论,拟合优度,泊松流,灵敏度分析。
一、问题重述港口排队系统:一个带有船只卸货设备的小港口,任何时间仅能为一艘船只卸货。
船只进港是为了卸货,响铃两艘船到达的时间间隔在15分钟到145分钟变化。
一艘船只卸货的时间有所卸货物的类型决定,在15分钟到90分钟之间变化。
开水供应系统:学院开水房的供水时间有限,水房面积有限,水管易受水垢堵塞。
根据调查数据可知:通畅时几乎无人排队,堵塞时水房十分拥挤。
由此可以看出水房设计存在问题,我们可以把开水房看成是一个随即服务系统,应用排队论的方法对系统运行状态做定量的描述。
队列的应用——单服务台排队系统的模拟
![队列的应用——单服务台排队系统的模拟](https://img.taocdn.com/s3/m/782a1a06360cba1aa911da2a.png)
队列的应用:单服务台排队系统的模拟一、三个模拟1.离散事件模拟系统在排队系统中,主要有两类事件:顾客的到达事件和服务完毕后顾客的离去事件,整个系统就是不断有到达事件和离开事件的发生,这些事件并不是连续发生的,因此这样的系统被称为离散事件模拟系统。
(1)事件处理过程如果服务员没空,就去队列中排队;否则就为这个顾客生成服务所需的时间t,表示服务员开始为它服务,所需的服务时间是t。
每当一个离开事件发生,就检查有没有顾客在排队,如果有顾客在排队,则让队头顾客离队,为它提供服务,如果没有顾客排队,则服务员可以休息。
(2)如何产生顾客到达事件和离开事件在一个排队系统中,顾客的到达时间和为每个顾客服务的时间并不一定是固定的。
但从统计上来看是服从一定的概率分布。
假设到达的间隔时间和服务时间都满足均匀分布,则可以用随机数产生器产生的随机数。
①以生成顾客到达事件为例子如顾客到达的间隔时间服从[a,b]之间的均匀分布,则可以生成一个[a,b]之间的随机数x,表示前一个顾客到达后,经过了x的时间后又有一个顾客到达。
[a,b]之间的随机数可以按照下面的过程产生:假如系统的随机数生成器生成的随机数是均匀分布在0到RAND_MAX之间,可以把0到RAND_MAX之间的区间等分成b-a+1个,当生成的随机数落在第一个区间,则表示生成的是a,当落在第二个区间,则表示生成的是a+1…当落在最后一个区间,则表示生成的是b。
这个转换可以用rand()*(b-a+1)/( RAND_MAX+1)+a实现,rand 表示系统的随机数生成函数。
2.离散的时间驱动模拟在得到了在x秒后有一个事件生成的信息时,并不真正需要让系统等待x秒再处理该事件。
在模拟系统中,一般不需要使用真实的精确事件,只要用一个时间单位即可,这个时间单位是嘀嗒tick,可以表示1秒,也可以表示1min\1h.沿着时间轴,模拟每一个嘀嗒中发生了什么事件并处理该事件。
模拟开始时时钟是0嘀嗒,随后每一步都把时钟加1嘀嗒,并检查这个时间内是否有事件发生,如果有,则处理并生成统计信息。
排队系统的模拟
![排队系统的模拟](https://img.taocdn.com/s3/m/40c1855155270722182ef70e.png)
随机数乘1000 存款类型:【0,6】之间的随机数,分别
对应六种存款类型
totalWaitTime = 0; 设置顾客开始到达的时间currentTime = 0; for (i=0; i<customNum; ++i)
{ 生成下一顾客到达的间隔时间; 下一顾客的到达时间currentTime += 下一顾客到达的间隔时间; 生成存款类型、金额、服务完成时间; 将下一顾客的到达时间入队;
} while (顾客队列非空)
{ 取队头顾客; 输出顾客信息;}
如何产生均匀分布的随机值
均匀分布可以通过随机数产生器产生。 如某个随机过程产生的值服从[a,b]之间
的均匀分布,则可以生成一个[a,b]之间 的一个随机值,把此随机值作为随机过程 产生的值 [a,b]之间的随机值:rand() * (b-a+1) /(RAND_MAX + 1)
几个重要的随机值的生成
解决这个问题的关键就是在每一步跳到下一个 事件发生的时刻,这就是所谓的事件驱动模拟 (event-driven simulation) 。
事件驱动的模拟
在任何时刻,下一个事件只有两种情况:一种是 输入流中下一个顾客的到达或者出纳柜台前某一 个顾客的离开。事件发生的时刻都可获知,所以 我们只需要找出最先发生的事件并处理该事件 (并把当前时间设置成该事件发生的时间)。
事件驱动模拟(event-dHale Waihona Puke iven simulation)直接
把当前时间跳到下一个事件发生的时刻。 如果在连续事件之间的滴嗒间隔很大时,用事件
运营管理第10章 排队分析与仿真
![运营管理第10章 排队分析与仿真](https://img.taocdn.com/s3/m/9524df69fe4733687e21aa64.png)
10-10
队列中的顾客到达(见第14版P211,图10-5)
10-11
顾客到达的其他特征
到达方式 到达的规模 耐心程度
望而却步 中途离队
10-12
排队系统(见第14版P213)
队长
无限长队列 限制队长的能力
队列数 排队规则: 是指队列中决 定顾客接受服务次序的 一个或一系列优先法则。
10-20
例 10.1: 解答(见第14版P217)
10-21
例 10.1: 不超过3辆车(见第14版P217)
10-22
例10.1:95%的服务水平(见第14版P218)
10-23
例10.2: 设备选择
Robot 公司在全美国的特许经营把加油和汽车冲洗业务合 并在一起的设备业务。公司对加满油的车辆提供免费冲洗, 对于不加油只冲洗的费用0.5美元。以往的经验表明:加 油并洗车的顾客数和单独洗车的顾客数大致相等。平均加 一次油可盈利0.7美元,洗一次车的成本是0.1美元,公司 每天营业14小时。 三款设备可以选择:
10-53
仿真软件的理想特性
7. 8. 9. 10. 11.
有物流能力。 有输出标准统计如周期、利用率和等待时间。 允许各种数据分析方法的输入和输出数据。 具有动画功能来显示图形产品流经系统。 允许交互式调试。
10-54
仿真的优点
1. 2.
往往会导致更好地了解实际系统。 在实际系统中有几年的经验可以被压缩为几秒或几分 钟。 模拟不中断正在进行的实际系统的活动。 仿真是远远超过一般的数学模型。 仿真可以作为一种游戏用作训练经验。
10-26
例10.3: 服务人数决策
在格伦玛柯汽车销售公司的售后服务部门,机械修理师要为 汽车修理或服务而准备零件,这种需求以表单的形式递交到 零件部柜台,由柜台职员填表,由此时机械维修师处于等待 状态。机械维修师的到达是随机的(符合泊松分布)到达率 是40人/小时,职员填表的速度是20份/小时,且处理时间 服从指数分布。如果售后部的职员工资是30美元/小时,机 械维修师的工资是60美元/小时,请决定该柜台职员的最佳 数量(由于到达率很大,所以假设顾客源是无限的)。
实验2单服务台单队列排队系统仿真
![实验2单服务台单队列排队系统仿真](https://img.taocdn.com/s3/m/259c92f8da38376bae1fae35.png)
实验2排队系统仿真一、学习目的1.了解仿真的特点2.学习如何建构模型3.熟悉eM-Plant基本的对象和操作4.掌握排队系统的特点与仿真的实现方法二、问题描述该银行服务窗口为每个到达的顾客服务的时间是随机的,表2.4是顾客服务时间纪录的统计结果表2.4 每个顾客服务时间的概率分布对于上述这样一个单服务待排队系统,仿真分析30天,分析该系统中顾客的到达、等待和被服务情况,以及银行工作人员的服务和空闲情况。
三、系统建模3.1 仿真目标通过对银行排队系统的仿真,研究银行系统的服务水平和改善银行服务水平的方法,为银行提高顾客满意度,优化顾客服务流程服务。
3.2.系统建模3.2.1 系统调研1. 系统结构: 银行服务大厅的布局, 涉及的服务设备2. 系统的工艺参数: 到达-取号-等待-服务-离开3. 系统的动态参数: 顾客的到达时间间隔, 工作人员的服务时间4. 逻辑参数: 排队规则, 先到先服务5. 系统的状态参数: 排队队列是否为空, 如果不为空队长是多少, 服务台是否为空6. 系统的输入输出变量:输入变量确定其分布和特征值,顾客的到达时间间隔的概率分布表和每个顾客被服务时间的概率分布. 输出变量根据仿真目标设定. 包括队列的平均队长、最大队长、仿真结束时队长、总服务人员、每个顾客的平均服务时间、顾客平均排队等待服务时间、业务员利用率等。
3.2.2系统假设1.取号机前无排队,取号时间为02.顾客排队符合先进先出的排队规则3.一个服务台一次只能对一个顾客服务4.所有顾客只有一种单一服务5.仿真时间为1个工作日(8小时)6.等候区的长度为无限长3.2.3系统建模系统模型:3.2.4 仿真模型1.实体:银行系统中的实体是人(主动体)2.属性:到达时间间隔、接受服务的时间、接受服务类型3.事件:顾客到达、开始取号、取号结束、进入队列、出队列、接受服务、服务完成、离开银行。
4.活动:到达、取号、排队、服务、离开5.资源:取号机、排队的座椅、服务柜台4 系统仿真4.1 eM-plant 界面与主要控件介绍1. 实体:eM-Plant 中包括3类实体:entity ,container ,transporter 。
银行排队系统实验报告
![银行排队系统实验报告](https://img.taocdn.com/s3/m/246b8cb518e8b8f67c1cfad6195f312b3069eb1a.png)
一、实验目的1. 熟悉银行排队系统的基本原理和设计方法;2. 掌握使用C语言实现银行排队系统的基本操作;3. 培养团队合作精神和实践能力。
二、实验环境1. 操作系统:Windows 102. 编程语言:C语言3. 开发工具:Visual Studio三、实验内容1. 银行排队系统简介银行排队系统是一种模拟真实银行排队场景的程序,主要功能包括:客户到达、排队、服务、离开等。
通过模拟银行排队过程,我们可以了解银行排队系统的基本原理,并为实际应用提供参考。
2. 系统设计(1)数据结构本系统采用队列数据结构来存储排队客户。
队列是一种先进先出(FIFO)的数据结构,适用于模拟银行排队场景。
(2)功能模块本系统主要包括以下功能模块:1)客户到达模块:模拟客户到达银行,并随机生成客户信息,如客户ID、到达时间、服务时间等;2)排队模块:根据客户到达顺序,将客户信息依次加入队列;3)服务模块:按照客户排队顺序,为每位客户提供服务,并更新客户状态;4)离开模块:客户服务完成后,从队列中移除该客户信息;5)统计模块:记录客户服务次数、平均等待时间、最长等待时间等数据。
(3)实现方法1)客户到达模块:使用随机数生成器生成客户信息,并将客户信息存入队列;2)排队模块:当客户到达时,将客户信息加入队列尾部;3)服务模块:从队列头部取出客户信息,为该客户提供服务,并更新客户状态;4)离开模块:当客户服务完成后,从队列中移除该客户信息;5)统计模块:记录客户服务次数、平均等待时间、最长等待时间等数据。
3. 实验步骤(1)初始化系统,设置窗口数量和客户到达时间间隔;(2)模拟客户到达,生成客户信息并加入队列;(3)按照客户到达顺序,为每位客户提供服务;(4)记录客户服务次数、平均等待时间、最长等待时间等数据;(5)统计实验结果,分析银行排队系统性能。
四、实验结果与分析1. 实验结果通过实验,我们得到了以下数据:(1)客户服务次数:100次;(2)平均等待时间:5分钟;(3)最长等待时间:15分钟。
排队模型的随机模拟
![排队模型的随机模拟](https://img.taocdn.com/s3/m/3da724d728ea81c758f57823.png)
ListNode *p,*s,*q;
p=L;
while (p!=NULL)
{
if(newelem>p->OccurTime)
{
if(!p->next)
{
s=new(ListNode);
s->OccurTime=newelem;
AvgLenth(L);
}
srand( (unsigned)time( 0 ) );
while(temp2<=CloseTime)
{
Customer++;
x1=rand()%1001;
ServerTime=x1/500.0;
y1=rand()%1001;
y=y1/1000.0;
{
ListNode *p;
p=L;
while (p!=NULL)
{
printf("OccurTime=%.2f EventType=%d \n",p->OccurTime ,p->EventType);
p=p->next;
}
}
void InsertList(LinkList L,DataType newelem,int EventType)
SumWaitTime:顾客总的等待时间;SumServerTime:服务员总的服务时间;
SumFreeTime:空闲时间;
四,思考过程:
给出两个随机数分别是:(ServerTime,NextCusTime),把这两个数当成一组数据。 把顾客离开置为“1”,顾客到达置为“0”。以顾客离开作为分界点,统计顾客人数,顾客的排队时间,顾客队伍长度,服务员的服务时间。根据顾客的到达时间和服务时间要分两种情况:①上一个顾客还没服务完,而下一个顾客已经到了。②上一个顾客服务结束后,而下一个顾客过一段时间才到达。
MM1排队系统仿真matlab实验报告
![MM1排队系统仿真matlab实验报告](https://img.taocdn.com/s3/m/9f069c0f0b4c2e3f57276357.png)
M/M/1排队系统实验报告一、实验目的本次实验要求实现M/M/1单窗口无限排队系统的系统仿真,利用事件调度法实现离散事件系统仿真,并统计平均队列长度以及平均等待时间等值,以与理论分析结果进行对比。
二、实验原理根据排队论的知识我们知道,排队系统的分类是根据该系统中的顾客到达模式、服务模式、服务员数量以及服务规则等因素决定的。
1、 顾客到达模式设到达过程是一个参数为λ的Poisson 过程,则长度为t 的时间内到达k 个呼叫的概率 服从Poisson 分布,即etkk k t t p λλ-=!)()(,⋅⋅⋅⋅⋅⋅⋅⋅⋅=,2,1,0k ,其中λ>0为一常数,表示了平均到达率或Poisson 呼叫流的强度。
2、 服务模式设每个呼叫的持续时间为i τ,服从参数为μ的负指数分布,即其分布函数为{}1,0t P X t e t μ-<=-≥3、 服务规则先进先服务的规则(FIFO ) 4、 理论分析结果在该M/M/1系统中,设λρμ=,则稳态时的平均等待队长为1Q ρλρ=-,顾客的平均等待时间为T ρμλ=-。
三、实验内容M/M/1排队系统:实现了当顾客到达分布服从负指数分布,系统服务时间也服从负指数分布,单服务台系统,单队排队,按FIFO (先入先出队列)方式服务。
四、采用的语言MatLab 语言 源代码:clear; clc;%M/M/1排队系统仿真SimTotal=input('请输入仿真顾客总数SimTotal='); %仿真顾客总数;Lambda=0.4; %到达率Lambda;Mu=0.9; %服务率Mu;t_Arrive=zeros(1,SimTotal);t_Leave=zeros(1,SimTotal);ArriveNum=zeros(1,SimTotal);LeaveNum=zeros(1,SimTotal);Interval_Arrive=-log(rand(1,SimTotal))/Lambda;%到达时间间隔Interval_Serve=-log(rand(1,SimTotal))/Mu;%服务时间t_Arrive(1)=Interval_Arrive(1);%顾客到达时间ArriveNum(1)=1;for i=2:SimTotalt_Arrive(i)=t_Arrive(i-1)+Interval_Arrive(i);ArriveNum(i)=i;endt_Leave(1)=t_Arrive(1)+Interval_Serve(1);%顾客离开时间LeaveNum(1)=1;for i=2:SimTotalif t_Leave(i-1)<t_Arrive(i)t_Leave(i)=t_Arrive(i)+Interval_Serve(i);elset_Leave(i)=t_Leave(i-1)+Interval_Serve(i);endLeaveNum(i)=i;endt_Wait=t_Leave-t_Arrive; %各顾客在系统中的等待时间t_Wait_avg=mean(t_Wait);t_Queue=t_Wait-Interval_Serve;%各顾客在系统中的排队时间t_Queue_avg=mean(t_Queue);Timepoint=[t_Arrive,t_Leave];%系统中顾客数随时间的变化Timepoint=sort(Timepoint);ArriveFlag=zeros(size(Timepoint));%到达时间标志CusNum=zeros(size(Timepoint));temp=2;CusNum(1)=1;for i=2:length(Timepoint)if (temp<=length(t_Arrive))&&(Timepoint(i)==t_Arrive(temp)) CusNum(i)=CusNum(i-1)+1;temp=temp+1;ArriveFlag(i)=1;elseCusNum(i)=CusNum(i-1)-1;endend%系统中平均顾客数计算Time_interval=zeros(size(Timepoint));Time_interval(1)=t_Arrive(1);for i=2:length(Timepoint)Time_interval(i)=Timepoint(i)-Timepoint(i-1);endCusNum_fromStart=[0 CusNum];CusNum_avg=sum(CusNum_fromStart.*[Time_interval 0] )/Timepoint(end);QueLength=zeros(size(CusNum));for i=1:length(CusNum)if CusNum(i)>=2QueLength(i)=CusNum(i)-1;elseQueLength(i)=0;endendQueLength_avg=sum([0 QueLength].*[Time_interval 0] )/Timepoint(end);%系统平均等待队长%仿真图figure(1);set(1,'position',[0,0,1000,700]);subplot(2,2,1);title('各顾客到达时间和离去时间');stairs([0 ArriveNum],[0 t_Arrive],'b');hold on;stairs([0 LeaveNum],[0 t_Leave],'y');legend('到达时间','离去时间');hold off;subplot(2,2,2);stairs(Timepoint,CusNum,'b')title('系统等待队长分布');xlabel('时间');ylabel('队长');subplot(2,2,3);title('各顾客在系统中的排队时间和等待时间');stairs([0 ArriveNum],[0 t_Queue],'b');hold on;stairs([0 LeaveNum],[0 t_Wait],'y');hold off;legend('排队时间','等待时间');%仿真值与理论值比较disp(['理论平均等待时间t_Wait_avg=',num2str(1/(Mu-Lambda))]);disp(['理论平均排队时间t_Wait_avg=',num2str(Lambda/(Mu*(Mu-Lambda)))]);disp(['理论系统中平均顾客数=',num2str(Lambda/(Mu-Lambda))]);disp(['理论系统中平均等待队长=',num2str(Lambda*Lambda/(Mu*(Mu-Lambda)))]);disp(['仿真平均等待时间t_Wait_avg=',num2str(t_Wait_avg)])disp(['仿真平均排队时间t_Queue_avg=',num2str(t_Queue_avg)])disp(['仿真系统中平均顾客数=',num2str(CusNum_avg)]);disp(['仿真系统中平均等待队长=',num2str(QueLength_avg)]);五、数据结构1.仿真设计算法(主要函数)利用负指数分布与泊松过程的关系,产生符合泊松过程的顾客流,产生符合负指数分布的随机变量作为每个顾客的服务时间:Interval_Arrive=-log(rand(1,SimTotal))/Lambda;%到达时间间隔,结果与调用exprnd(1/Lambda,m)函数产生的结果相同Interval_Serve=-log(rand(1,SimTotal))/Mu;%服务时间间隔t_Arrive(1)=Interval_Arrive(1);%顾客到达时间时间计算t_Wait=t_Leave-t_Arrive;%各顾客在系统中的等待时间t_Queue=t_Wait-Interval_Serve; %各顾客在系统中的排队时间由事件来触发仿真时钟的不断推进。
数学建模:排队系统仿真
![数学建模:排队系统仿真](https://img.taocdn.com/s3/m/38ea7aa2aa00b52acfc7ca8e.png)
多服务台问题(每个服务台 的服务时间一样)
服务台服务时间为3
顾客到达间隔时间为1
2个服务台
输出排队长的动态 变化情况(用连续 图的形式显示输出)
多服务台问题(每个服务台 的服务时间可以分别设置)
“Stair”形式,即阶梯形式
“Stem”形式,即条状形式
单击“Signal Scope”窗口的“Axes”下拉菜单下的“AutoScale” 子菜单可以改变”Signal Scope”中的坐标
单击“Signal Scope”窗口的“Style”下拉菜单可以改变”Signal Scope”中的输出结果的线性表示形式。
双击“Times-Based Entity Generator”(基于 时间的实体产生器)模块,打开模块设置对 话框,进行模块属性设置。
Generate entities upons(实体产生): 选择”Intergeneration time from port dialog”时,在“Distribution”下拉菜单中 指定如下三种服务时间分布。
5、顾客属性分路形式:根据顾客的属 性,分不同的出口。
路径模块
顾客复制分路模块
顾客复制分路模块
双击顾客复制分路模块
1、顾客复制形式:所有的出口都畅通时,即进行 顾客复制。
2、顾客复制形式:只要有任何一个出口畅通,即 进行顾客复制。
顾客复制分路模块
双击随机数产生器中的 Distribution下来菜单选 择指定随机数。
打开“Single Server”对话框
双击“Single Server”模块
多服务台排队系统的仿真
![多服务台排队系统的仿真](https://img.taocdn.com/s3/m/eee7c7c5ba0d4a7302763a3f.png)
实验3---多服务台排队系统的仿真姓名:学号:一、目标任务已知一个系统有N个服务员,能力相等,服务时间服从指数分布。
顾客的到达时间间隔服从指数分布。
用Monte-Carlo仿真,分别求按下列方案的总体平均排队时间:① M|M|N。
② N个单通道系统并列,按1/N概率分裂到达流。
③ N个单通道并列,挑选最短的队。
要求:①给出程序设计的过程。
②如果采用固定的N,则要求N>2。
③至少取ρ=0.3和ρ=0.7两种强度运行程序。
④对结果进行分析。
二、编程语言Matlab三、关键代码方案一:N = 3; % 服务员人数r = 6; % 顾客到达流强度u = 20; % 服务员服务强度T = 1000000; % 仿真运行时间avg_wait_time = []; % 平均等待时间for i=1:100% 模拟排队函数server_time = [0.0, 0.0, 0.0]; % 用来保存服务员下一空闲时间time = 0; % 绝对时钟,初始为0client_num = 0; % 顾客总数,初始为0CRTime = 0; % 顾客到达时间间隔ServeTime = 0; % 顾客服务时间server_id = 0; % 当前进入排队窗口的服务员编号total_wait_time = 0;% 系统中到达顾客的总等待时间while 1CRTime = exprnd(1/r); % 按指数分布产生顾客到达时间间隔time = time + CRTime; % 更新系统的绝对时钟if time > Tbreak;endclient_num = client_num + 1; % 顾客数加1ServeTime = exprnd(1/u); % 按指数分布产生顾客服务间隔server_id = mod(client_num, N); % 按1..N的顺序循环排入服务员窗口if server_id ==0server_id = N;endif server_time(1, server_id) <= time % 如果当前server_id号服务员空闲,则直接接收服务server_time(1, server_id) = time + ServeTime; % 服务员下一空闲时间为当前绝对时钟加上当前服务时间else % 否则所有服务员都在忙碌,顾客要排队等候total_wait_time = total_wait_time + server_time(1, server_id) - time; % 顾客排队等候时间为当前服务员下一空闲时间减去绝对时钟server_time(1, server_id) = server_time(1, server_id) + ServeTime;endendavg_wait_time = [avg_wait_time, total_wait_time/client_num];end% 计算平均等待时间mean_avg_wait_time = mean(avg_wait_time);fprintf('ρ=%2.1f平均等待时间%6.5f\n', r/u, mean_avg_wait_time); % 打印平均等待时间% 绘制每次仿真的平均等待时间和总体平均等待时间线状图x = 1:100;%plot(x, avg_wait_time, x, mean_avg_wait_time);scatter(x, avg_wait_time, '.');方案二:N = 3; % 服务员人数r = 6; % 顾客到达流强度u = 20; % 服务员服务强度T = 1000; % 仿真运行时间avg_wait_time = []; % 平均等待时间for i=1:100% 模拟排队函数server_time = [0.0, 0.0, 0.0]; % 用来保存服务员下一空闲时间time = 0; % 绝对时钟,初始为0client_num = 0; % 顾客总数,初始为0CRTime = 0; % 顾客到达时间间隔ServeTime = 0; % 顾客服务时间server_id = 0; % 当前进入排队窗口的服务员编号total_wait_time = 0;% 系统中到达顾客的总等待时间while 1CRTime = exprnd(1/r); % 按指数分布产生顾客到达时间间隔time = time + CRTime; % 更新系统的绝对时钟if time > Tbreak;endclient_num = client_num + 1; % 顾客数加1ServeTime = exprnd(1/u); % 按指数分布产生顾客服务时间间隔server_id = randi([1 N]); % 按1/N的概率排入服务员窗口if server_time(1, server_id) <= time % 如果当前server_id号服务员空闲,则直接接收服务server_time(1, server_id) = time + ServeTime; % 服务员下一空闲时间为当前绝对时钟加上当前服务时间else % 否则所有服务员都在忙碌,顾客要排队等候total_wait_time = total_wait_time + server_time(1, server_id) - time; % 顾客排队等候时间为当前服务员下一空闲时间减去绝对时钟server_time(1, server_id) = server_time(1, server_id) + ServeTime;endendavg_wait_time = [avg_wait_time, total_wait_time/client_num];end% 计算平均等待时间mean_avg_wait_time = mean(avg_wait_time);fprintf('ρ=%2.1f平均等待时间%6.5f\n', r/u, mean_avg_wait_time); % 打印平均等待时间% 绘制每次仿真的平均等待时间散点图x = 1:100;scatter(x, avg_wait_time, '.');方案三:N = 3; % 服务员人数r = 6; % 顾客到达流强度u = 20; % 服务员服务强度T = 1000; % 仿真运行时间avg_wait_time = []; % 平均等待时间for i=1:100% 模拟排队函数server_time = [0.0, 0.0, 0.0]; % 用来保存服务员下一空闲时间time = 0; % 绝对时钟,初始为0client_num = 0; % 顾客总数,初始为0CRTime = 0; % 顾客到达时间间隔ServeTime = 0; % 顾客服务时间server_id = 0; % 当前进入排队窗口的服务员编号total_wait_time = 0;% 系统中到达顾客的总等待时间while 1CRTime = exprnd(1/r); % 按指数分布产生顾客到达时间间隔time = time + CRTime; % 更新系统的绝对时钟if time > Tbreak;endclient_num = client_num + 1; % 顾客数加1ServeTime = exprnd(1/u); % 按指数分布产生顾客服务时间间隔temp = min(server_time); % 寻找排队时间最短的服务员窗口[x, y] = find(temp == min(min(server_time)));server_id = y; % 按队伍最短排入服务员窗口if server_time(1, server_id) <= time % 如果当前server_id号服务员空闲,则直接接收服务server_time(1, server_id) = time + ServeTime; % 服务员下一空闲时间为当前绝对时钟加上当前服务时间else % 否则所有服务员都在忙碌,顾客要排队等候total_wait_time = total_wait_time + server_time(1, server_id) - time; % 顾客排队等候时间为当前服务员下一空闲时间减去绝对时钟server_time(1, server_id) = server_time(1, server_id) + ServeTime;endendavg_wait_time = [avg_wait_time, total_wait_time/client_num];end% 计算平均等待时间mean_avg_wait_time = mean(avg_wait_time);fprintf('ρ=%2.1f平均等待时间%6.5f\n', r/u, mean_avg_wait_time); % 打印平均等待时间% 绘制每次仿真的平均等待时间散点图x = 1:100;scatter(x, avg_wait_time, '.');四、实验结果与分析方案一:图1 方案一仿真的平均等待时间散点图图2 方案一平均等待时间M|M|N1. 输入参数:服务员人数N,顾客到达流强度r,服务员服务强度u,仿真运行时间T;2. 各变量初始值置0:绝对时钟time,服务员下一空闲时刻数组server_time[](其中按顺序保存每一个服务员的下一空闲时刻),顾客总数client_num,顾客到达时间间隔CRTime,顾客服务时间ServeTime,当前进入排队窗口的服务员编号server_id,系统中顾客总等待时间total_wait_time;3. 按照指数分布产生下一顾客到达的时间间隔CRTime,time+=CRTime。
排队系统的设计与实现
![排队系统的设计与实现](https://img.taocdn.com/s3/m/854a44345901020207409c9a.png)
银行排队系统白勺设计与实现学生:卓勇指导老师:黄隆华(怀化学院计算机工程系,怀化 418008)摘要:随着经济白勺快速发展,银行白勺业务量逐渐增加,银行柜台白勺压力越来越大,排队等待白勺现象也就越来越多,客户在排队中产生矛盾白勺可能性也随之增加,银行排长队现象成为困扰银行和用户白勺难题。
为了更好地服务客户,减少排队中不合理白勺现象,许多银行采用了自动取号排队白勺系统,本课程设计设计并实现了银行排队取号白勺模拟系统。
模拟了取号、排队、服务、及管理等部分功能,在模拟过程中用到了队列、结构体、文件白勺操作以及链表等知识点。
系统中采用了注册登陆取号机制,有效白勺防止了倒票现象白勺发生,系统能够记录用户及工作人员白勺相关信息,管理员通过对用户及工作人员信息白勺统计和分析,可以进一步优化银行营业厅白勺排队问题,提高银行业务办理效率。
本文用流程图等方式对系统进行了需求分析,确定了系统白勺功能。
系统用TXT文件模拟数据库,运用c和c++语言实现系统全部功能,并在最后对系统进行过测试,可以保证系统白勺稳定性和可靠性。
关键词:银行排队业务;队列;链表;数据结构1 前言数据结构一直以来是一门比较有难度白勺学科,关于数据结构白勺学习,我认为要学好数据结构,要比较熟练白勺掌握各种基本白勺结构操作,如二叉树,链表。
就必须要多练习、多实践。
这次白勺课设计就是给我们提供了一个实践白勺平台,可以让我们更好白勺掌握数据结构,进一步巩固这方面白勺知识。
数据结构课程作为计算机白勺一门关键课程,所牵涉到计算机算法方面白勺问题是必然白勺,我希望通过这次课程设计白勺练习能让自己在这次白勺设计中有多方面白勺提高,能更好白勺掌握相关白勺知识。
我白勺选题白勺信息描述:根据输入文件(银行业务窗口信息:现金、非现金业务)为客户设计一个排队系统,该系统以银行业务窗口登录后,可以提取一个号码进行业务处理,处理完后,可以选择下一个号码进行业务处理。
普通用户登录后,可以选择所需业务,然后抽取一个号码作为其业务处理序号。
运筹学中的排队论分析与应用
![运筹学中的排队论分析与应用](https://img.taocdn.com/s3/m/b996864a0640be1e650e52ea551810a6f524c8b1.png)
运筹学中的排队论分析与应用运筹学是一门研究如何最优化决策的学科。
在现代社会中,许多场景下都存在排队现象,例如银行、超市、机场等场所。
排队论作为运筹学的一个重要分支,专门研究如何通过合理的排队策略来优化服务效率与用户体验。
本文将介绍排队论的基本原理、应用场景以及如何利用排队论进行实际问题的分析与解决。
一、排队论的基本原理排队论是研究排队系统的理论与方法,其基本原理包括排队模型、排队规则以及排队指标。
1. 排队模型排队模型是对排队系统进行抽象和建模的过程,常用的排队模型有M/M/1、M/M/c、M/G/1等。
其中,M表示顾客到达过程符合泊松分布,而服务过程符合指数分布;1表示一个服务台,c表示多个服务台;G表示总体服从一般分布。
2. 排队规则排队规则是指在排队系统中,顾客到达和离开的规则。
常用的排队规则有先到先服务(First-Come-First-Serve,简称FCFS)、最短作业优先(Shortest Job First,简称SJF)、优先级法则等。
3. 排队指标排队指标是对排队系统性能的度量,常用的排队指标包括平均等待时间、平均逗留时间、系统繁忙度等。
这些指标可以帮助我们评估排队系统的效率,并进行比较和优化。
二、排队论的应用场景排队论的应用场景非常广泛,几乎可以涵盖各个行业。
下面以几个典型的应用场景为例,介绍排队论在其中的分析与应用。
1. 银行排队银行是排队论的典型应用场景之一。
通过排队论的分析,银行可以确定合理的柜台数量和工作人员配置,以减少客户的等待时间和提高服务效率。
此外,银行还可以考虑引入预约系统、自助服务等方式,进一步优化排队系统。
2. 售票窗口排队售票窗口也是一个常见的排队场景,如电影院、火车站等。
利用排队论,可以根据顾客到达的速率和服务时间的分布,预测等待时间,并提前安排足够的窗口进行服务,以提高售票效率和用户体验。
3. 交通信号灯优化交通信号灯的优化也可以借助排队论的方法。
通过对道路上车辆到达和通过的流量进行统计和分析,可以调整信号灯的信号周期和配时方案,以减少交通拥堵和减少等待时间。
服务台单队列排队系统仿真
![服务台单队列排队系统仿真](https://img.taocdn.com/s3/m/53c9ea8a4128915f804d2b160b4e767f5bcf806d.png)
服务台单队列排队系统仿真1. 引言排队是我们日常生活中常见的现象之一。
每当我们去银行、超市、餐厅等地方,总会看到人们在服务台前排长队等待接受服务。
而排队系统的效率直接影响到我们的等待时间和满意度。
为了改善排队系统的效率,许多地方引入了服务台单队列排队系统。
这种系统中,所有顾客都将排在同一个队伍中,然后按照先后顺序依次接受服务。
这种系统相比于多个队列排队系统,能够有效减少空闲时间和服务延迟。
为了对服务台单队列排队系统进行评估和优化,我们可以使用仿真技术来模拟系统的运行情况,并对其进行分析。
2. 仿真模型设计在服务台单队列排队系统的仿真模型中,我们需要考虑到以下几个方面的因素:2.1 顾客到达规律在实际排队系统中,顾客的到达时间往往是随机的,我们可以使用随机数生成器来模拟此过程。
通过设定到达时间的概率分布函数,我们可以生成一系列随机数来模拟顾客的到达间隔。
2.2 服务时间每个顾客在服务台的服务时间也是随机的。
同样地,我们可以使用随机数生成器来模拟服务时间。
通过设定服务时间的概率分布函数,我们可以生成一系列随机数来模拟顾客在服务台的停留时间。
2.3 服务台数量为了简化仿真模型,我们假设只有一个服务台。
在实际情况中,可以根据实际需求增加服务台数量,以提高系统的整体效率。
2.4 排队规则在服务台单队列排队系统中,顾客按照先后顺序依次接受服务。
当一个顾客结束服务后,下一个顾客将开始接受服务。
为了模拟这个过程,我们可以使用队列数据结构来管理顾客的排队顺序。
3. 仿真过程在进行仿真过程时,我们可以按照以下步骤进行操作:3.1 初始化仿真参数根据实际情况,我们可以设定好仿真的时间段、顾客到达规律和服务时间的概率分布函数等参数。
3.2 创建顾客队列根据顾客到达规律,我们可以按照一定的间隔时间将顾客加入到队列中。
3.3 顾客进入服务台当顾客队列不为空时,服务台将接受当前队列中的第一个顾客,并开始对其进行服务。
3.4 更新服务时间和队列在服务过程中,服务单位时间递减,直到达到零时,服务结束,当前顾客离开服务台,下一个顾客开始接受服务。
排队系统的离散事件模拟-示例
![排队系统的离散事件模拟-示例](https://img.taocdn.com/s3/m/2428ccd0ad51f01dc281f15d.png)
2.4 M/M/1排队系统的模拟这个排队系统的服务员为一人。
顾客到达系统的间隔时间为平均值等于1分的指数分布随机变量。
单位顾客服务时间为平均值等于0.5分的指数分布随机变量。
单列排队,采取先进先出的规则,排队行列的最大容量为100。
模拟的终止条件为有1000个顾客服务结束离开系统。
2.4.1 系统的实体、属性和事件事件类型有顾客到达事件、服务开始事件以及服务结束事件。
但是,服务开始事件一般与顾客到达事件或服务结束事件相互重合,所以决定有两类事件:a. 第1类事件——顾客到达事件;b. 第2类事件——顾客在服务结束后离开系统。
2.4.2 系统模拟程序为了进行模拟,除了主程序外,还编制了一系列的子程序或函数,它们的功能如表1.2.3所示。
表1.2.3 排队服务系统模拟的子程序和函数表1.2.4列举模型的变量的名称和定义。
表1.2.4 本模型的变量图1.2.8是本模拟模型的主程序,它的主要功能如下:MAIN PROGRAMNEVNTS = 2 //事件类型READ 10, MARRVT, MSERVT //到达间隔时间为1,服务时间为0.510 FORMA T(2F10.0)READ 20, TOTCUS //结束服务顾客总数100020 FORMA T(I 10)CALL INIT30 CALL TIMINGGO TO (40, 50), NEXT //NEXT = 1, GO TO 40; NEXT = 2, GO TO 50 40 CALL ARRIVEGO TO 6050 CALL DEPART60 IF(NUMCUS .LT. TOTCUS) GO TO 30CALL REPORTSTOPEND图1.2.8 排队服务系统模拟的主程序SUBROUTINE INITTIME = 0.0STATUS = 0.0 //服务员状态NIQ = 0 //系统中的停留人数TLEVNT = 0.0 //上次事件时间NUMCUS = 0 //已结束服务的顾客数TOTDEL = 0.0 //顾客停留时间总和ANIQ = 0.0 //系统中人数的时间积分值TNE(1)= TIME + EXPON(MARRVT) // TNE(1)为事件1的发生时间,设置模拟的首次事件时间TNE(2)= 1.E + 30RETURNEND图1.2.9 INIT子程序SUBROUTINE TIMINGRMIN = 1.E + 29 //最近事件的时间NEXT = 0 //下一事件类型DO 10 I = 1, NEVNTS // NEVNTS在主程序中定义为2IF(TNE(I).GE.RMIN) GO TO 10 //第1次运行时,RMIN=TNE(1),I=1RMIN = TNE(I)NEXT = I10 CONTINUEIF(NEXT .GT. 0) GO TO 30PRINT 2020 FORMA T(1H1, 5X, ‘EVENT LIST EMPTY’)STOP30 TIME = TNE(NEXT) //当前模拟时钟推移到最近事件时间RETURNEND图1.2.10 定时子程序ARRIVE子程序是处理第1类事件即顾客到达事件的子程序。
排队模型的计算机模拟
![排队模型的计算机模拟](https://img.taocdn.com/s3/m/67ecd771a26925c52cc5bf5a.png)
j 1 j 1 N
对一个具有更新性质的排队系统,我们将时间 取离散的整数值,Ti为更新时刻.
令yi
Ti 1 1 j Ti
f ( x j ), i Ti 1 Ti .由 更 新 过 程 的 性 质
下一零件的信息可由F(x) 及Pi(x) (i=1,2,3,4)对进行随机抽样得到. 表2
零件类型
下一零件
加工时间
到达时间
下一事件时刻
2 3
21 75
2018 2002
2018 -
排队零件
加工零件
1 4 4 2 3 (1)33
52 43 43 21 75 (2)14
1992 1976 1972 1936 1896 (3)24
现在时间
已加工数
2040 2017 2003 2002 (4)22
注:模拟程序交替地在处理系统图像和计 算抽样值的子程序间运行. 从表2可知,下一事件是加工完毕一个3型零件. 将时钟拨到2003分,将这个3型零件移出系统,并 在表的最后一行的统计数据中将3型零件的数 量加1,得到表3.
表3
零件类型 下一零件 加工时间 到达时间 下一事件时刻
4.表处理技术
在处理排队论模拟中的表格时,形成了一定的技 巧.主要是使用指针来处理链接表格中的每一条 记录.表格中的一行表示一个零件的相关信息, 我们称之为一条记录.在计算机内存中,每条记 录用固定长度的若干连续单元存放,而系统图像 中的连续两条记录则不必连续放置,因为在每条 记录所使用的单元中其实存放了两部分的信息, 一是模拟信息,二是加入一个指针变量的值,用 以表示此记录的下一记录的首地址.当然在表头 (第一条记录)、表末(最后一条记录)都要引 入特殊标志.这样就形成一个链表.对记录的处 理时,我们就只要对指针进行操作即可.
单服务台排队系统离散事件系统仿真实验
![单服务台排队系统离散事件系统仿真实验](https://img.taocdn.com/s3/m/8e2670ce690203d8ce2f0066f5335a8103d26658.png)
单服务台排队系统离散事件系统仿真实验在单服务台排队系统中,存在一个服务台和一些顾客。
顾客根据一定的到达规律到达系统,并进行排队等候服务。
每个顾客需要一定的时间来接受服务,然后离开系统。
在整个过程中,需要记录每个顾客的到达时间、完成时间、等候时间等信息,以评估系统的性能。
以下是进行单服务台排队系统离散事件系统仿真实验的步骤:1.制定实验目标和假设:明确实验的目标和假设,例如评估平均等候时间、系统的利用率等。
2.定义实验参数:设置模拟的时间段、顾客到达的规律、服务时间分布等。
可以根据实际情况选择不同的参数值。
3.创建顾客队列:使用队列数据结构来表示顾客队列,顾客到达时将其加入队列中。
4.初始化系统状态:初始化服务台为空闲状态,设置初始时钟为0。
5.模拟顾客到达:根据到达规律随机生成顾客到达的时间,并将其加入队列。
6.模拟服务过程:当服务台空闲时,从队列中取出下一个顾客进行服务。
根据服务时间分布生成一个随机的服务时间,将服务结束时间设置为当前时钟加上服务时间。
7.记录统计信息:记录每个顾客的到达时间、服务开始时间、完成时间、等候时间等信息。
同时记录系统的状态信息,如系统空闲时间、顾客总数等。
8.更新系统状态:更新服务台的状态,如果队列为空,则服务台为空闲状态,否则继续进行下一个顾客的服务。
9.终止条件判断:判断是否继续模拟,可以根据实验目标设定条件,如模拟时间达到一定阈值或顾客数量达到一定数量。
10.实验结果分析:根据记录的统计信息,计算实验结果,如平均等候时间、系统的利用率等。
通过对比不同参数设置下的实验结果,评估系统的性能情况,并对系统设计进行优化。
在实验过程中,需要注意选择合适的离散事件系统仿真工具,如MATLAB、Python等,进行系统的建模和实验的实施。
同时,应合理选择实验参数和统计指标,以保证实验结果的可靠性和可解释性。
通过进行单服务台排队系统离散事件系统仿真实验,可以评估系统的性能,并对系统设计进行优化,提高系统的效率和顾客的满意度。
MMN排队系统建模与仿真
![MMN排队系统建模与仿真](https://img.taocdn.com/s3/m/a0705bfe172ded630b1cb6c8.png)
《系统仿真与matlab》综合试题....................... 错误!未定义书签。
M/M/N 排队系统的模拟仿真 (1)摘要 (1)1. 问题分析 (2)2. 模型假设 (2)3. 符号说明 (3)4. 模型准备 (3)4.1 排队系统的组成和特征 (3)4.1.1输入过程 (4)4.1.2排队规则 (4)4.1.3服务过程 (4)4.1.4排队系统的主要指标 (5)4.2输入过程与服务时间的分布 (5)4.2.1负指数分布 (5)4.2.2泊松分布 (5)4.3生灭过程 (6)5. 标准M/M/N模型 (8)5.1多服务台模型准备 (8)5.2多服务台模型建立 (9)5.2.1服务利用率 (9)5.2.2平均排队长 (9)5.2.3平均队长 (10)5.2.4平均等待时间 (10)6. 程序设计 (11)6.1动画流程图 (11)6.2 M/M/N流程图 (12)7. 程序运行实例介绍 (13)7.1动画实例讲解 (13)7.2M/M/N排队系统实例讲解 (14)8. 程序实现难点和模型评价 (17)8.1程序实现难点 (17)8.2模型评价 (17)9. 参考文献 (17)10. 附录 (17)10.1动画实现的核心程序 (17)10.2 M/M/N模型计算主要程序 (22)M/M/N 排队系统的模拟仿真摘要排队是在日常生活中经常遇到的事,由于顾客到达和服务时间的随机性,使得排队不可避免。
因此,本文建立标准的M/M/N模型,并运用Matlab软件,对M/M/N排队系统就行了仿真,从而更好地深入研究排队问题。
问题一,基于顾客到达时间服从泊松分布和服务时间服从负指数分布,建立了标准的M/M/N模型。
运用Matlab软件编程,通过输入服务台数量、泊松分布参数以及负指数分布参数,求解出平均队长、服务利用率、平均等待时间以及平均排队长等重要指标。
然后,分析了输入参数与输出结果之间的关系。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
本文将采用系统模拟方法对排队系统进行模拟。并统计不同情况下服务员人数安排及顾客排队情况。第二章主要介绍[0,1)上均匀分布的伪随机数产生方法。第三章主要介绍在产生了[0,1)上均匀分布的随机数后以它为基石模拟其他各种分布的随机变量的方法。第四章主要介绍了排队系统的基础理论及离散事件模拟方法,并且对具体的排队系统进行模拟统计并讨论实验结果。
因为 ,且 在[0,1)上均匀分布。
3.2
由逆变换法可知,对于连续随机变量的具体算法是:首先产生均匀分布的随机数 ,取 即可。例如X是参数为1的指数型随机变量,其分布函数为 ,如果设 ,则
(3-2)
于是参数1的指数分布的随机变量可由下式产生
(3-3)
用计算机模拟的10000个参数为1的指数分布的随机变数,如图3-1所示。
另一个生成随机数的方法是如下的递推公式
(2-3)
由于它包含乘法和加法因此被称为混合同余法。当采用这种方法生成随机数时,人们常取 为计算机字长,这是由于这是因为这种取法易于非常有效的计算。混合同余法是乘同余法和加同余法的混合,它产生的随机数周期较大且统计特性较佳。
图2-1 [0,1)上均匀分布的伪随机数
逐步计算 , ,其中 和 是给定的正整数。 称为一个伪随机数,它近似服从[0,1)内的均匀分布。
在随机变量的模拟中最常用的方法是逆变换法,它首先产生[0,1)内均匀分布随机数,再通过计算分布函数的反函数得到所要的随机数。设 是[0,1)上均匀分布的随机变量,可以证明对于任一分布函数 ,随机变量
(1-2)
,如果 , (1-4)
则 满足所给随机变量的分布。上述算法被称为离散随机变量的逆变换法。
1.2
排队系统是各种随机系统中最为典型的。计算机系统、通信系统和营业窗口系统都是典型的有形或者无形的排队系统。随机模拟是求解排队系统和分析排队系统系能的非常有效的方法,它是用计算机程序直接建立真实系统的模型,通过计算机系统的随机变化研究其行为的特征。
1.1
随机变量的模拟离不开[0,1)内均匀分布随机数的产生。真正的随机数只能由物理设备产生,由于其产生的效率过低,在实际应用中我们采用计算机递推产生的伪随机数。伪随机数并不是真正的随机数,它虽然符合真随机数的统计特征但实际上是一个周期序列。一种常用的产生随机数的方法是:从初值 出发,利用公式:
(1-1)
符合上述要求。
由上述乘同余法产生伪随机数时,分别取:
; ;
所得到的序列:
从上可以看出,当 能整除 时,最后的序列必定会收敛到零。当 不能整除 时,则所得的序列是周期序列,且最大周期是 。由此可以看出,递推方法计算出来的伪随机数序列实际上是周期序列,而非真正的随机序列。事实上当 取得非常大的时候在模拟中只需取其一个周期即可,这样的伪随机数序列满足均匀分布独立随机变量的一切特征。由上述乘同余法模拟的1000个在[0,1)上服从均匀分布的伪随机数的结果,如图2-1所示。
In real life,weoften need in some conditions completely random cases of one thing analysis and decision making. Due to the use of traditional experimental results verify that the stochastic system requires a lot of manpower and difficult to achieve good results. To save money, we consider using a computer to simulate random system. As a typical stochastic system,queuing system widely exists in life. Using the computer simulation system of queuing system can reduce the cost, improve the system of study efficiency. For managers to make decisions of the practical system provides reliable operation.
一般的,在选取常数 和 时应遵循如下原则:
(1)对于任一初值,产生的序列具有[0,1)上均匀分布独立随机变量的特征。
(2)对已任一初值,在重复出现前产生的随机数序列足够长。
(3)每一数值均可由计算机有效计算。
为满足上述三个条件,可选一个符合计算机字长要求的较大素数作为 。对于32位计算机(其中第一个字节为正负号),已经证明 和
2.3
设随机向量(X,Y)在中心为原点、面积为4的正方形上均匀分布,则在这个正方形里画其内切圆,如果我们大量的在正方形里生成随机点(X,Y)。可以证明这些点落在内切圆内的概率等于 ,即
(2-4)
设U是[0,1)上的均匀分布,则2U是在[0,2)上的均匀分布。2U-1在[-1,1)上均匀分布。因此我们生成2个随机数 令 ,我们可以如此估计 :先生成大量随机数对 ,之后用满足 的随机数对的比例来估计 。以上算法由计算机模拟得到的结果是: ,可以看到与准确值相差不多。
2.4
本章介绍了随机数的产生原理和方法,并给出了随机数的一个简单应用。
第三章
用计算机模拟任何一个随机现象时必然涉及一个给定概率分布的随机变量。例如,在模拟排队系统时,顾客的到达时间和服务时间都是满足一定分布的随机变量。一旦这些随机变量所满足的概率分布函数被选定,则必须有生成该给定概率分布的随机变量的算法,才能在计算机内得到这样的随机变量。而所有的这些方法都基于[0,1)上的均匀分布的随机变量。
(2-2)
逐步计算 , ,其中 和 是给定的正整数,上式表示 为 被 除后的余数。于是每一个 均为 中的一个, 称为一个伪随机数,它近似服从[0,1)上的均匀分布。
由上式产生随机数的方法称为乘同余法。由于每一个 均取值 中的一个,故若干次后(至多 次)所产生的随机数必定重复,且自此之后整个序列也开始重复。于是,我们在选择常数 和 时,希望对任一初值 ,在重复出现前所产生的随机数序列足够长。
(2-1)
为物理设备所能产生的[0,1)内的一串等间隔分布的有理数序(即等差数列)。如果n充分大,则该数列在[0,1)内充分“稠密”。因此,问题的本质在生成一个等概率分布的离散随机数集 。如果这一件事能够办到,则它可以看作[0,1)上均匀分布的随机数的一个近似。
实际上,可以取 ,若能生成 上的等概率分布,则将上述整数等概率随机变量除以n即能得到所需[0,1)上均匀分布随机数序。较常见的一种办法有:取 则 内的任何一个数都可以用一个相应的m位二进制数表示。该二进制数每一位取0或者1。只要等概率的生成0和1就可以得到一个概率 的m位2进制数。最直接的可以用掷硬币的方法等概率地产生0或1。
变量和事件是排队系统最重要的因素。在模拟中我们紧盯某些变量。只要出现一个事件,上述变量的值就会出现改变或更新,我们就要找到相应感兴趣的数据作为输出。为确定下一个事件何时出现,我们需要一个事件列表(此列表给出后面最近的事件和这些事件出现的时间表)。只要出现一个事件我们就重置时间变量、状态变量、计数变量和收集相应的数据。这样我们就可以及时追踪随时间而变化的系统。
3.1
逆变换法(也称反演法或变换法)是在随机变量的模拟中最常用的方法。它首先产生[0,1)内均匀分布随机数,再通过计算分布函数的反函数得到所需要的随机变量。
命题3.1设 是[0,1)上均匀分布的随机数,则对于任一分布函数 ,随机变量
(3-1)
的分布函数为 。
证明:以 记 的分布函数,则
由于 是一分布函数,故它是 的单调递增函数,且不等式“ ”等价于不等式“ ”。于是有
This paper firstly introduces the recursive generate pseudo random by the linear congruence method, based on the substitution method of generating meet specific conditions in the corresponding random variables. Then using discrete event simulation method introduced some basic theoretical queuing system simulation queuing system. Finally, through computer programming realized in the attendant and many waiter situation of simulation and comparison queuing system.
第一章
在现实生活中常需要在某些条件完全随机的情况下对一件事情作出分析和决策。由于用传统实验验证这样的随机系统需要耗费大量的人力物力且难以达到很好的效果。为节省经费我们考虑采用计算机来对随机系统进行模拟。随机系统的模拟是利用计算机上编写的计算机程序语言模拟实际系统的行为。通过观察和分析计算机模型系统的性能,从而掌握和了解实际系统的大致情况,并依此对实际系统作出分析和决策。
图3-1指数型随机变量的模拟
利用逆变换法可以模拟随机变量,但由于某些随机变量分布函数的反函数很难或不可能显式地表出,无法直接应用逆变换法。因此我们考虑采用其他的算法,例如拒绝法、极坐标法等。
的分布函数为 。逆变换法是一种很好的产生指数型随机变量的算法,因为能很快得出指数型变量的分布函数的反函数。但是对某些随机变量,其分布函数的反函数很难或不可能显式地表出,无法直接应用逆变换法,因此我们考虑采用其他的算法。
假设我们希望生成一个满足概率分布为
, (1-3)