基于matlab的排队系统仿真

news2024/11/27 6:17:48

欢迎订阅《FPGA学习入门100例教程》、《MATLAB学习入门100例教程》

目录

一、理论基础

二、核心程序

三、测试结果


一、理论基础

       排队系统是基本的离散事件系统,了解掌握离散事件系统是研究排队系统仿真不可或缺的前提。离散事件系统是指其状态变量只在某些离散时间点上发生变化的系统。这种系统的状态通常只取有限个离散值,对应于系统部件的好坏、忙闲及待处理工件个数等可能的物理状况。而这些状态的变化则由于诸如某些环境条件的出现或消失、系统操作的启动或完成等各种事件的发生而引起。离散事件系统大量地存在于我们的周围,常见的有排队系统、库存管理系统等。利用仿真技术对这些系统进行研究分析,可以了解它们的动态运行规律,从而帮助人们做出最佳的选择或决定。

       排队论最早由A.K.Erlang于1918年提出,随着社会的进步,离散事件系统及排队系统的研究也一直延伸着。在排队系统中,排队愈长就意味着浪费时间愈多,这一系统的效率就愈低,但是盲目地增加服务台也并不一定就能提高效率,因为有可能会使服务空闲时间太多。故对排队问题的分析实质上是一个平衡等待时间和服务台空闲时间的问题,也就是如何确定一个排队系统,能使临时实体和服务台两者都有利,即服务台利用率要高,实体等待时间又不太长。

排队是最基本的离散事件,研究排队系统仿真要先掌握离散事件系统的仿真。离散事件系统是指受事件驱动、系统状态跳跃式变化的动态系统,系统的迁移发生在一串离散事件点上。这种系统往往是随机的,具有复杂的变化关系,难于用常规的微分方程、差分方程等方程模型来描述,仿真技术为解决这类问题提供了有效的手段。描述离散事件系统的基本要素有,实体、事件、活动、进程等。

排队系统(即离散事件系统)仿真研究的一般步骤为:

  1. 系统建模:反映实体历经的过程,实体间的作用和逻辑关系;确定随机变量的模型。
  2. 确定仿真算法:产生随机变量;确定仿真建模策略。
  3. 建立仿真模型:定义状态变量、有关属性、活动及进程、设计仿真钟的推进方法等。
  4. 设计仿真程序:仿真语言或高级语言;长期运行或多次运行。
  5. 仿真结果分析:统计结果、可信度分析等。

二、核心程序

然后设计一个GUI界面进行运行仿真。

        分别对这几种排队方式下进行仿真,主要对比的仿真波形有三组,然后相关的文献我都已经放在参考文件夹中了。

        目前,用的比较多的都是单队列多服务台,这种模式是效率最高的。具体你可以看看我的PPT。

        另外一方面,单队列和多大队列在理论上差不多,其中区别是单多列可以快速的进入服务台,而多队列,客户在选择服务台的时候,存在着和其他客户之间选择服务台的问题,而且,会导致有些队列人多,有些队列人少的问题。从而影响了最终的排队效率。

function[Blocking_Rate,Use_Rate]=func_mms2(Time_Arrival,Time_Server,Num_queue,Num_People,Num_Server);

%三行依次为:到达时间间隔,服务时间,等待时间
People_State      = zeros(3,round(Num_People/Num_queue)+1);  
%到达时间服从指数分布
People_State(1,:) = exprnd(Time_Arrival,1,round(Num_People/Num_queue)+1);
%服务时间服从指数分布                
People_State(2,:) = exprnd(Time_Server,1,round(Num_People/Num_queue)+1);
%初始化
for i=1:Num_Server
    People_State(3,1:Num_Server)=0;
end
%累积到达时间
Time_Arrival_sum        = cumsum(People_State(1,:));
People_State(1,:)       = Time_Arrival_sum;
%离开时间
Leave_Time(1:Num_Server)= sum(People_State(:,1:Num_Server));     
Server_desk             = Leave_Time(1:Num_Server);
 
