用蒙特卡洛法实现对排队等待问题的计算机模拟
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
用蒙特卡洛法实现
对排队等待问题的计算机模拟
蒙特卡洛(MonteCarlo)法,或称统计试验法、计算机随机模拟方法,起源于美国在第一次世界大战进研制原子弹的“曼哈顿计划”。该计划的主持人之一、数学家冯·诺伊曼用驰名世界的赌城—摩纳哥的MonteCarlo—来命名这种方法,为它蒙上了一层神秘色彩。
一、蒙特卡洛法的基本思想及其应用
MonteCarlo方法是一种基于“随机数”,采用统计抽样方法,近似求解数学问题或物理问题的过程。把统计模拟法用于数值计算已有200多年的历史,最早是法国数学家蒲丰(1707-1788)。他进行了著名的“蒲丰投针实验”,早以此来求圆周率π的近似值。本世纪40年代,随着电子计算机的出现,特别是近年来高速电子计算机的出现,使得用数学方法在计算机上大量、快速地模拟这样的试验成为可能。
统计试验法通常用来研究概率过程,研究问题时常涉及下列一些与随机因素有关的概率,如各类概率等,一般来说,建立描述过程的复杂的概率模型是不成问题的,但用数学方法研究与分析这些模型是却很困难,问题的维数(即变量的个数)可能高达数百甚至数千。对这类问题,难度随维数的增加呈指数增长,这就是所谓的“维数的灾难”(Co urse Dimensionality)。传统的数值方法难以对付(即使使用速度最快的计算机),甚至达到了无法进行的地步。因此,唯一可取的研究方法是统计实验法。
统计模拟(蒙特卡洛法),在系统工程中的应用日益广泛,据国外有关文献报道其应用领域大致有:
1.航空运输排队,机场设计等;
2.港口设计,泊位研究等;
3.消防车或救护车的布局和调派;
4.城市公共汽车作业调度;
5.出租汽车调度计划;
- 1 -
6.铁路货运调度计划;
7.加油站、停车场等设计;
8.售票所布局;
9.存储模拟,仓库布局等;
10.设备维修计划;
11.生产过程的安排;
12.工厂的单件、小批生产的作业计划;
13.销售预测;
二、排队或等待问题的分析
在日常生活中,我们每天都会遇到各种各样的排队。比如:银行中取款要排队,火车站买票要排队,超市、商场中购物付款要排队,预订旅馆或机票时也要排队,人们仿佛置身于一个排队的社会。
所谓排队,就是等候消费服务的顾客在进入点前排队(意大利G·佩里切利)。排队的类型一般来说有以下几种:
一个服务点。即只有一个点可供顾客选择等候服务,顾客只能按顺序一个接一个等侯,这样排队,顾客多的时候最混乱。现在这种排队类型已不多见。
多个服务点。即有两个或两个以上的点可供顾客选择,每一点都可排成一条队。多个服务点可减轻一个服务点的负担,增加顾客选择服务点的灵活性,同时顾客还可选择自己喜欢的服务员。
专门服务点。即专门为某些特殊的顾客开辟的服务点。专门的服务点可以保证某些特殊顾客的特殊权益,如:减少顾客等待服务时间,同时使一些顾客分离出来,减轻其服务口的压力。
我们拿一个理发店的实际例子来分析:
某理发馆每天早晨开业后,顾客的到来总是陆续不断的,他们到来的间
- 2 -
顾客到来后,由管理人员引导至A、B、C三个服务椅(理发员固定在服务椅上),各服务椅的服务内容相同,但服务时间有多有少,根据以往统计资料,
当有一个以上服务椅空闲时,管理人员按字母排列次序引导顾客至服务椅去进行服务。顾客中有10%属“特殊顾客”理发很费时间,每人需多4分钟。现模拟
我们采用二位随机数来模拟顾客到来间隔和服务情况,并选定碰到个位数是5,就作为“特殊顾”(占10%)现从随机数中抽取随机数如下:
- 3 -
设第一个顾客到达的时间是在3点正,随机数是14,此数本不需要,主要是看一下是不是“特殊顾客”,现此数尾数不是5说明第一位不是“特殊顾客”。第一个顾客到达,按字母的顺序应到A服务椅,随机数00,表示要服务8分钟,第二个顾客到达与第一个顾客的间隔时间,按随机数46应为6分钟,即在8.06时,服务椅A正在使用,因此到服务椅B,服务随机数99,应
*为“特殊顾客”服务时间8(分)+4(分)=12(分)
10个顾客在系统内的总时间为63分。
分析:
- 4 -
1.10个顾客在系统(理发馆内)的总时间为69分,平均每人69/10=6.9分
2.10个顾客总的服务时间为109分。平均每人服务109/10=10.9分
3.统内无等待时间,即没出现顾客排队等待问题.
4
三、排队等待问题的计算机模拟
在此基础上,可用计算机编写程序,在计算机上实现仿真模拟,用以模拟更多时间和更多顾客时的情况。以下我我组用Matlab编写的模拟程序的算法部分:
function [num,pass]=computing(tim0)
seat=[0 0 0];%服务员属性
pass=rand(1,4);%顾客信息:序号、到达时间、特殊要求时间、正常理发时间
pass(5)=0;%理发员
pass(6)=0;%离开时间
pass(7)=0;%等待时间
num=1;%服务人数初始化
tim=0;%时间计数器
temp=0;%
while tim<=tim0
pass(num,1)=num; %装入序号
pass(num,2)=rand;
pass(num,3)=rand;
pass(num,4)=rand;
%计算顾客到达时间
if pass(num,2)<=0.07
- 5 -
temp=4;
else if pass(num,2)<=0.17
temp=5;
else if pass(num,2)<=0.69
temp=6;
else if pass(num,2)<=0.89
temp=7;
else temp=8;
end
end
end
end
tim=tim+temp; %装入顾客到达时间
pass(num,2)=tim;
if pass(num,3)<=0.1
pass(num,3)=4; %装入需要特殊服务的时间else pass(num,3)=0;
end
num=num+1;
end
num=num-1;
for i=1:num
%计算顾客的理发席位
if seat(1)<=pass(i,2)+pass(i,7)
pass(i,5)=1; %由1号服务员理发
temp1=timinge1(1,pass(i,4));
seat(1)=pass(i,2)+pass(i,3)+temp1;
pass(i,4)=temp1; %装入正常理发所需时间else if seat(2)<=pass(i,2)+pass(i,7)
pass(i,5)=2; %由2号服务员理发
temp1=timinge1(2,pass(i,4));
seat(2)=pass(i,2)+pass(i,3)+temp1;
pass(i,4)=temp1; %装入正常理发所需时间else if seat(3)<=pass(i,2)+pass(i,7)
pass(i,5)=3; %由2号服务员理发
temp1=timinge1(3,pass(i,4));
seat(3)=pass(i,2)+pass(i,3)+temp1;
pass(i,4)=temp1;
else %计算等待时间
x=seat(1);
y=1;
if x>seat(2)
x=seat(2);
- 6 -