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

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

matlab实现M/M/1排队系统的更多相关文章

  1. 利用JS模拟排队系统

    我爱撸码,撸码使我感到快乐!大家好,我是Counter.今天给大家分享的是js模拟排队系统,刚开始有排队序列,序列里有vip用户和普通用户,vip用户永远位于普通用户的前面,只有当当前vip用户都办理 ...

  2. 叫号系统排队系统挂号系统实现(JAVA队列)

    关于队列,使用的地方很的多. 现实中有许多的样例. 比方医院的挂号系统,银行里的叫号系统,食堂里的排队打饭等等.市场上又这种排队取号的设备.他们的功能基本例如以下: 1.系统可联网联机统一发号.2.系 ...

  3. MM1排队系统

    #coding=utf-8 import time import random as rd #import math import pylab as pl def simulate(nameda,u) ...

  4. MATLAB信号与系统分析(三)——连续信号与系统的复频域分析及MATLAB实现

    一.系统的拉普拉斯变换和反变换 1.MATLAB函数 F=laplace(f) %求拉氏变换 f=ilaplace(F) %求拉氏反变换 2.例子 clear all;clc;close all f= ...

  5. 基于Matlab的多自由度系统固有频率及振型计算

    可参考文涛,基于Matlab语言的多自由度振动系统的固有频率及主振型计算分析,2007 对于无阻尼系统 [VEC,VAL]=eig(inv(A)*K) 对于有阻尼系统,参考振动论坛计算程序 输入M,D ...

  6. 赴美工作常识(Part 6 - 绿卡排队)

    上一篇<赴美工作常识(Part 5 - 绿卡优先级)>解释完排队的优先级是怎么确定的,以及 PERM 和 I–140 表的意义,接下来就要解释一下队具体是怎么排的以及排到之后的 I–485 ...

  7. 【matlab】设定C++编译器

    在用matlab2016a,运行的代码涉及到C++混编,要用mex把C++代码编译出来. 记得几年前的matlab版本,通过: mex -setup 就可以设定了,选择要使用的编译器(文本的超链接), ...

  8. MATLAB获取“非免驱的相机或者摄像头”的图像数据

    Image Acquisition Toolbox™ Adaptor Kit 图像採集工具箱 当要使用MATLAB获取"非免驱的相机或者摄像头"的图像数据时,须要开发一个插件,MA ...

  9. 【matlab】命令行窗口一直不停的输出ans=1?

    ans= 1 matlab里面的ans是一个系统量,当m文件中出现非赋值性的计算时,matlab会把结果自动存入ans. 如果m文件中每一个计算都是赋值的,即所计算的结果都是保存在自己设定的变量中的, ...

随机推荐

  1. javascript js自执行函数

    javascript  自执行函数 一.自执行函数几种写法: 写法一: ( function(){ //代码 } )(); 写法二: ( function(){ //代码 }()); 二.作用: 隔离 ...

  2. Java读写配置文件prop.properties

    Java读写配置文件prop.properties @Test public void fun() throws IOException{ Properties prop=new Properties ...

  3. sklearn的train_test_split函数

    train_test_split函数用于将矩阵随机划分为训练子集和测试子集,并返回划分好的训练集测试集样本和训练集测试集标签. from sklearn.model_selection import ...

  4. django修改数据库连接

    settings.py DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'domain', 'USER ...

  5. VS2010 UAC执行级别修改

    配置属性 -> 链接器 -> 清单文件 -> UAC执行级别 改为 requireAdministrator 这个级别即可.

  6. easyui打开dialog后给弹出框内输入框赋值问题

    在写一个弹出页面的时候,里面有一些输入框,需要在弹出的时候从数据库取值并且赋值,刚开始在弹出的时候使用$(id).val(value),结果赋值失败,为空当时纠结了一会,然后突然想到在easyui打开 ...

  7. PyCharm4.5.4注册码

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 name : newasp == ...

  8. SHELL编程之条件判断

    一.if 语句结构 (1)单分支语句结构 if  条件测试操作 then  命令序列 fi #!/bin/bash MOUNT_DIR="/media/cdrom/" #-d $M ...

  9. SDUT OJ 数据结构上机测试1:顺序表的应用

    数据结构上机测试1:顺序表的应用 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Descri ...

  10. grafana使用小节

    安装准备 安装grafana 安装mysql grafana操作步骤 新建数据源,支持mysql 数据库连接失败处理: https://www.jianshu.com/p/684bc3a77ac9 新 ...