for i=(Num_Server+1):round(Num_People/Num_queue)+1
    %当时服务台最早离开的顾客的离开时间减去第i个顾客的到达时间
    if Time_Arrival_sum(i)>min(Server_desk)
       People_State(3,i)=0;                    
    else 
       People_State(3,i)=min(Server_desk)-Time_Arrival_sum(i);     
    end
   Leave_Time(i)=sum(People_State(:,i));
   for j=1:Num_Server 
       if Server_desk(j)==min(Server_desk)
          Server_desk(j)=Leave_Time(i);
          break
       end           
   end
end

Max_time                  = Leave_Time(round(Num_People/Num_queue)+1)*2;
Server_desk(1:Num_Server) = Max_time;
Blocking_Num              = 0;
Blocking_Line             = 0;

for i=1:round(Num_People/Num_queue)+1
    if Blocking_Line==0
       find_max=0;    
       for j=1:Num_Server
           if Server_desk(j)==Max_time
              %服务台有空位
              find_max=1;   
              break
           else
              continue
           end
       end
       if find_max==1
          %更新服务台
          Server_desk(j)=Leave_Time(i);
          for k=1:Num_Server
              if Server_desk(k)<Time_Arrival_sum(i)
                 Server_desk(k)=Max_time;
              else
                 continue
              end
          end
       else
            if Time_Arrival_sum(i)>min(Server_desk)
               %时间间隔T内有人离开
                for k=1:Num_Server
                    if Time_Arrival_sum(i)>Server_desk(k)
                        Server_desk(k)=Leave_Time(i);
                        break
                    else continue
                    end
                end
                for k=1:Num_Server
                    if Time_Arrival_sum(i)>Server_desk(k)
                        Server_desk(k)=Max_time;
                    else continue
                    end
                end
            else
                %时间间隔T内有人离开
                Blocking_Num=Blocking_Num+1;
                Blocking_Line=Blocking_Line+1;
            end
        end
    else
        %队长不为0的情况
        n=0;
        %计算时间间隔T内离开的人数n
        for k=1:Num_Server
            if Time_Arrival_sum(i)>Server_desk(k)
                n=n+1;
                Server_desk(k)=Max_time;
            else continue
            end
        end
        for k=1:Blocking_Line
            if Time_Arrival_sum(i)>Leave_Time(i-k)
                n=n+1;
            else continue
            end
        end
        if n<Blocking_Line+1
            Blocking_Num=Blocking_Num+1;
            for k=0:n-1
                if Leave_Time(i-Blocking_Line+k)>Time_Arrival_sum(i)
                    for m=1:Num_Server
                        if Server_desk(m)==Max_time
                            Server_desk(m)=Leave_Time(i-Blocking_Line+k);
                            break
                        else continue
                        end
                    end
                else
                    continue
                end
            end
            Blocking_Line=Blocking_Line-n+1;
        else
            %更新服务台时间表及队列长度
            for k=0:Blocking_Line
                if Time_Arrival_sum(i)<Leave_Time(i-k)
                    for m=1:Num_Server
                        if Server_desk(m)==Max_time
                            Server_desk(m)=Leave_Time(i-k);
                            break
                        else continue
                        end
                    end
                else
                    continue
                end
            end
            Blocking_Line=0;
        end
    end
end
                                                   
Blocking_Rate = Blocking_Num/(round(Num_People/Num_queue)+1);
Use_Rate      = (round(Num_People/Num_queue)+1)/(Leave_Time(round(Num_People/Num_queue)+1)*(Num_Server/Time_Server));
     

三、测试结果

  ·单队列单服务台

  ·单队列多服务台

  ·多队列多服务台

A16-22

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/27205.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SAP-FICO概览培训 的PPT 文档

目录 SAP ERP 系统功能模块概览 财务会计&#xff08;FI&#xff09;、管理会计&#xff08;CO&#xff09; 财务会计&#xff08;FI&#xff09;、管理会计&#xff08;CO&#xff09;需求出发点 FI 与CO灵活性对比 财务会计&#xff08;FI&#xff09; 财务业务一体化平台示…

