function varargout = mm1(varargin)
% MM1 MATLAB code for mm1.fig
% MM1, by itself, creates a new MM1 or raises the existing
% singleton*.
%
% H = MM1 returns the handle to a new MM1 or the handle to
% the existing singleton*.
%
% MM1('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in MM1.M with the given input arguments.
%
% MM1('Property','Value',...) creates a new MM1 or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before mm1_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to mm1_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
% instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES
% Edit the above text to modify the response to help mm1
% Last Modified by GUIDE v2.5 16-Jun-2012 21:02:20
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @mm1_OpeningFcn, ...
'gui_OutputFcn', @mm1_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
% --- Executes just before mm1 is made visible.
function mm1_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to mm1 (see VARARGIN)
% Choose default command line output for mm1
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% UIWAIT makes mm1 wait for user response (see UIRESUME)
% uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line.
function varargout = mm1_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Get default command line output from handles structure
varargout{1} = handles.output;
% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
%-----------------------------------------------------------------------------
%单服务台排队系统---M/M/1/N/∞
%顾客源为无穷,顾客到达相互独立;单服务台,队长限制为N;
%即系统中最多允许有N个顾客在排队,再来的顾客将被拒绝进入系统,先到先服务;
%---------------
%初始化顾客源
%---------------
total_time=str2double(get(handles.edit1,'String')); %总仿真时间
N=str2double(get(handles.edit2,'String')); %队列最大长度
arr_mean=str2double(get(handles.edit3,'String')); %平均到达时间间隔
ser_mean=str2double(get(handles.edit4,'String')); %平均服务时间
lambda=1/arr_mean; %顾客到达率
mu=1/ser_mean; %服务台服务率
arr_num=round(total_time*lambda*2); %可能到达的最大顾客数目
events=[]; %顾客事件表(按行分别表示顾客 到达时刻、服务时间、等待时间、离开时刻、标志位(如果系统拒绝接纳该顾客,则置为0,否则为1,2...))
events(1,:)=exprnd(arr_mean,1,arr_num); %按负指数分布产生各顾客到达时间间隔
events(1,:)=cumsum(events(1,:)); %各顾客到达时刻等于时间间隔的累积
events(2,:)=exprnd(ser_mean,1,arr_num); %按负指数分布产生各顾客服务时间
len_sim=sum(events(1,:)<=total_time); %计算仿真时间内的顾客数
%-------------------------
%计算第一个顾客信息
%-------------------------
events(3,1)=0; %第一个顾客进入系统后直接接受服务,无需等待
events(4,1)=events(1,1)+events(2,1); %离开时刻等于到达时刻与服务时间之和
events(5,1)=1; %第一个顾客肯定被系统接受,此时系统只有一个顾客,故标示位置1
member=[1]; %第一个顾客进入系统后,系统内已有成员序列为1
% ser_utilization=0; %第一个顾客进入系统时,服务台为闲置状态
%-------------------------
%计算第i各顾客信息
%-------------------------
for i=2:arr_num
%如果第i个顾客的到达时间超过了仿真时间 ,则跳出循环
if events(1,i)>total_time
break;
%如果第i个顾客的到达时间未超过仿真时间,则计算在其到达时刻系统中已有顾客个数
else
number=sum(events(4,member)>events(1,i));
%如果系统已满,则系统拒绝第i个顾客,其标志位置0
if number>=N+1
events(5,i)=0;
%如果系统为空,则第i各顾客之间接受服务
elseif number==0;
events(3,i)=0; %等待时间为0
events(4,i)=events(1,i)+events(2,i); %离开时刻等于到达时刻与服务时间之和
events(5,i)=1; %标志位置1
member=[member,i];
%如果系统有顾客在接受服务,且系统等待队列未满,则第i个顾客进入系统
else
len_mem=length(member);
events(3,i)=events(4,member(len_mem))-events(1,i); %等待时间等于队列中前一顾客的离开时刻减去其到达时刻
events(4,i)=events(4,member(len_mem))+events(2,i); %离开时间等于队列中前一个顾客的离开时刻加上其服务时间
events(5,i)=number+1; %标识位表示其进入系统后,系统内共有的顾客数目
member=[member,i];
end
end
end
len_mem=length(member); %仿真结束,进入系统的总顾客数
%---------------
%结果输出
%---------------
figure(2);
stairs([0 events(1,member)],0:len_mem); %绘制仿真时间内,进入系统的所有顾客的到达时刻和离开时刻曲线
hold on;
stairs([0 events(4,member)],0:len_mem,'-r');
legend('到达时刻','离开时刻','Location','SE');
hold off;
grid on;
figure(3);
plot(1:len_mem,events(3,member),'r-*',1:len_mem,events(2,member)+events(3,member),'k-'); %绘制仿真时间内,进入系统所有顾客的停留时间和等待时间曲线
legend('等待时间','停留时间','Location','SE');
grid on;
que_mean=sum(events(3,member))/length(member); %求平均等待时间
stay_mean=sum(events(2,member)+events(3,member))/length(member); %求平均停留时间
figure(4);
stairs(events(1,member), events(5,member)-1,'r-*'); %绘制仿真时间内,队长变化曲线
legend('队长变化曲线','Location','SE');
len_mean=sum(events(5,member)-1)/length(member); %计算平均队列长度
grid on;
a=events(4,member);
ser_utilization=sum(events(2,member))/a(length(a)); %计算服务台的利用率
%------------------------
%仿真结果输出
%------------------------
set(handles.text9,'String', num2str(que_mean));
set(handles.text10,'String',num2str(stay_mean));
set(handles.text11,'String',num2str(ser_utilization));
set(handles.text12,'String',num2str(len_mean));
guidata(hObject, handles);
%-------------------------------------------------------------------------------
% --- Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
set(handles.edit1,'String',0);
set(handles.edit2,'String',0);
set(handles.edit3,'String',0);
set(handles.edit4,'String',0);
set(handles.text9,'String', '');
set(handles.text10,'String','');
set(handles.text11,'String','');
set(handles.text12,'String','');
guidata(hObject, handles);
% ---------------
matlab.rar_排队_系统仿真
版权申诉
109 浏览量
2022-09-19
19:35:41
上传
评论
收藏 9KB RAR 举报
御道御小黑
- 粉丝: 58
- 资源: 1万+
最新资源
- 2023-04-06-项目笔记 - 第一百十九阶段 - 4.4.2.117全局变量的作用域-117 -2024.04.30
- Highlight Plus v20.0.1
- 基于MIC+NE555光敏电阻的声光控电路Multisim仿真原理图
- python tkinter-08-盒子模型.ev4.rar
- Doozy UI Manager 2023
- 基于matlab实现夜间车牌识别程序(1).rar
- 基于matlab实现无线传感器网络无需测距定位算法matlab源代码 包括apit,dv-hop,amorphous在内的共7个
- 基于python的yolov5实现的旋转目标检测
- 基于matlab实现无线传感器网络 CAB定位仿真程序 这是无线传感器节点定位CAB算法的仿真程序,由matlab完成.rar
- 基于matlab实现图像处理,本程序使用背景差分法对来往车辆进行检测和跟踪.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