多服务台排队系统的仿
真
Document number:PBGCG-0857-BTDO-0089-PTT1998
实验3---多服务台排队系统的仿真
姓名: 学号:
一、 目标任务
已知一个系统有N个服务员,能力相等,服务时间服从指数分布。顾客的到达时间间隔服从指数分布。用Monte-Carlo仿真,分别求按下列方案的总体平均排队时间:
① M|M|N。
② N个单通道系统并列,按1/N概率分裂到达流。 ③ N个单通道并列,挑选最短的队。 要求:
① 给出程序设计的过程。
② 如果采用固定的N,则要求N>2。 ③ 至少取ρ=和ρ=两种强度运行程序。 ④ 对结果进行分析。 二、 编程语言
Matlab 三、 关键代码 方案一:
N = 3; % 服务员人数
r = 6; % 顾客到达流强度 u = 20; % 服务员服务强度 T = 1000000; % 仿真运行时间
avg_wait_time = []; % 平均等待时间
for i=1:100
% 模拟排队函数
server_time = [, , ]; % 用来保存服务员下一空闲时间 time = 0; % 绝对时钟,初始为0 client_num = 0; % 顾客总数,初始为0 CRTime = 0; % 顾客到达时间间隔 ServeTime = 0; % 顾客服务时间
server_id = 0; % 当前进入排队窗口的服务员编号 total_wait_time = 0;% 系统中到达顾客的总等待时间 while 1
CRTime = exprnd(1/r); % 按指数分布产生顾客到达时间间隔
time = time + CRTime; % 更新系统的绝对时钟
if time > T break; end
client_num = client_num + 1; % 顾客数加1
ServeTime = exprnd(1/u); % 按指数分布产生顾客服务间隔
server_id = mod(client_num, N); % 按1..N的顺序循环排入服务员窗口 if server_id ==0 server_id = N; end
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; end end
avg_wait_time = [avg_wait_time, total_wait_time/client_num]; end
% 计算平均等待时间
mean_avg_wait_time = mean(avg_wait_time);
fprintf('ρ=%平均等待时间 %\\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 = []; % 平均等待时间