JSP概述

JSP JSP是Sun为了解决动态生成HTML文档的技术&#xff0c;通过Servlet输出简单html页面信息都非常不方便。如果要输出一个复杂页面的时候&#xff0c;就更加的困难&#xff0c;而且不利于页面的维护和调试。所以sun公司推出一种叫做jsp的动态页面技术来实现对页面的输出繁锁工…

四维轻云地理空间数据协作管理平台的使用流程介绍

倾斜摄影模型和点云数据采集制作完成后&#xff0c;很多行业在进行数据查看管理和共享时具有很大的不便&#xff0c;通常需要依赖专业软件才能在电脑上进行浏览&#xff0c;倘若想将数据分享给他人查看&#xff0c;则需要进行大文件传输以及让对方安装专业软件。现如今&#xf…

年薪百万的程序员,上网都在看什么?

这个问题相信不少人都好奇&#xff0c;我揪出一位年薪百万的程序员老友&#xff0c;翻遍他的收藏夹&#xff0c;总结整理了6个网站&#xff0c;甩出来给大家。 有几个干货网站大家记得当场保存&#xff0c;要不然划过就忘了&#xff01;&#xff01; 国际各行业报告&#xff1…

python 异步线程 实现 异步生产 同步通信

🍿*★,*:.☆欢迎您/$:*.★* 🍿 目录 背景 正文 总结 背景描述

傅里叶变换的四种形式

此文转自知乎的jinjin 傅里叶变换的四种形式 - 知乎 傅里叶变换是信号的一种描述方式&#xff0c;通过增加频域的视角&#xff0c;将时域复杂波形表示为简单的频率函数&#xff0c;获得时域不易发现的与信号有关的其他特征。 根据时间域信号x自变量的不同&#xff0c;可以将信号…

sqli-labs/Less-45

这一关有没有报错信息 所以我们不能从报错信息中得知注入类型 我们只能通过登陆成功或者失败去辨别我们判断的注入类型正确与否 然后我们也不懂注入点 所以只能进行尝试了 如果两个参数在SQL语句中都被单引号包裹住 那么假设username为注入点输入如下 username admin# pass…

【强大的数据迁移和恢复解决方案】KernelApps及其产品介绍

KernelApps是 范围广泛的强大的数据迁移和 恢复解决方案 可以根据用户的需求提供多种采购方案 KernelApps提供 交换服务器、Office 365、 电子邮件迁移、Outlook等方面工具 其产品包括数据恢复、文件修复、 数据迁移、电子邮件迁移、 媒体恢复、云备份、云迁移等解决方…

基于32单片机的多功能电子语音时钟

本设计是32单片机的多功能电子语音时钟设计&#xff0c;主要实现以下功能&#xff1a; 1.通过OLED显示时间&#xff0c;日期&#xff0c;温度&#xff0c;湿度等信息 2.到达整点时能够语音播报时间和温湿度 3.可通过按键使语音模块播报时间和温湿度 4.可通过按键调整当前时间&…

Mac M1安装Centos8

M1 芯片 Centos8 百度网盘下载的慢&#xff0c;大家可以直接给我留言&#xff0c;我用奶牛快传分享给大家 链接: https://pan.baidu.com/s/1gT7TnBk5HnT27F82FGht7w?pwd1234 提取码: 1234 复制这段内容后打开百度网盘手机App&#xff0c;操作更方便哦 安装 第一次输入 r 依…

推荐一款高效率前端开发神器,功能太强大了

当前端收到一张设计稿的时候&#xff0c;他们需要考虑非常多的问题。 而第一个摆在面前的问题就是 - 切图。作为连接设计师和前端的重要“纽带”&#xff0c;如果切图不准确&#xff0c;很容易导致最终的产品呈现与设计稿大相径庭。 随之而来的第二个问题就是 - 设计还原。页面…

