Matlab实现。

分为主函数 MyLine 和被调用函数 Func。

主函数 MyLine 实现在 Func 函数的基础上实现序贯法, 将平均等待队长作为每次模拟的 X,求出置信区间。
Func 函数实现单次模拟排队系统,返回向量 vector。向量vector分别包括仿真平均排队时间Cus_Queue_avg,仿真平均等待时间Cus_Wait_avg,仿真系统中平均等待队长 Cus_Wait_Queue_avg,仿真系统中平均顾客数 Cus_Wait_CusNum_avg。

主函数 MyLine:

 clear;
clc;
Alpha=0.1; %置信水平
Gama=0.1; %相对精度
Beta=0.1;
Lambda=0.2; %到达率 Lambda
Mu=0.25; %服务率 Mu
time=; %单回模拟次数
%序贯法实现
All_vector=Func( Lambda,Mu );%函数返回的向量
for i=:time
All_vector=[All_vector;Func( Lambda,Mu )];
end
vect=sum(All_vector)/time;%各列求和取平均
%下面系统中平均等待队长作为每次模拟的 X,用来评估运行结果
S=sum((All_vector()-vect()).*(All_vector()-vect()))/(ti
me-);%后面假设 S 不变
Betan=sqrt(S/time)*tinv(-Alpha/,time-);
Gaman=Betan/vect();
while(Gaman>=Gama) %Betan>=Beta||
time=time+;
All_vector=[All_vector;Func( Lambda,Mu )];
vect=sum(All_vector)/time;
S=sum((All_vector()-vect()).*(All_vector()-vect()))/(ti
me-);%后面假设 S 不变
Betan=sqrt(S/time)*tinv(-Alpha/,time-);
Gaman=Betan/vect();
end
time
disp(['系统中平均等待队长的置信区间下界
=',num2str(vect(3)-Betan)]);
disp(['系统中平均等待队长的置信区间上界
=',num2str(vect(3)+Betan)]);

Func 函数:

 function [ vector ] = Func( Lambda,Mu )
%单次的排队模拟,样本数 CusTotal
CusTotal=; %仿真顾客总数%=input('请输入仿真顾客
总数 CusTotal=');
Cus_Arrive=zeros(,CusTotal);%到达时刻
Cus_Leave=zeros(,CusTotal);%离开时刻
IntervaCus_Arrive=-log(rand(,CusTotal))/Lambda;%到达时间间

Cus_Arrive=cumsum(IntervaCus_Arrive); %每列
累加,形成到达初始时刻;如果只有一行,该行向后叠加
Interval_Serve=-log(rand(,CusTotal))/Mu; %服务时间间隔
%为事件调度法做准备
Cus_Leave()=Cus_Arrive()+Interval_Serve();%顾客离开时间
for i=:CusTotal
if Cus_Leave(i-)<Cus_Arrive(i)
Cus_Leave(i)=Cus_Arrive(i)+Interval_Serve(i);
else
Cus_Leave(i)=Cus_Leave(i-)+Interval_Serve(i);
end
end
Cus_Wait=Cus_Leave-Cus_Arrive; %各顾客在系统中的等待时间
%mean:如果是 n*m 的矩阵,mean 对各列分别进行求平均;当 n= 时,
对一行求平均
Cus_Wait_avg=mean(Cus_Wait); %平均等待时间
Cus_Queue=Cus_Wait-Interval_Serve;%各顾客在系统中的排队时间
Cus_Queue_avg=mean(Cus_Queue); %平均排队时间
%TimePoint 系统调度时间
TimePoint=[Cus_Arrive,Cus_Leave];%系统中顾客数随时间的变化
TimePoint=sort(TimePoint);
CusNum=zeros(size(TimePoint));
temp=; %指向事件表
CusNum()=;
%统计 dt 时间内的排队人数——事件调度法
%截止到 i,还有多少个事件
for i=:length(TimePoint)
%后一事件的结束时间晚于前一事件的结束时间
%所以只要第 temp- 个事件没有结束, 后面的事件到了发生时间
(事件仿真钟<=系统仿真钟),都要加入 CusNum 中计数
if
(temp<=length(Cus_Arrive))&&(TimePoint(i)==Cus_Arrive(temp)
)
CusNum(i)=CusNum(i-)+;
temp=temp+;
else
CusNum(i)=CusNum(i-)-;
end
end
%系统中平均顾客数计算
Time_interval=zeros(size(TimePoint));
Time_interval()=Cus_Arrive();
for i=:length(TimePoint)
Time_interval(i)=TimePoint(i)-TimePoint(i-);
end
%这里画一下图即可.i 时间段*(i-)时刻统计的事件数量。类似于向
后积分
CusNum_fromStart=[ CusNum];
Cus_Wait_CusNum_avg=sum(CusNum_fromStart.*[Time_interval
] )/TimePoint(end);
%系统平均等待队长
QueLength=zeros(size(CusNum));
for i=:length(CusNum)
if CusNum(i)>=
%还有等待事件(满足事件仿真钟<=系统仿真钟,但没有发
生)
QueLength(i)=CusNum(i)-;
else
QueLength(i)=;
end
end
Cus_Wait_Queue_avg=sum([ QueLength].*[Time_interval
] )/TimePoint(end);
%仿真值与理论值比较
row=Lambda/Mu;
QueLength_avg=row*row/(-row);%Q
CusNum_avg=row/(-row);%L
Queue_avg=QueLength_avg/Lambda;%d
Wait_avg=CusNum_avg/Lambda;%w
%返回的向量
vector=[Cus_Queue_avg,Cus_Wait_avg,Cus_Wait_Queue_avg,Cus_W
ait_CusNum_avg];
end

基本代码都在了,报告自己写吧。

最新文章

  1. ubuntu下的时间设定(硬件时间,系统时间,本地时间)
  2. 彼得原理(The Peter Principle)
  3. Redstone 云观象台 服务器部署 - Nginx配置文件
  4. 玩转OpenStack网络Neutron(2)--使用Open vSwitch实现VLAN类型租户网络
  5. C++基础学习笔记----第七课(面向对象的基本概念)
  6. JSP中文编码问题
  7. POJ 2976 Dropping tests 01分数规划 模板
  8. BZOJ 1041: [HAOI2008]圆上的整点【数论,解方程】
  9. BigDecimal.valueOf
  10. Hystrix快速入门
  11. FL studio钢琴卷工具简介
  12. LostRoutes项目日志——编辑project.json
  13. 洛谷P3248 树 [HNOI2016] 主席树+倍增+分治
  14. python 自然语言处理库https://www.nltk.org/nltk_data/
  15. 20155326 第五周加分题--mybash的实现
  16. spring.net框架配置和使用
  17. Winform关于OpenFileDialog的使用方法
  18. 【UOJ #205】【APIO 2016】Fireworks
  19. 【input】输入框组件说明
  20. JavaScript之原型 Prototype

热门文章

  1. 去掉html标签方法
  2. WebStrom常用快捷键
  3. Kylin -- Dup key found 问题
  4. 并不能来一发50AC
  5. Java设计模式之单例设计模式 入门实例
  6. C语言中静态断言的使用
  7. 获取表单提交的数据getParameter()方法
  8. Python3之json模块
  9. 剩下的树 THU 机试
  10. SQL中删除重复的行(重复数据),只保留一行 转