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文件中每一个计算都是赋值的,即所计算的结果都是保存在自己设定的变量中的, ...
随机推荐
- java设计模式 策略
什么是策略设计模式? 世界永远都在变,唯一不变的就是变本身 举个生活中的例子,小时候玩的游戏中,Sony的PSP提供了统一的卡槽接口,玩家只要更换卡带就可以达到更换游戏的目的,做到了一机多用 特工执行 ...
- ssh免密码登录、secureCRT免密码登录详解
再放一张真机实现图: 接下来就详细讲述实现细节. 实现过程中吃了不少苦头,这个不对,那个不通.好在慢慢一点点摸索出来了,经验分享在这里. 希望能终结网上ssh免密码登录,以及SecureCRT免密码登 ...
- count failed: not master{ "note" : "from execCommand", "ok" : 0, "errmsg" : "not master" } at src/mongo/shell/query.js:191在SECONDARY节点无法show dbs
count failed: not master{ "note" : "from execCommand", "ok" : 0, " ...
- Ubuntu下安装部署MongoDB以及设置允许远程连接
最近因为项目原因需要在阿里云服务器上部署MongoDB,操作系统为Ubuntu,网上查阅了一些资料,特此记录一下步骤. 1.运行apt-get install mongodb命令安装MongoDB服务 ...
- [jvm]基于jvm的线程实现
一.线程的实现 学过操作系统的肯定都知道: 进程:是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竞争计算机系统资源的基本单位. 线程:是进程的一个执行单元,是进程内可调度实体. ...
- IOS中NSUserDefaults的用法
NSUserDefaults适合存储轻量级本地数据,比如要保存用户登陆的用户名.密码,使用NSUserDefaults是首选.下次再登陆的时候就可以直接从NSUserDefaults里面读取上次登陆的 ...
- 洛谷 P1546 最短网络 Agri-Net(最小生成树)
嗯... 题目链接:https://www.luogu.org/problemnew/show/P1546 首先不难看出这道题的思想是用了最小生成树,但是这道题有难点: 1.读题读不明白 2.不会读入 ...
- flask-restful基础
flask-restful基本使用 基本使用 from flask_restful import Api,Resource,reqparse,inputs from flask import Flas ...
- [BZOJ 3262]陌上开花
今天写了到偏序问题,发现博主真的是个傻X 传送门 以前的写法 /************************************************************** Probl ...
- ZOJ - 3624
当A连向C,B连向D时存在相交路径 #include<bits/stdc++.h> #define rep(i,j,k) for(int i=j;i<=k;i++) #define ...