matlab实现M/M/1排队系统
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排队系统的更多相关文章
- 利用JS模拟排队系统
我爱撸码,撸码使我感到快乐!大家好,我是Counter.今天给大家分享的是js模拟排队系统,刚开始有排队序列,序列里有vip用户和普通用户,vip用户永远位于普通用户的前面,只有当当前vip用户都办理 ...
- 叫号系统排队系统挂号系统实现(JAVA队列)
关于队列,使用的地方很的多. 现实中有许多的样例. 比方医院的挂号系统,银行里的叫号系统,食堂里的排队打饭等等.市场上又这种排队取号的设备.他们的功能基本例如以下: 1.系统可联网联机统一发号.2.系 ...
- MM1排队系统
#coding=utf-8 import time import random as rd #import math import pylab as pl def simulate(nameda,u) ...
- MATLAB信号与系统分析(三)——连续信号与系统的复频域分析及MATLAB实现
一.系统的拉普拉斯变换和反变换 1.MATLAB函数 F=laplace(f) %求拉氏变换 f=ilaplace(F) %求拉氏反变换 2.例子 clear all;clc;close all f= ...
- 基于Matlab的多自由度系统固有频率及振型计算
可参考文涛,基于Matlab语言的多自由度振动系统的固有频率及主振型计算分析,2007 对于无阻尼系统 [VEC,VAL]=eig(inv(A)*K) 对于有阻尼系统,参考振动论坛计算程序 输入M,D ...
- 赴美工作常识(Part 6 - 绿卡排队)
上一篇<赴美工作常识(Part 5 - 绿卡优先级)>解释完排队的优先级是怎么确定的,以及 PERM 和 I–140 表的意义,接下来就要解释一下队具体是怎么排的以及排到之后的 I–485 ...
- 【matlab】设定C++编译器
在用matlab2016a,运行的代码涉及到C++混编,要用mex把C++代码编译出来. 记得几年前的matlab版本,通过: mex -setup 就可以设定了,选择要使用的编译器(文本的超链接), ...
- MATLAB获取“非免驱的相机或者摄像头”的图像数据
Image Acquisition Toolbox™ Adaptor Kit 图像採集工具箱 当要使用MATLAB获取"非免驱的相机或者摄像头"的图像数据时,须要开发一个插件,MA ...
- 【matlab】命令行窗口一直不停的输出ans=1?
ans= 1 matlab里面的ans是一个系统量,当m文件中出现非赋值性的计算时,matlab会把结果自动存入ans. 如果m文件中每一个计算都是赋值的,即所计算的结果都是保存在自己设定的变量中的, ...
随机推荐
- Log--检查各数据库日志的使用情况
-- Recovery model, log reuse wait description, log file size,-- log usage size and compatibility lev ...
- C#Async,await异步简单介绍
C# 5.0 引入了async/await,.net framework4.5开始支持该用法 使用: 由async标识的方法必须带有await,如果不带await,方法将被同步执行 static vo ...
- mysql 新建数据库与表
- NSSet集合
前言 NSSet:集合 NSSet 集合跟数组差不多,但 Set 集合不能存放相同的对象,它是一组单值对象的集合,被存放进集合中的数据是无序的,它可以是可变的,也可以是不变的. Xcode 7 对系统 ...
- 汇编Shellcode的技巧
汇编Shellcode的技巧 来源 https://www.4hou.com/technology/3893.html 本文参考来源于pentest 我们在上一篇提到要要自定义shellcode,不 ...
- c++多线程基础3(mutex)
整理自:zh.cppreference.com/w/cpp/thread 互斥锁 互斥算法避免多个线程同时访问共享资源.这会避免数据竞争,并提供线程间的同步支持.定义于头文件 <mutex> ...
- 洛谷P3236 [HNOI2014]画框(最小乘积KM)
题面 传送门 题解 我似乎连\(KM\)都不会打啊→_→ 和bzoj2395是一样的,只不过把最小生成树换成\(KM\)了.因为\(KM\)跑的是最大权值所以取个反就行了 //minamoto #in ...
- MySQL5.7配置(第一次使用)
MySQL5.7配置(第一次使用) 最近因为工作需要学习mysql的增删改查.用的公司的电脑,之前有人已经安装过mysql5.7,等于使用了免安装版,重新开始配置.参考了以下文章 http://blo ...
- jeesite 的提示消息图标
jeesite 的提示消息图标 jeesite 框架的提示信息 保存数据时 总是显示一个叉子图标 不符合要求 原因: 不加成功两字:如下 后来大神说 保存数据提示语句必须加“”“成功” 才会出现正确 ...
- JavaScript笔记Array.filter(Boolean)
ECMAScirpt5 中 Array 类中的 filter 方法使用目的是移除所有的 ”false“ 类型元素 (false, null, undefined, 0, NaN or an empt ...