在某商店有两个售货员,顾客陆续到来,售货员逐个接待顾客,空闲的售货员优先接待顾客。当到来的顾客较多时,一部分顾客需排队等待,被接待后的顾客便离开商店。设: (a)顾客到达的间隔时间是服从参数为 0.1 的指数分布; (b)服务时间是服从[4,15]的均匀分布; (c)到达系统的顾客按先到先服务规则,排队的长度没有限制; (d)顾客是无穷的; 假定时间以min为单位,一个工作日是8h. (1)模拟一个工作日内完成服务的顾客数及顾客平均等待时间t; (2)模拟100个工作日,求出平均每日完成服务的顾客数及每日顾客的平均等待时间. 用計算機模擬的知識写出对应题目的matlab代码和流程图
时间: 2024-02-03 07:12:06 浏览: 156
以下是对应题目的MATLAB代码和流程图:
MATLAB代码:
clear;clc;
%初始化
Tmax = 480; %工作日总时间
t = 0; %初始时间为0
n = 0; %完成服务的顾客数
q = 0; %队列中等待的顾客数
wait_time = 0; %等待时间总和
max_q = 0; %最大队列长度
while t < Tmax
%顾客到达
inter_arrival_time = exprnd(10); %到达间隔时间服从参数为10的指数分布
t = t + inter_arrival_time; %更新时间
if t >= Tmax
break;
end
%服务时间
service_time = unifrnd(4, 15); %服务时间服从[4,15]的均匀分布
%选择队列
if q == 0 %两个售货员都空闲
server = randi([1, 2]); %随机选择一个售货员
finish_time = t + service_time; %服务结束时间
elseif q == 1 %有一个售货员空闲
server = find(rand(1, 2) < [q/(q+1), 1/(q+1)]); %优先选择空闲的售货员
finish_time = t + service_time; %服务结束时间
else %两个售货员都忙
q = q + 1; %排队等待
max_q = max(max_q, q); %更新最大队列长度
continue;
end
%更新等待时间总和和完成服务的顾客数
wait_time = wait_time + (finish_time - t);
n = n + 1;
end
avg_wait_time = wait_time / n; %平均等待时间
disp(['完成服务的顾客数:', num2str(n)]);
disp(['顾客平均等待时间:', num2str(avg_wait_time)]);
%模拟100个工作日
N = 100; %模拟次数
avg_n = 0; %平均每日完成服务的顾客数
avg_wait_time_daily = 0; %平均每日顾客的平均等待时间
for i = 1:N
%初始化
t = 0;
n = 0;
q = 0;
wait_time = 0;
max_q = 0;
while t < Tmax
%顾客到达
inter_arrival_time = exprnd(10);
t = t + inter_arrival_time;
if t >= Tmax
break;
end
%服务时间
service_time = unifrnd(4, 15);
%选择队列
if q == 0
server = randi([1, 2]);
finish_time = t + service_time;
elseif q == 1
server = find(rand(1, 2) < [q/(q+1), 1/(q+1)]);
finish_time = t + service_time;
else
q = q + 1;
max_q = max(max_q, q);
continue;
end
%更新等待时间总和和完成服务的顾客数
wait_time = wait_time + (finish_time - t);
n = n + 1;
q = q - 1;
end
avg_wait_time_daily = avg_wait_time_daily + wait_time / n;
avg_n = avg_n + n;
end
avg_n = avg_n / N / (Tmax/480); %平均每日完成服务的顾客数
avg_wait_time_daily = avg_wait_time_daily / N; %平均每日顾客的平均等待时间
disp(['平均每日完成服务的顾客数:', num2str(avg_n)]);
disp(['平均每日顾客的平均等待时间:', num2str(avg_wait_time_daily)]);
流程图:
```flow
st=>start: 开始
op1=>operation: 初始化
op2=>operation: 顾客到达
op3=>operation: 选择队列
op4=>operation: 更新等待时间总和和完成服务的顾客数
op5=>operation: 模拟100个工作日
op6=>operation: 更新平均每日完成服务的顾客数和平均每日顾客的平均等待时间
cond1=>condition: 判断是否达到工作日总时间
cond2=>condition: 判断售货员是否空闲
cond3=>condition: 判断队列中等待的顾客数
e=>end: 结束
st->op1->op2->cond1
cond1(yes)->e
cond1(no)->op2
op2->cond2
cond2(yes)->op3
cond2(no)->op3
op3->cond3
cond3(yes)->op4->op2
cond3(no)->op5
op5->op2
op5->cond1
cond1(yes, bottom)->op6
op6->e
```
阅读全文