荧光标记转铁蛋白-(FITC, cy3, cy5, cy7, 香豆素, 罗丹明)

转铁蛋白&#xff08;Tf&#xff09;结合铁是通过与其受体&#xff0c;即Transferrin Receptor 1(TfR1)相互作用而实现的。TfR1 是一种表达于细胞表面的糖蛋白&#xff0c;由两个同源二聚体的亚基通过二硫键连接而成。在细胞表面&#xff0c;Tf与Fe3相互作用形成全铁-Tf&#x…

ESP32 入门笔记07: ESP-NOW (ESP32 for Arduino)

【B站乐鑫】 ESP-NOW 无线通信方案简介 ESP-NOW 是一种快速、无连接的通信技术&#xff0c;具有短数据包传输的特点。 ESP-NOW 是乐鑫开发的一种“协议”&#xff0c;它使多个设备无需使用 Wi-Fi 即可相互通信。该协议类似于低功耗 2.4GHz 无线连接 。在通信之前需要设备之间…

什么是数字孪生?数字孪生技术有没有真正的实用价值?

可以很确定地说&#xff0c;数字孪生技术为我们的生活与工作都提供了巨大的价值。过去几年&#xff0c;在经历了”三起三落”之后&#xff0c;数字孪生再次成为资本和舆论关注的焦点。“数字孪生就像是给你了一个水晶球&#xff0c;能够根据过去和当下发生的事情来预测并模拟未…

HDMI接口类型种类区分图(高清图)

HDMI接口类型这么多种啊&#xff0c;主要有A、B、C、D、E五种类型。 1、A类&#xff08;Type A&#xff09; HDMI A Type是使用最广泛的HDMI线缆&#xff0c;HDMI A接口共有19pin&#xff0c;宽度为13.9毫米&#xff0c;厚度为4.45毫米。 2、B类&#xff08;Type B&#xff…

【SpringCloud】04 网关springcloud gateway

网关springcloud gateway 上面的架构&#xff0c;会存在着诸多的问题&#xff1a; 客户端多次请求不同的微服务&#xff0c;增加客户端代码或配置编写的复杂性 认证复杂&#xff0c;每个服务都需要独立认证。 存在跨域请求&#xff0c;在一定场景下处理相对复杂。 网关可以做…

【QT】编译QtWebEngine(Build QtWebEngine from source)Win10+QT5.7.1_x64+VS2015

1、前言 关于QtWebEngine是干什么的&#xff0c;怎么用的&#xff0c;不在此赘述。 1.1、为什么要编译QtWebEngine QT默认的QtWebEngine是不支持mp3、mp4解码的&#xff0c;也就是说&#xff0c;如果想要在QT浏览网页的时候支持在线播放音视频&#xff0c;就需要让QtWebEngi…

前端品优购项目准备工作

网站制作流程&#xff1a; 初稿审核&#xff1a;网页美工会制作原型图和psd效果图 品优购项目规划&#xff1a; 1 品优购项目整体介绍 描述&#xff1a;电商网站&#xff0c;要完成PC端首页&#xff0c;列表页&#xff0c;注册页面的制作 2 品优购项目学习目的 电商类网站比…

nRF Connect for Desktop[自己的APP环境搭建]

本文源码仓库地址:https://github.com/NordicSemiconductor/pc-nrfconnect-ble/blob/main/package.json nRF Connect for Desktop是nordic自己做的一个PC端的蓝牙工具,配合nordic的dongle可以实现蓝牙的很多功能,要浏览本文要有如下知识储备: 1.nRF Connect for Desktop的APP是…

ELFK集群部署与Logstash的过滤模块

ELFK集群部署与Logstash的过滤模块ELFK集群部署与Logstash的过滤模块一、ELFK集群部署&#xff08;FilebeatELK&#xff09;Filebeatfilebeat 结合 logstash 带来好处&#xff1a;1.1 部署ELK集群1.2 安装Filebeat&#xff08;Apache节点&#xff09;1.3 设置 filebeat 的主配置…