matlab仿真多服务台排队系统
MATLAB模拟银行单服务台排队模型

MATLAB模拟银行单服务台排队模型银行单服务台排队模型是一种常见的排队模型,主要用于描述在银行等排队服务场所中,只有一个服务员的情况下,客户如何排队等待服务的情况。
1.模型假设在进行银行单服务台排队模型的建模过程中,我们需要进行一些假设,以简化问题的复杂性。
这些假设包括:-客户到达时间服从泊松分布:客户到达时间间隔服从泊松分布,即客户到达服从一个固定的时间间隔。
-服务时间服从指数分布:每个客户的服务时间是独立同分布的,服从指数分布。
-服务台只有一个:我们假设只有一个服务台,客户按照到达的顺序排队等待服务。
-客户不能提前离开:我们不考虑客户在等待期间可能会放弃等待而提前离开的情况。
2.模型参数在建立银行单服务台排队模型时,我们需要定义一些模型参数。
这些参数包括:-平均到达率λ:客户的平均到达率,表示单位时间内到达的客户数量的期望值。
-平均服务率μ:服务员的平均服务率,表示单位时间内服务的客户数量的期望值。
-服务台利用率ρ:服务台的利用率,表示服务台的平均使用率。
-平均等待时间W:客户平均等待服务的时间。
-平均队列长度L:客户平均排队等待的队列长度。
3.模拟过程为了模拟银行单服务台排队模型,我们使用MATLAB编程进行模拟。
以下是一个简单的模拟过程:-生成客户到达时间间隔:使用泊松分布生成客户到达时间间隔。
-生成客户服务时间:使用指数分布生成客户的服务时间。
-计算客户到达时间和服务完成时间:根据客户的到达时间间隔和服务时间,计算客户的到达时间和服务完成时间。
-计算客户的等待时间:根据客户的到达时间和服务完成时间,计算客户的等待时间。
-统计模拟结果:统计客户的等待时间、队列长度等模拟结果。
4.结果分析通过对模拟结果的分析,我们可以得到一些关键的结果,包括:-平均等待时间:通过计算客户的平均等待时间,可以评估服务台的效率和客户的等待体验。
-平均队列长度:通过计算客户的平均排队等待的队列长度,可以评估服务台的负载情况。
matlab系统仿真

第七章系统仿真的MATLAB实现由于计算机技术的高速发展,我们可以借助计算机完成系统的数字仿真。
综前所述,数字仿真实质上是根据被研究的真实系统的模型,利用计算机进行实验研究的一种方法。
仿真的主要过程是:建立模型、仿真运行和分析研究仿真结果。
仿真运行就是借助一定的算法,获得系统的有关信息。
MATLAB是一种面向科学与工程计算的高级语言,它集科学计算、自动控制、信号处理、神经网络和图像处理等学科的处理功能于一体,具有极高的编程效率。
MATLAB是一个高度集成的系统,MATLAB提供的Simulink是一个用来对动态系统进行建模、仿真和分析的软件包,它支持线性和非线性系统,能够在连续时间域、离散时间域或者两者的混合时间域里进行建模,它同样支持具有多种采样速率的系统。
在过去几年里,Simulink已经成为数学和工业应用中对动态系统进行建模时使用得最为广泛的软件包。
MATLAB仿真有两种途径:(1)MATLAB可以在SIMULINK窗口上进行面向系统结构方框图的系统仿真;(2)用户可以在MATLAB的COMMAND窗口下,用运行m文件,调用指令和各种用于系统仿真的函数,进行系统仿真。
这两种方式可解决任意复杂系统的动态仿真问题,前者编辑灵活,而后者直观性强,实现可视化编辑。
下面介绍在MATLAB上实现几类基本仿真。
7.1 计算机仿真的步骤在学习计算机仿真以前,让我们先总结一下计算机仿真的步骤。
计算机仿真,概括地说是一个“建模—实验—分析”的过程,即仿真不单纯是对模型的实验,还包括从建模到实验再到分析的全过程。
因此进行一次完整的计算机仿真应包括以下步骤:(1)列举并列项目每一项研究都应从说明问题开始,问题由决策者提供或由熟悉问题的分析者提供。
(2)设置目标及完整的项目计划目标表示仿真要回答的问题、系统方案的说明。
项目计划包括人数、研究费用以及每一阶段工作所需时间。
(3)建立模型和收集数据模型和实际系统没有必要一一对应,模型只需描述实际系统的本质或者描述系统中所研究部分的本质。
基于matlab的simulink的cdma系统多用户仿真要点

基于 Matlab 的 Simulink 的 CDMA 系统多用户仿真要点简介CDMA(Code Division Multiple Access)是一种数字无线通信技术,其中多个用户在同一频带上传输数据,每个用户使用唯一的编码序列来区分其他用户的信息。
在CDMA系统中,使用扩频技术将数据编码成宽带信号,然后使用独立的编码序列将它们混合在一起,并在接收端进行解码以恢复原始数据,因此CDMA技术可以提供更高的信道容量。
通过使用基于 Matlab 的 Simulink,可以方便地进行CDMA系统的仿真,并对多个用户进行仿真,以评估系统性能。
要点1. CDMA系统的建模在CDMA系统的仿真过程中,需要首先建立系统模型。
我们可以使用 Simulink 中的 Signal Processing Blockset 来实现CDMA系统模型的建模。
Signal Processing Blockset 中包含了各种信号处理模块,包括滤波器、混合器和解扰器等等,这些模块可以用来构建CDMA系统的传输通道。
2. 多用户仿真在CDMA系统中,多个用户可以同时传输数据,因此我们需要对多个用户进行仿真,并分别评估其性能。
为了实现这个目标,我们可以使用 Signal Processing Blockset 中的 Multiport Switch 模块,将多个用户的数据流合并成一个流,然后通过解码器对其进行解码。
在这个过程中,我们可以使用不同的编码序列对每个用户进行编码,以确保数据的安全性。
3. 性能评估在CDMA系统中,我们可以通过 BER(Bit Error Rate)来评估系统的性能。
在仿真过程中,我们可以通过向系统中注入固定数量的错误比特,并计算接收端出现错误的比特数量来计算BER。
通过多次仿真,可以评估不同编码序列、码元速率、信噪比等因素对系统性能的影响。
在本篇文档中,我们介绍了基于 Matlab 的 Simulink 的 CDMA 系统多用户仿真的要点。
MM1排队系统仿真matlab实验报告

