用蒙特卡洛法实现对排队等待问题的计算机模拟

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 -

相关文档
最新文档