M/M/1排队系统实验报告一、实验目的本次实验要求实现M/M/1单窗口无限排队系统的系统仿真,利用事件调度法实现离散事件系统仿真,并统计平均队列长度以及平均等待时间等值,以与理论分析结果进行对比。
二、实验原理根据排队论的知识我们知道,排队系统的分类是根据该系统中的顾客到达模式、服务模式、服务员数量以及服务规则等因素决定的。
1、 顾客到达模式设到达过程是一个参数为λ的Poisson 过程,则长度为t 的时间内到达k 个呼叫的概率 服从Poisson 分布,即etkk k t t p λλ-=!)()(,⋅⋅⋅⋅⋅⋅⋅⋅⋅=,2,1,0k ,其中λ>0为一常数,表示了平均到达率或Poisson 呼叫流的强度。
2、 服务模式设每个呼叫的持续时间为i τ,服从参数为μ的负指数分布,即其分布函数为{}1,0t P X t e t μ-<=-≥3、 服务规则先进先服务的规则(FIFO ) 4、 理论分析结果在该M/M/1系统中,设λρμ=,则稳态时的平均等待队长为1Q ρλρ=-,顾客的平均等待时间为T ρμλ=-。
三、实验内容M/M/1排队系统:实现了当顾客到达分布服从负指数分布,系统服务时间也服从负指数分布,单服务台系统,单队排队,按FIFO (先入先出队列)方式服务。
四、采用的语言MatLab 语言 源代码:clear; clc;%M/M/1排队系统仿真SimTotal=input('请输入仿真顾客总数SimTotal='); %仿真顾客总数;Lambda=0.4; %到达率Lambda;Mu=0.9; %服务率Mu;t_Arrive=zeros(1,SimTotal);t_Leave=zeros(1,SimTotal);ArriveNum=zeros(1,SimTotal);LeaveNum=zeros(1,SimTotal);Interval_Arrive=-log(rand(1,SimTotal))/Lambda;%到达时间间隔Interval_Serve=-log(rand(1,SimTotal))/Mu;%服务时间t_Arrive(1)=Interval_Arrive(1);%顾客到达时间ArriveNum(1)=1;for i=2:SimTotalt_Arrive(i)=t_Arrive(i-1)+Interval_Arrive(i);ArriveNum(i)=i;endt_Leave(1)=t_Arrive(1)+Interval_Serve(1);%顾客离开时间LeaveNum(1)=1;for i=2:SimTotalif t_Leave(i-1)<t_Arrive(i)t_Leave(i)=t_Arrive(i)+Interval_Serve(i);elset_Leave(i)=t_Leave(i-1)+Interval_Serve(i);endLeaveNum(i)=i;endt_Wait=t_Leave-t_Arrive; %各顾客在系统中的等待时间t_Wait_avg=mean(t_Wait);t_Queue=t_Wait-Interval_Serve;%各顾客在系统中的排队时间t_Queue_avg=mean(t_Queue);Timepoint=[t_Arrive,t_Leave];%系统中顾客数随时间的变化Timepoint=sort(Timepoint);ArriveFlag=zeros(size(Timepoint));%到达时间标志CusNum=zeros(size(Timepoint));temp=2;CusNum(1)=1;for i=2:length(Timepoint)if (temp<=length(t_Arrive))&&(Timepoint(i)==t_Arrive(temp)) CusNum(i)=CusNum(i-1)+1;temp=temp+1;ArriveFlag(i)=1;elseCusNum(i)=CusNum(i-1)-1;endend%系统中平均顾客数计算Time_interval=zeros(size(Timepoint));Time_interval(1)=t_Arrive(1);for i=2:length(Timepoint)Time_interval(i)=Timepoint(i)-Timepoint(i-1);endCusNum_fromStart=[0 CusNum];CusNum_avg=sum(CusNum_fromStart.*[Time_interval 0] )/Timepoint(end);QueLength=zeros(size(CusNum));for i=1:length(CusNum)if CusNum(i)>=2QueLength(i)=CusNum(i)-1;elseQueLength(i)=0;endendQueLength_avg=sum([0 QueLength].*[Time_interval 0] )/Timepoint(end);%系统平均等待队长%仿真图figure(1);set(1,'position',[0,0,1000,700]);subplot(2,2,1);title('各顾客到达时间和离去时间');stairs([0 ArriveNum],[0 t_Arrive],'b');hold on;stairs([0 LeaveNum],[0 t_Leave],'y');legend('到达时间','离去时间');hold off;subplot(2,2,2);stairs(Timepoint,CusNum,'b')title('系统等待队长分布');xlabel('时间');ylabel('队长');subplot(2,2,3);title('各顾客在系统中的排队时间和等待时间');stairs([0 ArriveNum],[0 t_Queue],'b');hold on;stairs([0 LeaveNum],[0 t_Wait],'y');hold off;legend('排队时间','等待时间');%仿真值与理论值比较disp(['理论平均等待时间t_Wait_avg=',num2str(1/(Mu-Lambda))]);disp(['理论平均排队时间t_Wait_avg=',num2str(Lambda/(Mu*(Mu-Lambda)))]);disp(['理论系统中平均顾客数=',num2str(Lambda/(Mu-Lambda))]);disp(['理论系统中平均等待队长=',num2str(Lambda*Lambda/(Mu*(Mu-Lambda)))]);disp(['仿真平均等待时间t_Wait_avg=',num2str(t_Wait_avg)])disp(['仿真平均排队时间t_Queue_avg=',num2str(t_Queue_avg)])disp(['仿真系统中平均顾客数=',num2str(CusNum_avg)]);disp(['仿真系统中平均等待队长=',num2str(QueLength_avg)]);五、数据结构1.仿真设计算法(主要函数)利用负指数分布与泊松过程的关系,产生符合泊松过程的顾客流,产生符合负指数分布的随机变量作为每个顾客的服务时间:Interval_Arrive=-log(rand(1,SimTotal))/Lambda;%到达时间间隔,结果与调用exprnd(1/Lambda,m)函数产生的结果相同Interval_Serve=-log(rand(1,SimTotal))/Mu;%服务时间间隔t_Arrive(1)=Interval_Arrive(1);%顾客到达时间时间计算t_Wait=t_Leave-t_Arrive;%各顾客在系统中的等待时间t_Queue=t_Wait-Interval_Serve; %各顾客在系统中的排队时间由事件来触发仿真时钟的不断推进。
用Matlab实现排队过程的仿真

用Matlab实现排队过程的仿真一、引言排队是日常生活中经常遇到的现象。
通常,当人、物体或是信息的到达速率大于完成服务的速率时,即出现排队现象。
排队越长,意味着浪费的时间越多,系统的效率也越低。
在日常生活中,经常遇到排队现象,如开车上班、在超市等待结账、工厂中等待加工的工件以及待修的机器等。
总之,排队现象是随处可见的。
排队理论是运作管理中最重要的领域之一,它是计划、工作设计、存货控制及其他一些问题的基础。
Matlab 是MathWorks 公司开发的科学计算软件,它以其强大的计算和绘图功能、大量稳定可靠的算法库、简洁高效的编程语言以及庞大的用户群成为数学计算工具方面的标准,几乎所有的工程计算领域,Matlab 都有相应的软件工具箱。
选用 Matlab 软件正是基于 Matlab 的诸多优点。
二、排队模型三.仿真算法原理( 1 )顾客信息初始化根据到达率λ和服务率µ来确定每个顾客的到达时间间隔和服务时间间隔。
服务间隔时间可以用负指数分布函数 exprnd() 来生成。
由于泊松过程的时间间隔也服从负指数分布,故亦可由此函数生成顾客到达时间间隔。
需要注意的是 exprnd() 的输入参数不是到达率λ和服务率µ而是平均到达时间间隔 1/ λ和平均服务时间 1/ µ。
根据到达时间间隔,确定每个顾客的到达时刻 . 学习过 C 语言的人习惯于使用 FOR 循环来实现数值的累加,但 FOR 循环会引起运算复杂度的增加而在 MATLAB 仿真环境中,提供了一个方便的函数 cumsum() 来实现累加功能读者可以直接引用对当前顾客进行初始化。
第 1 个到达系统的顾客不需要等待就可以直接接受服务其离开时刻等于到达时刻与服务时间之和。
( 2 )进队出队仿真在当前顾客到达时刻,根据系统内已有的顾客数来确定是否接纳该顾客。
若接纳则根据前一顾客的离开时刻来确定当前顾客的等待时间、离开时间和标志位;若拒绝,则标志位置为 0。
基于计算机仿真的排队系统优化问题研究

基于计算机仿真的排队系统优化问题研究一、本文概述随着信息技术的快速发展和广泛应用,排队系统在各种实际场景中的应用越来越普遍,如银行、医院、商场、交通等各个领域。
然而,传统的排队系统往往存在效率不高等待时间长、服务质量不稳定等问题,这些问题不仅影响了服务效率,也降低了客户满意度。
因此,如何优化排队系统,提高服务效率和质量,成为了当前研究的热点之一。
基于计算机仿真的排队系统优化问题研究,旨在通过计算机仿真技术,对排队系统的运行过程进行模拟和分析,发现系统存在的问题和瓶颈,进而提出有效的优化策略。
本文首先介绍了排队系统的基本概念和分类,分析了传统排队系统存在的问题和挑战。
然后,详细介绍了计算机仿真技术在排队系统优化中的应用,包括仿真模型的建立、仿真实验的设计和实施、仿真结果的分析和评估等方面。
接着,本文重点探讨了基于计算机仿真的排队系统优化策略,包括服务流程优化、资源配置优化、排队规则优化等方面,并通过案例分析和实验验证,证明了这些优化策略的有效性和可行性。
本文的研究不仅有助于解决传统排队系统存在的问题,提高服务效率和质量,也有助于推动计算机仿真技术在排队系统优化中的广泛应用和发展。
本文的研究方法和成果也可以为其他领域的系统优化问题提供借鉴和参考。
二、排队系统理论基础排队系统,也称为随机服务系统,是一种广泛存在于现实生活中的数学模型。
这种模型通常描述顾客到达服务机构,等待并接受服务的过程。
排队系统理论的核心在于分析并优化这种服务过程的效率。
在计算机仿真领域,通过模拟排队系统的运行过程,可以深入理解其内部机制,为优化系统性能提供理论支持。
排队系统主要由三个基本部分构成:输入过程、排队规则和服务机构。
输入过程描述了顾客到达服务系统的规律,常见的输入过程包括定长输入、泊松输入等。
排队规则决定了顾客在系统中的等待和服务顺序,常见的有先到先服务(FCFS)、最短作业优先(SJF)等。
服务机构则负责为顾客提供服务,其服务能力通常受到多种因素的影响,如服务速度、服务人员数量等。
多服务台排队系统的仿真

实验3---多服务台排队系统的仿真姓名:学号:一、目标任务已知一个系统有N个服务员,能力相等,服务时间服从指数分布。
顾客的到达时间间隔服从指数分布。
用Monte-Carlo仿真,分别求按下列方案的总体平均排队时间:① M|M|N。
② N个单通道系统并列,按1/N概率分裂到达流。
③ N个单通道并列,挑选最短的队。
要求:①给出程序设计的过程。
②如果采用固定的N,则要求N>2。
③至少取ρ=0.3和ρ=0.7两种强度运行程序。
④对结果进行分析。
二、编程语言Matlab三、关键代码方案一:N = 3; % 服务员人数r = 6; % 顾客到达流强度u = 20; % 服务员服务强度T = 1000000; % 仿真运行时间avg_wait_time = []; % 平均等待时间for i=1:100% 模拟排队函数server_time = [0.0, 0.0, 0.0]; % 用来保存服务员下一空闲时间time = 0; % 绝对时钟,初始为0client_num = 0; % 顾客总数,初始为0CRTime = 0; % 顾客到达时间间隔ServeTime = 0; % 顾客服务时间server_id = 0; % 当前进入排队窗口的服务员编号total_wait_time = 0;% 系统中到达顾客的总等待时间while 1CRTime = exprnd(1/r); % 按指数分布产生顾客到达时间间隔time = time + CRTime; % 更新系统的绝对时钟if time > Tbreak;endclient_num = client_num + 1; % 顾客数加1ServeTime = exprnd(1/u); % 按指数分布产生顾客服务间隔server_id = mod(client_num, N); % 按1..N的顺序循环排入服务员窗口if server_id ==0server_id = N;endif server_time(1, server_id) <= time % 如果当前server_id号服务员空闲,则直接接收服务server_time(1, server_id) = time + ServeTime; % 服务员下一空闲时间为当前绝对时钟加上当前服务时间else % 否则所有服务员都在忙碌,顾客要排队等候total_wait_time = total_wait_time + server_time(1, server_id) - time; % 顾客排队等候时间为当前服务员下一空闲时间减去绝对时钟server_time(1, server_id) = server_time(1, server_id) + ServeTime;endendavg_wait_time = [avg_wait_time, total_wait_time/client_num];end% 计算平均等待时间mean_avg_wait_time = mean(avg_wait_time);fprintf('ρ=%2.1f平均等待时间%6.5f\n', r/u, mean_avg_wait_time); % 打印平均等待时间% 绘制每次仿真的平均等待时间和总体平均等待时间线状图x = 1:100;%plot(x, avg_wait_time, x, mean_avg_wait_time);scatter(x, avg_wait_time, '.');方案二:N = 3; % 服务员人数r = 6; % 顾客到达流强度u = 20; % 服务员服务强度T = 1000; % 仿真运行时间avg_wait_time = []; % 平均等待时间for i=1:100% 模拟排队函数server_time = [0.0, 0.0, 0.0]; % 用来保存服务员下一空闲时间time = 0; % 绝对时钟,初始为0client_num = 0; % 顾客总数,初始为0CRTime = 0; % 顾客到达时间间隔ServeTime = 0; % 顾客服务时间server_id = 0; % 当前进入排队窗口的服务员编号total_wait_time = 0;% 系统中到达顾客的总等待时间while 1CRTime = exprnd(1/r); % 按指数分布产生顾客到达时间间隔time = time + CRTime; % 更新系统的绝对时钟if time > Tbreak;endclient_num = client_num + 1; % 顾客数加1ServeTime = exprnd(1/u); % 按指数分布产生顾客服务时间间隔server_id = randi([1 N]); % 按1/N的概率排入服务员窗口if server_time(1, server_id) <= time % 如果当前server_id号服务员空闲,则直接接收服务server_time(1, server_id) = time + ServeTime; % 服务员下一空闲时间为当前绝对时钟加上当前服务时间else % 否则所有服务员都在忙碌,顾客要排队等候total_wait_time = total_wait_time + server_time(1, server_id) - time; % 顾客排队等候时间为当前服务员下一空闲时间减去绝对时钟server_time(1, server_id) = server_time(1, server_id) + ServeTime;endendavg_wait_time = [avg_wait_time, total_wait_time/client_num];end% 计算平均等待时间mean_avg_wait_time = mean(avg_wait_time);fprintf('ρ=%2.1f平均等待时间%6.5f\n', r/u, mean_avg_wait_time); % 打印平均等待时间% 绘制每次仿真的平均等待时间散点图x = 1:100;scatter(x, avg_wait_time, '.');方案三:N = 3; % 服务员人数r = 6; % 顾客到达流强度u = 20; % 服务员服务强度T = 1000; % 仿真运行时间avg_wait_time = []; % 平均等待时间for i=1:100% 模拟排队函数server_time = [0.0, 0.0, 0.0]; % 用来保存服务员下一空闲时间time = 0; % 绝对时钟,初始为0client_num = 0; % 顾客总数,初始为0CRTime = 0; % 顾客到达时间间隔ServeTime = 0; % 顾客服务时间server_id = 0; % 当前进入排队窗口的服务员编号total_wait_time = 0;% 系统中到达顾客的总等待时间while 1CRTime = exprnd(1/r); % 按指数分布产生顾客到达时间间隔time = time + CRTime; % 更新系统的绝对时钟if time > Tbreak;endclient_num = client_num + 1; % 顾客数加1ServeTime = exprnd(1/u); % 按指数分布产生顾客服务时间间隔temp = min(server_time); % 寻找排队时间最短的服务员窗口[x, y] = find(temp == min(min(server_time)));server_id = y; % 按队伍最短排入服务员窗口if server_time(1, server_id) <= time % 如果当前server_id号服务员空闲,则直接接收服务server_time(1, server_id) = time + ServeTime; % 服务员下一空闲时间为当前绝对时钟加上当前服务时间else % 否则所有服务员都在忙碌,顾客要排队等候total_wait_time = total_wait_time + server_time(1, server_id) - time; % 顾客排队等候时间为当前服务员下一空闲时间减去绝对时钟server_time(1, server_id) = server_time(1, server_id) + ServeTime;endendavg_wait_time = [avg_wait_time, total_wait_time/client_num];end% 计算平均等待时间mean_avg_wait_time = mean(avg_wait_time);fprintf('ρ=%2.1f平均等待时间%6.5f\n', r/u, mean_avg_wait_time); % 打印平均等待时间% 绘制每次仿真的平均等待时间散点图x = 1:100;scatter(x, avg_wait_time, '.');四、实验结果与分析方案一:图1 方案一仿真的平均等待时间散点图图2 方案一平均等待时间M|M|N1. 输入参数:服务员人数N,顾客到达流强度r,服务员服务强度u,仿真运行时间T;2. 各变量初始值置0:绝对时钟time,服务员下一空闲时刻数组server_time[](其中按顺序保存每一个服务员的下一空闲时刻),顾客总数client_num,顾客到达时间间隔CRTime,顾客服务时间ServeTime,当前进入排队窗口的服务员编号server_id,系统中顾客总等待时间total_wait_time;3. 按照指数分布产生下一顾客到达的时间间隔CRTime,time+=CRTime。
排队问题matlab完整程序

function shengclear allclose alltim0=720;%需要模拟的时间[num,pass]=computing(tim0);%计算模拟数据%动画制作envirment %场景title1= annotation('textbox', 'Position',[0.3377 0.8712 0.33480.07885], ...'EdgeColor','none','FitHeightToText','off','FontName','Arial','FontSize',16,...'FontWeight','bold','String',{'理发店忙闲情况分析'});time1 = annotation('textbox','Position',[0.02754 0.1019 0.09420.06538],...'EdgeColor','none','FitHeightToText','off','FontSize',14,'FontWeight',' bold',...'String',{'时间'});hour1 = annotation('textbox','Position',[0.1072 0.1038 0.075360.06346],...'EdgeColor','none','FitHeightToText','off','FontSize',14,...'FontWeight','bold','String',{'08:'});minute1 = annotation('textbox','Position',[0.1493 0.1038 0.072460.06538],...'EdgeColor','none','FitHeightToText','off', 'FontSize',14,...'FontWeight','bold','String',{'10'});counter1=1; %时间计数temp1=1; %顾客计数counter=1;counterxy=zeros(7,2);tempa=0;tempb=0;tempc=0;tempd=0;tempe=0;tempf=0;tempg=0;global man1 mana1 mana2 mana3 mana4 mana5global manb1 manb2 manb3 manb4 manb5global manc1 manc2 manc3 manc4 manc5global mand1 mand2 mand3 mand4 mand5global mane1 mane2 mane3 mane4 mane5man1(1,:)=[0.4625 0.1786 0.0982 0.1381]; %[x0 y0 x1 y1] man1(2,:)=[0.4875 0.2667 0.5018 0.2667]; %[x0 y0 x1 y1] man1(3,:)=[0.5214 0.2667 0.5339 0.2667]; %[x0 y0 x1 y1] man1(4,:)=[0.5125 0.25 0.5125 0.23]; %[x0 y0 x1 y1] man1(5,:)=[0.4968 0.2081 0.525 0.2072]; %[x0 y0 x1 y1] axis offwhile counter1<=10 %时间计数%显示时间minutex=rem(counter1,60);hourx=8+(counter1-minutex)/60;set(hour1,'String',{hourx})set(minute1,'String',{minutex})if temp1<=num%离开与删除人脸对象if tempa ~= 0if pass(tempa,6) == counter1leaveflash(1,counterxy(1,1),counterxy(1,2))tempa=0;delete(mana1,mana2,mana3,mana4,mana5);endendif tempb~=0if pass(tempb,6) == counter1leaveflash(2,counterxy(2,1),counterxy(2,2))tempb=0;delete(manb1,manb2,manb3,manb4,manb5);endendif tempc~=0if pass(tempc,6) == counter1leaveflash(3,counterxy(3,1),counterxy(3,2))tempc=0;delete(manc1,manc2,manc3,manc4,manc5);endendif tempd~=0if pass(tempd,6) == counter1leaveflash(4,counterxy(4,1),counterxy(4,2))tempd=0;delete(mand1,mand2,mand3,mand4,mand5);endendif tempe~=0if pass(tempe,6) == counter1leaveflash(5,counterxy(5,1),counterxy(5,2))tempe=0;delete(mane1,mane2,mane3,mane4,mane5);endendif tempf~=0if pass(tempf,6) == counter1leaveflash(6,counterxy(6,1),counterxy(6,2))tempf=0;delete(manf1,manf2,manf3,manf4,manf5);endendif tempg~=0if pass(tempg,6) == counter1leaveflash(7,counterxy(7,1),counterxy(7,2))tempg=0;delete(mang1,mang2,mang3,mang4,mang5);endend%产生人脸if pass(temp1,2)==counter1if tempa==0[mana1,mana2,mana3,mana4,mana5]=personcreat(pass(temp1,3)) tempa=temp1;if pass(temp1,5)==1counterxy(1,:)=[-0.027 0.055];endif pass(temp1,5)==2counterxy(1,:)=[0 0.055];endif pass(temp1,5)==3counterxy(1,:)=[0.027 0.055];endelseif tempb==0[manb1,manb2,manb3,manb4,manb5]=personcreat(pass(temp1,3))tempb=temp1;if pass(temp1,5)==1counterxy(2,:)=[-0.027 0.055];endif pass(temp1,5)==2counterxy(2,:)=[0 0.055];endif pass(temp1,5)==3counterxy(3,:)=[0.027 0.055];endtemp1=temp1+1;elseif tempc==0[manc1,manc2,manc3,manc4,manc5]=personcreat(pass(temp1,3))tempc=temp1;if pass(temp1,5)==1counterxy(3,:)=[-0.027 0.055];endif pass(temp1,5)==2counterxy(3,:)=[0 0.055];endif pass(temp1,5)==3counterxy(3,:)=[0.027 0.055];endtemp1=temp1+1;elseif tempd==0[mand1,mand2,mand3,mand4,mand5]=personcreat(pass(temp1,3))tempd=temp1;if pass(temp1,5)==1counterxy(4,:)=[-0.027 0.055];endif pass(temp1,5)==2counterxy(4,:)=[0 0.055];if pass(temp1,5)==3counterxy(4,:)=[0.027 0.055];endtemp1=temp1+1;elseif tempe==0[mane1,mane2,mane3,mane4,mane5]=personcreat(pass(temp1,3))tempe=temp1;if pass(temp1,5)==1counterxy(5,:)=[-0.027 0.055];endif pass(temp1,5)==2counterxy(5,:)=[0 0.055];endif pass(temp1,5)==3counterxy(5,:)=[0.027 0.055];endtemp1=temp1+1;elseif tempf==0[manf1,manf2,manf3,manf4,manf5]=personcreat(pass(temp1,3))tempf=temp1;if pass(temp1,5)==1counterxy(6,:)=[-0.027 0.055];endif pass(temp1,5)==2counterxy(6,:)=[0 0.055];endif pass(temp1,5)==3counterxy(6,:)=[0.027 0.055];endtemp1=temp1+1;elseif tempg==0[mang1,mang2,mang3,mang4,mang5]=personcreat(pass(temp1,3))tempg=temp1;if pass(temp1,5)==1counterxy(7,:)=[-0.027 0.055];endif pass(temp1,5)==2counterxy(7,:)=[0 0.055];endif pass(temp1,5)==3counterxy(7,:)=[0.027 0.055];endtemp1=temp1+1;endendendendendendendend%开始服务if tempa~=0if pass(tempa,2)+pass(tempa,7) == counter1serveflash(1,counterxy(1,1),counterxy(1,2))endendif tempb~=0if pass(tempb,2)+pass(tempb,7) == counter1serveflash(2,counterxy(2,1),counterxy(2,2))endendif tempc~=0if pass(tempc,2)+pass(tempc,7) == counter1serveflash(3,counterxy(3,1),counterxy(3,2))endendif tempd~=0if pass(tempd,2)+pass(tempd,7) == counter1serveflash(4,counterxy(4,1),counterxy(4,2))endendif tempe~=0if pass(tempe,2)+pass(tempe,7) == counter1serveflash(5,counterxy(5,1),counterxy(5,2))endendif tempf~=0if pass(tempf,2)+pass(tempf,7) == counter1serveflash(6,counterxy(6,1),counterxy(6,2))endendif tempg~=0if pass(tempg,2)+pass(tempg,7) == counter1serveflash(7,counterxy(7,1),counterxy(7,2))endendendcounter1=counter1+1;endiiii=1;sumtime=0;sumtimea=0;sumtimeb=0;sumtimec=0;numa=0;numb=0;numc=0;while iiii<numsumtime=sumtime+pass(iiii,3)+pass(iiii,4);if pass(iiii,5)==1sumtimea=sumtimea+pass(iiii,3)+pass(iiii,4);numa=numa+1;endif pass(iiii,5)==2sumtimeb=sumtimeb+pass(iiii,3)+pass(iiii,4);numb=numb+1;endif pass(iiii,5)==3sumtimec=sumtimec+pass(iiii,3)+pass(iiii,4);numc=numc+1;endiiii=iiii+1;endnum=num-1;freetimea=720-sumtimea;freetimeb=720-sumtimeb;freetimec=720-sumtimec;freetime=freetimea+freetimeb+freetimec;avetimea=round(1000*sumtimea/720)/1000;avetimeb=round(1000*sumtimeb/720)/1000;avetimec=round(1000*sumtimec/720)/1000;avetime=round(1000*sumtime/(3*720))/1000;scaleaa=freetimea/720;scaleab=freetimeb/720;scaleac=freetimec/720;dispdata(1,:)=[numa numb numc];dispdata(2,:)=[sumtimea sumtimeb sumtimec];dispdata(3,:)=[avetimea avetimeb avetimec];dispdata(4,:)=[freetimea freetimeb freetimec];dispdata(5,:)=[freetimea/720 freetimeb/720 freetimec/720];figure(2)subplot(2,2,1),bar(dispdata(1,:))title('服务顾客数')subplot(2,2,2),title('服务时间')bar(dispdata(2,:))subplot(2,2,3),title('平均服务时间')pie(dispdata(3,:))subplot(2,2,4),title('空闲比例')pie(dispdata(5,:))function [num,pass]=computing(tim0)seat=[0 0 0];%服务员属性pass=rand(1,4);%序号、到达时间、特殊要求时间、正常理发时间pass(5)=0;%服务员pass(6)=0;%离开时间pass(7)=0;%等待时间num=1;%服务人数tim=0;%时间计数器temp=0;%while tim<=tim0pass(num,1)=num; %装入序号pass(num,2)=rand;pass(num,3)=rand;pass(num,4)=rand;%计算顾客到达时间if pass(num,2)<=0.07temp=4;else if pass(num,2)<=0.17temp=5;else if pass(num,2)<=0.69temp=6;else if pass(num,2)<=0.89temp=7;else temp=8;endendendendtim=tim+temp; %装入顾客到达时间pass(num,2)=tim;if pass(num,3)<=0.1pass(num,3)=4; %装入需要特殊服务的时间else pass(num,3)=0;endnum=num+1;endnum=num-1;for i=1:num%计算顾客的理发席位if seat(1)<=pass(i,2)+pass(i,7)pass(i,5)=1; %由1号服务员理发temp1=timinge1(1,pass(i,4));seat(1)=pass(i,2)+pass(i,3)+temp1;pass(i,4)=temp1; %装入正常理发所需时间else if seat(2)<=pass(i,2)+pass(i,7)pass(i,5)=2; %由2号服务员理发temp1=timinge1(2,pass(i,4));seat(2)=pass(i,2)+pass(i,3)+temp1;pass(i,4)=temp1; %装入正常理发所需时间else if seat(3)<=pass(i,2)+pass(i,7)pass(i,5)=3; %由2号服务员理发temp1=timinge1(3,pass(i,4));seat(3)=pass(i,2)+pass(i,3)+temp1;pass(i,4)=temp1;else%计算等待时间x=seat(1);y=1;if x>seat(2)x=seat(2);y=2;endif x>seat(3)x=seat(3);y=3;endpass(i,5)=y;temp1=timinge1(y,pass(i,4));pass(i,7)=seat(y)-pass(i,2);seat(y)=seat(y)+temp1+pass(i,3);pass(i,4)=temp1;endendendpass(i,6)=pass(i,2)+pass(i,3)+pass(i,4);endfunction envirment%场景设置pict=figure('color',[0.75 0.75 0.75],'position',[50 50 690 520]);door = annotation('rectangle',[0.4214 0.1405 0.19460.03333],'FaceColor',[0 1 0],'EdgeColor',[0 1 0]);word1 = annotation('textbox','Position',[0.3393 0.1143 0.08750.07619],'EdgeColor','none','FitHeightToText','off','FontSize',12,'Stri ng',{'门口'});seata1= annotation('rectangle',[0.2054 0.8214 0.11070.02857],'FaceColor',[0.8471 0.1608 0],'EdgeColor',[0.8471 0.1608 0]); seata2 = annotation('rectangle',[0.2071 0.7476 0.014290.1024],'FaceColor',[0.8471 0.1608 0],'EdgeColor',[0.8471 0.1608 0]); seata3 = annotation('rectangle',[0.3021 0.7419 0.014290.1024],'FaceColor',[0.8471 0.1608 0],'EdgeColor',[0.8471 0.1608 0]); word2 = annotation('textbox','Position',[0.1607 0.65 0.11070.06667],'EdgeColor','none','FitHeightToText','off','String',{'SeatA'});seatb1 = annotation('rectangle',[0.4579 0.8171 0.11070.02857],'FaceColor',[0.8471 0.1608 0],'EdgeColor',[0.8471 0.1608 0]); seatb2 = annotation('rectangle',[0.4579 0.7386 0.014290.1024],'FaceColor',[0.8471 0.1608 0],'EdgeColor',[0.8471 0.1608 0]); seatb3 = annotation('rectangle',[0.5564 0.7448 0.014290.1024],'FaceColor',[0.8471 0.1608 0],'EdgeColor',[0.8471 0.1608 0]); word3 = annotation('textbox','Position',[0.3768 0.6381 0.10360.07381],'EdgeColor','none','FitHeightToText','off','String',{'SeatB'});seatc1 = annotation('rectangle',[0.6986 0.8157 0.11070.02857],'FaceColor',[0.8471 0.1608 0],'EdgeColor',[0.8471 0.1608 0]); seatc2 = annotation('rectangle',[0.6996 0.7343 0.014290.1024],'FaceColor',[0.8471 0.1608 0],'EdgeColor',[0.8471 0.1608 0]); seatc3 = annotation('rectangle',[0.7964 0.7333 0.014290.1024],'FaceColor',[0.8471 0.1608 0],'EdgeColor',[0.8471 0.1608 0]); word4 = annotation('textbox','Position',[0.6429 0.6286 0.10180.07619],'EdgeColor','none','FitHeightToText','off','String',{'SeatC'});watierplace = annotation('rectangle',[0.8214 0.1762 0.019640.3857],'FaceColor',[0 1 1],'EdgeColor',[0 1 1]);word5 = annotation('textbox','Position',[0.7107 0.2 0.11790.0619],'EdgeColor','none','FitHeightToText','off','String',{'等待席'});function leaveflash(xx,yy,zz)global man1 mana1 mana2 mana3 mana4 mana5global manb1 manb2 manb3 manb4 manb5global manc1 manc2 manc3 manc4 manc5global mand1 mand2 mand3 mand4 mand5global mane1 mane2 mane3 mane4 mane5switch xxcase 1for ii = 10:-1:1face(:,1)=man1(:,1)+yy*(ii-1);face(:,3)=man1(:,3)+yy*(ii-1);face(:,2)=man1(:,2)+zz*(ii-1);face(:,4)=man1(:,4)+zz*(ii-1);face(1,3)=0.0982;face(1,4)=0.1381;set(mana1,'position',[face(1,1) face(1,2) face(1,3) face(1,4)]);set(mana2,'X',[face(2,1);face(2,3)],'Y',[face(2,2);face(2,4)]);set(mana3,'X',[face(3,1);face(3,3)],'Y',[face(3,2);face(3,4)]);set(mana4,'X',[face(4,1);face(4,3)],'Y',[face(4,2);face(4,4)]);set(mana5,'X',[face(5,1);face(5,3)],'Y',[face(5,2);face(5,4)]);MM(ii)=getframe;endcase 2for ii = 10:-1:1face(:,1)=man1(:,1)+yy*(ii-1);face(:,3)=man1(:,3)+yy*(ii-1);face(:,2)=man1(:,2)+zz*(ii-1);face(:,4)=man1(:,4)+zz*(ii-1);face(1,3)=0.0982;face(1,4)=0.1381;set(manb1,'position',[face(1,1) face(1,2) face(1,3) face(1,4)]);set(manb2,'X',[face(2,1);face(2,3)],'Y',[face(2,2);face(2,4)]);set(manb3,'X',[face(3,1);face(3,3)],'Y',[face(3,2);face(3,4)]);set(manb4,'X',[face(4,1);face(4,3)],'Y',[face(4,2);face(4,4)]);set(manb5,'X',[face(5,1);face(5,3)],'Y',[face(5,2);face(5,4)]);MM(ii)=getframe;endcase 3for ii = 10:-1:1face(:,1)=man1(:,1)+yy*(ii-1);face(:,3)=man1(:,3)+yy*(ii-1);face(:,2)=man1(:,2)+zz*(ii-1);face(:,4)=man1(:,4)+zz*(ii-1);face(1,3)=0.0982;face(1,4)=0.1381;set(manc1,'position',[face(1,1) face(1,2) face(1,3) face(1,4)]);set(manc2,'X',[face(2,1);face(2,3)],'Y',[face(2,2);face(2,4)]); set(manc3,'X',[face(3,1);face(3,3)],'Y',[face(3,2);face(3,4)]); set(manc4,'X',[face(4,1);face(4,3)],'Y',[face(4,2);face(4,4)]);set(manc5,'X',[face(5,1);face(5,3)],'Y',[face(5,2);face(5,4)]);MM(ii)=getframe;endcase 4for ii = 10:-1:1face(:,1)=man1(:,1)+yy*(ii-1);face(:,3)=man1(:,3)+yy*(ii-1);face(:,2)=man1(:,2)+zz*(ii-1);face(:,4)=man1(:,4)+zz*(ii-1);face(1,3)=0.0982;face(1,4)=0.1381;set(mand1,'position',[face(1,1) face(1,2) face(1,3) face(1,4)]);set(mand2,'X',[face(2,1);face(2,3)],'Y',[face(2,2);face(2,4)]); set(mand3,'X',[face(3,1);face(3,3)],'Y',[face(3,2);face(3,4)]);set(mand4,'X',[face(4,1);face(4,3)],'Y',[face(4,2);face(4,4)]);set(mand5,'X',[face(5,1);face(5,3)],'Y',[face(5,2);face(5,4)]);MM(ii)=getframe;endcase 5for ii = 10:-1:1face(:,1)=man1(:,1)+yy*(ii-1);face(:,3)=man1(:,3)+yy*(ii-1);face(:,2)=man1(:,2)+zz*(ii-1);face(:,4)=man1(:,4)+zz*(ii-1);face(1,3)=0.0982;face(1,4)=0.1381;set(mane1,'position',[face(1,1) face(1,2) face(1,3) face(1,4)]);set(mane2,'X',[face(2,1);face(2,3)],'Y',[face(2,2);face(2,4)]); set(mane3,'X',[face(3,1);face(3,3)],'Y',[face(3,2);face(3,4)]); set(mane4,'X',[face(4,1);face(4,3)],'Y',[face(4,2);face(4,4)]);set(mane5,'X',[face(5,1);face(5,3)],'Y',[face(5,2);face(5,4)]);MM(ii)=getframe;endcase 6for ii = 10:-1:1face(:,1)=man1(:,1)+yy*(ii-1);face(:,3)=man1(:,3)+yy*(ii-1);face(:,2)=man1(:,2)+zz*(ii-1);face(:,4)=man1(:,4)+zz*(ii-1);face(1,3)=0.0982;face(1,4)=0.1381;set(manf1,'position',[face(1,1) face(1,2) face(1,3) face(1,4)]);set(manf2,'X',[face(2,1);face(2,3)],'Y',[face(2,2);face(2,4)]); set(manf3,'X',[face(3,1);face(3,3)],'Y',[face(3,2);face(3,4)]);set(manf4,'X',[face(4,1);face(4,3)],'Y',[face(4,2);face(4,4)]);set(manf5,'X',[face(5,1);face(5,3)],'Y',[face(5,2);face(5,4)]);MM(ii)=getframe;endcase 7for ii = 10:-1:1face(:,1)=man1(:,1)+yy*(ii-1);face(:,3)=man1(:,3)+yy*(ii-1);face(:,2)=man1(:,2)+zz*(ii-1);face(:,4)=man1(:,4)+zz*(ii-1);face(1,3)=0.0982;face(1,4)=0.1381;set(mang1,'position',[face(1,1) face(1,2) face(1,3)face(1,4)]);set(mang2,'X',[face(2,1);face(2,3)],'Y',[face(2,2);face(2,4)]);set(mang3,'X',[face(3,1);face(3,3)],'Y',[face(3,2);face(3,4)]);set(mang4,'X',[face(4,1);face(4,3)],'Y',[face(4,2);face(4,4)]);set(mang5,'X',[face(5,1);face(5,3)],'Y',[face(5,2);face(5,4)]);MM(ii)=getframe;endendfunction [face1,face2,face3,face4,face5]=personcreat(vect)if vect==0face1 = annotation('ellipse',[0.4625 0.1786 0.09820.1381],'FaceColor',[0.6824 0.4667 0],'EdgeColor',[0.6824 0.4667 0]); else face1 = annotation('ellipse',[0.4625 0.1786 0.09820.1381],'FaceColor',[0.4 0.6 0],'EdgeColor',[0.6824 0.4667 0]);%[0.2096 0.6881 0.09821 0.1381]endface2 = annotation('line',[0.4875 0.5018],[0.2667 0.2667],'LineWidth',3); face3 = annotation('line',[0.5214 0.5339],[0.2667 0.2667],'LineWidth',3); face4 = annotation('line',[0.5125 0.5125],[0.25 0.2309],'LineWidth',3); face5 = annotation('line',[0.4968 0.525],[0.2081 0.2072],'LineWidth',3);function serveflash(xx,yy,zz)global man1 mana1 mana2 mana3 mana4 mana5global manb1 manb2 manb3 manb4 manb5global manc1 manc2 manc3 manc4 manc5global mand1 mand2 mand3 mand4 mand5global mane1 mane2 mane3 mane4 mane5switch xxcase 1for ii = 1:10 %开始服务动画face(:,1)=man1(:,1)+yy*(ii-1);face(:,3)=man1(:,3)+yy*(ii-1);face(:,2)=man1(:,2)+zz*(ii-1);face(:,4)=man1(:,4)+zz*(ii-1);face(1,3)=0.0982;face(1,4)=0.1381;set(mana1,'position',[face(1,1) face(1,2) face(1,3) face(1,4)])set(mana2,'X',[face(2,1);face(2,3)],'Y',[face(2,2);face(2,4)])set(mana3,'X',[face(3,1);face(3,3)],'Y',[face(3,2);face(3,4)])set(mana4,'X',[face(4,1);face(4,3)],'Y',[face(4,2);face(4,4)])set(mana5,'X',[face(5,1);face(5,3)],'Y',[face(5,2);face(5,4)]) MM(ii)=getframe;endcase 2for ii = 1:10 %开始服务动画face(:,1)=man1(:,1)+yy*(ii-1);face(:,3)=man1(:,3)+yy*(ii-1);face(:,2)=man1(:,2)+zz*(ii-1);face(:,4)=man1(:,4)+zz*(ii-1);face(1,3)=0.0982;face(1,4)=0.1381;set(manb1,'position',[face(1,1) face(1,2) face(1,3) face(1,4)])set(manb2,'X',[face(2,1);face(2,3)],'Y',[face(2,2);face(2,4)])set(manb3,'X',[face(3,1);face(3,3)],'Y',[face(3,2);face(3,4)])set(manb4,'X',[face(4,1);face(4,3)],'Y',[face(4,2);face(4,4)])set(manb5,'X',[face(5,1);face(5,3)],'Y',[face(5,2);face(5,4)]) MM(ii)=getframe;endcase 3for ii = 1:10 %开始服务动画face(:,1)=man1(:,1)+yy*(ii-1);face(:,3)=man1(:,3)+yy*(ii-1);face(:,2)=man1(:,2)+zz*(ii-1);face(:,4)=man1(:,4)+zz*(ii-1);face(1,3)=0.0982;face(1,4)=0.1381;set(manc1,'position',[face(1,1) face(1,2) face(1,3) face(1,4)])set(manc2,'X',[face(2,1);face(2,3)],'Y',[face(2,2);face(2,4)]) set(manc3,'X',[face(3,1);face(3,3)],'Y',[face(3,2);face(3,4)]) set(manc4,'X',[face(4,1);face(4,3)],'Y',[face(4,2);face(4,4)])set(manc5,'X',[face(5,1);face(5,3)],'Y',[face(5,2);face(5,4)]) MM(ii)=getframe;endcase 4for ii = 1:10 %开始服务动画face(:,1)=man1(:,1)+yy*(ii-1);face(:,3)=man1(:,3)+yy*(ii-1);face(:,2)=man1(:,2)+zz*(ii-1);face(:,4)=man1(:,4)+zz*(ii-1);face(1,3)=0.0982;face(1,4)=0.1381;set(mand1,'position',[face(1,1) face(1,2) face(1,3) face(1,4)])set(mand2,'X',[face(2,1);face(2,3)],'Y',[face(2,2);face(2,4)])set(mand3,'X',[face(3,1);face(3,3)],'Y',[face(3,2);face(3,4)])set(mand4,'X',[face(4,1);face(4,3)],'Y',[face(4,2);face(4,4)])set(mand5,'X',[face(5,1);face(5,3)],'Y',[face(5,2);face(5,4)]) MM(ii)=getframe;endcase 5for ii = 1:10 %开始服务动画face(:,1)=man1(:,1)+yy*(ii-1);face(:,3)=man1(:,3)+yy*(ii-1);face(:,2)=man1(:,2)+zz*(ii-1);face(:,4)=man1(:,4)+zz*(ii-1);face(1,3)=0.0982;face(1,4)=0.1381;set(mane1,'position',[face(1,1) face(1,2) face(1,3) face(1,4)])set(mane2,'X',[face(2,1);face(2,3)],'Y',[face(2,2);face(2,4)]) set(mane3,'X',[face(3,1);face(3,3)],'Y',[face(3,2);face(3,4)]) set(mane4,'X',[face(4,1);face(4,3)],'Y',[face(4,2);face(4,4)])set(mane5,'X',[face(5,1);face(5,3)],'Y',[face(5,2);face(5,4)]) MM(ii)=getframe;endcase 6for ii = 1:10 %开始服务动画face(:,1)=man1(:,1)+yy*(ii-1);face(:,3)=man1(:,3)+yy*(ii-1);face(:,2)=man1(:,2)+zz*(ii-1);face(:,4)=man1(:,4)+zz*(ii-1);face(1,3)=0.0982;face(1,4)=0.1381;set(manf1,'position',[face(1,1) face(1,2) face(1,3) face(1,4)])set(manf2,'X',[face(2,1);face(2,3)],'Y',[face(2,2);face(2,4)])set(manf3,'X',[face(3,1);face(3,3)],'Y',[face(3,2);face(3,4)])set(manf4,'X',[face(4,1);face(4,3)],'Y',[face(4,2);face(4,4)])set(manf5,'X',[face(5,1);face(5,3)],'Y',[face(5,2);face(5,4)]) MM(ii)=getframe;endcase 7for ii = 1:10 %开始服务动画face(:,1)=man1(:,1)+yy*(ii-1);face(:,3)=man1(:,3)+yy*(ii-1);face(:,2)=man1(:,2)+zz*(ii-1);face(:,4)=man1(:,4)+zz*(ii-1);face(1,3)=0.0982;face(1,4)=0.1381;set(mang1,'position',[face(1,1) face(1,2) face(1,3) face(1,4)])set(mang2,'X',[face(2,1);face(2,3)],'Y',[face(2,2);face(2,4)]) set(mang3,'X',[face(3,1);face(3,3)],'Y',[face(3,2);face(3,4)]) set(mang4,'X',[face(4,1);face(4,3)],'Y',[face(4,2);face(4,4)])set(mang5,'X',[face(5,1);face(5,3)],'Y',[face(5,2);face(5,4)]) MM(ii)=getframe;endendfunction xx=timinge1(vect1,vect)switch vect1case 1if vect<=0.18xx=8;else if vect<=0.4xx=9;else if vect<=0.77xx=10;else xx=11;endendendcase 2if vect<=0.18xx=10;else if vect<=0.37xx=11;else if vect<=0.72xx=12;else xx=13;endendendotherwiseif vect<=0.15xx=12;else if vect<=0.37xx=13;else if vect<=0.74xx=14;else xx=15;endendendend。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
10.1 模型数据计算程序..........................................................................................................13 10.2M/M/N 模型计算主要程序............................................................................................... 14
6. 程序设计.....................................................................................................................................8 6.1 运算流程图..........................................................................................................................8 6.2 动画流程图..........................................................................................................................9
4.2 参数分布与建模依据..........................................................................................................4 4.2.1 非负指数分布..........................................................................................................5 4.2.2 泊松分布..................................................................................................................5
9. 参考文献...................................................................................................................................12 10. 附录...........................................................................................................................................13
5. M/M/N 多服务台模型............................................................................................................... 5 5.1 多服务台模型......................................................................................................................5 5.2 服务利用率..........................................................................................................................7 5.3 平均队长..............................................................................................................................7 5.4 平均等待时间......................................................................................................................7
1. 要求分析.....................................................................................................................................2 2. 问题分析.....................................................................................................................................2 3. 模型假设.....................................................................................................................................3 4. 模型分析.....................................................................................................................................3
2. 问题分析
根据系统要求,设计过程中主要需要解决一下问题 1.利用 MATLAB 所提供的 GUI 工具,设计系统界面。 2.根据输入参数,建立服务模型,使顾客到达率符合泊松分布,顾客服务时间 符合负指数分布,并由数学关系得到平均等待时间、平均队长、服务利用率。 3.通过输入参数,利用 MATLAB 图形功能实现系统动画仿真。 4.对整体系统进行调整,检验系统稳定性与正确性,完善系统功能。 5.对整个设计过程进行评估。
4.1 排队系统构成.....................................................................................................................3 4.1.1 到达过程..................................................................................................................3 4.1.2 排队过程..................................................................................................................3 4.1.3 服务过程..................................................................................................................4 4.1.4 系统性能..................................................................................................................4
2
3. 模型假设
根据系统设计要求与实际情况,服务系统基于以下假设: 1.顾客源是无穷的; 2.排队长度没有限制; 3.到达系统的顾客按先到先服务原则依次进入服务; 4.服务员在仿真过程中没有休假; 5.顾客到达时排成一队,当有服务台空闲时进入服务状态; 6.单位时间内到达的顾客数量服从泊松分布; 7.顾客所需的服务时间服从负指数分布; 8.各服务台服务无相互影响且平均服务时间相同。
摘要
排队是在日常生活中经常遇到的现象,如顾客到商店购买物品,病人到医院 看病常常要排队。由于服务机构容量的限制,到达的顾客往往不能立即得到服务, 而出现了排队现象。排队论(又称随机服务系统理论)就是通过对排队系统进行 研究从而建立数学模型的一种理论。
本系统主要基于排队论中多服务系统模型,利用 matlab7.0 实现模型的建立 于仿真,并且通过动画的形式使使用者对整个仿真模型拥有一个直观的认识。 关键词: 多服务员排队系统 排队论 MATLAB 仿真 GUI
7. 系统仿真结果...........................................................................................................................10 7.1 程序界面介绍....................................................................................................................10