排队论模型及MATLAB实现含GUI界面【Matlab 127期】【数学建模13】

文章目录

  1. 排队现象

  2. 模型介绍
    3.1. 排队服务过程
    3.2. 排队系统的要素
    3.3. 顾客输入过程
    3.4. 排队结构与排队规则
    3.5. 服务机构与服务规则
    3.6. 服务台(员)为顾客服务的顺序
    3.7. 到达间隔和服务时间典型分布
    3.8. 排队模型示例
    3.9. 系统运行状态参数
    3.10. 系统运行指标参数
    3.11. 顾客到达时间间隔分布
    3.12. 顾客服务时间分布
    3.13. 单服务台负指数分布M/M/1排队系统
    3.14. M/M/S模型

  3. 模型举例
    4.1. 例1(MM1)
    4.2. 例2(MMS)
    4.3. 例3

  4. matlab实现
    5.1. 无绘图版
    5.2. 绘图版
    5.2.1. 测试一
    5.2.2. 测试二
    5.2.3. 测试三


  5. 生活中需要排队的地方很多,本模型用于分析和仿真现实生活中的排队现象。
    排队论发源于上世纪初。当时美国贝尔电话公司发明了自动电话,以适应日益繁忙的工商业电话通讯需要。这个新发明带来了一个新问题,即通话线路与电话用户呼叫的数量关系应如何妥善解决,这个问题久久未能解决。
    1909年,丹麦的哥本哈根电话公司A.K.埃尔浪(Erlang)在热力学统计平衡概念的启发下解决了这个问题。1917 年,爱尔朗发表了他的著名的文章—“自动电话交换中的概率理 论的几个问题的解决”。排队论已广泛应用于解决军事、运输、维修、生产、服务、库 存、医疗卫生、教育、水利灌溉之类的排队系统的问题,显示了强大的生命力。

  6. 排队现象
    排队是在日常生活中经常遇到的现象,如顾客到商店购买物品、病人到医院看病常 常要排队。此时要求服务的数量超过服务机构(服务台、服务员等)的容量。也就是说, 到达的顾客不能立即得到服务,因而出现了排队现象。这种现象不仅在个人日常生活中 出现,电话局的占线问题,车站、码头等交通枢纽的车船堵塞和疏导,故障机器的停机 待修,水库的存贮调节等都是有形或无形的排队现象。由于顾客到达和服务时间的随机性。可以说排队现象几乎是不可避免的。
    在这里插入图片描述

  7. 模型介绍
    (1)由于顾客到达和服务时间的随机性,
    现实中的排队现象几乎不可避免;
    (2)排队过程,通常是一个随机过程,
    排队论又称“随机服务系统理论”;

3.1. 排队服务过程
在这里插入图片描述
3.2. 排队系统的要素
(1)顾客输入过程;
(2)排队结构与排队规则;
(3)服务机构与服务规则;

3.3. 顾客输入过程
顾客源(总体):有限/无限;
顾客到达方式:逐个/逐批;(仅研究逐个情形)
顾客到达间隔:随机型/确定型;
顾客前后到达是否独立:相互独立/相互关联;
输入过程是否平稳:平稳/非平稳;(仅研究平稳性)
在这里插入图片描述
3.4. 排队结构与排队规则
顾客排队方式:等待制/即时制(损失制);
排队系统容量:有限制/无限制;
排队队列数目: 单列/多列;
是否中途退出: 允许/禁止;
是否列间转移: 允许/禁止;
(仅研究禁止退出和转移的情形)

3.5. 服务机构与服务规则
服务台(员)数目;单个/多个;
服务台(员)排列形式;并列/串列/混合;
服务台(员)服务方式;逐个/逐批;(研究逐个情形)
服务时间分布;随机型/确定型;
服务时间分布是否平稳:平稳/非平稳;(研究平稳情形)
在这里插入图片描述
3.6. 服务台(员)为顾客服务的顺序
a)先到先服务(FCFS);
b)后到先服务(LCFS);
c)随机服务;
d)优先服务;

3.7. 到达间隔和服务时间典型分布
(1)泊松分布M ;
(2)负指数分布M ;
(3)k阶爱尔朗分布Ek;
(4)确定型分布D;
(5)一般服务时间分布G;

3.8. 排队模型示例
——M/M/1,M/D/1,M/ Ek /1;
——M/M/c,M/M/c/∞/m,
——M/M/c/N/∞,…

3.9. 系统运行状态参数
系统状态N(t):指排队系统在时刻t时的全部顾客数N(t),包括“排队顾客数”和“正被服务顾客数”;
系统状态概率:
瞬态概率P n ( t ) P_{n}(t)Pn​(t):表示时刻t系统状态N(t)=n 的概率;
稳态概率P n P_{n}Pn​:
P n = lim ⁡ t → ∞ P n ( t ) P_{n}=\lim {t \rightarrow \infty} P{n}(t)Pn​=limt→∞​Pn​(t)
一般排队系统运行了一定长的时间后,系统状态的概率分布不再随时间t变化,即初始时刻(t=0)系统状态的概率分布 (P n ( 0 ) P_{n}(0)Pn​(0), n>>0)的影响将消失。
3.10. 系统运行指标参数
用于评价排队系统的优劣。

队长与排队长
(1)队长: 系统中的顾客数(n)期望值记为L s L_{s}Ls​;
(2)排队长: 系统中排队等待服务的顾客数;
期望值记为L q L_{q}Lq​
逗留时间与等待时间
(1)逗留时间:指一个顾客在系统中的全部停留时间;期望值,记为W s W_{\mathrm{s}}Ws​
(2)等待时间:指一个顾客在系统中的排队等待时间;期望值,记为W q W_{\mathrm{q}}Wq​
W s W_{\mathrm{s}}Ws​= W q W_{\mathrm{q}}Wq​ + E[服务时间]
其他相关指标
(1)忙期: 指从顾客到达空闲服务机构起到服务机构再次空闲的时间长度;
(2)忙期服务量:指一个忙期内系统平均完成服务的顾客数;
(3)损失率: 指顾客到达排队系统,未接受服务而离去的概率;
(4)服务强度:ρ= λ/sμ;

function varargout = ChaoShiXiTong(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @ChaoShiXiTong_OpeningFcn, ...
                   'gui_OutputFcn',  @ChaoShiXiTong_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 ChaoShiXiTong is made visible.
function ChaoShiXiTong_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 ChaoShiXiTong (see VARARGIN)
% Choose default command line output for ChaoShiXiTong
clc;
handles.output = hObject;
 
% Update handles structure
guidata(hObject, handles);
 
% UIWAIT makes ChaoShiXiTong wait for user response (see UIRESUME)
% uiwait(handles.gaotiepaiduixitong);
 
 
% --- Outputs from this function are returned to the command line.
function varargout = ChaoShiXiTong_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;
 
%-----------菜单部分的制作---------------------%
%------------帮助菜单-------------------------%
 
function help_Callback(hObject, eventdata, handles)
 
 
 
% 菜单多服务台系统仿真说明函数
function notice_Callback(hObject, eventdata, handles)
h = figure('MenuBar','none','Name','多服务台排队论模型说明','NumberTitle',...
    'off','units','pixels','position',[500,400,400,200],'Windowstyle','modal');
uicontrol('style','text','units','pixels','position',[50 60 300 80],...
    'string','本仿真系统是标准的M/M/N排队模型,各服务台平均服务时间相同;服务员中间没有休息、排队容量不受限制;采用下次事件时间推进机制和先到先服务FIFO排队规则;选择选排队最短的柜台',...
    'BackgroundColor',get(h,'Color'),...
'fontsize',16,'foregroundcolor','b','fontname','宋体');
uicontrol('string','关闭','units','pixels','position',[160 30 70 40],...
    'fontsize',16,'fontweight','bold','foregroundcolor','b','callback',...
    'delete(gcf);');
 
 
%   菜单运行指南
function guide_Callback(hObject, eventdata, handles)
h = figure('MenuBar','none','Name','运行指南','NumberTitle',...
    'off','units','pixels','position',[500,400,400,200],'Windowstyle','modal');
uicontrol('style','text','units','pixels','position',[50 60 300 80],...
    'string','输入参数,点击运行,可输出模型结果',...
    'BackgroundColor',get(h,'Color'),...
'fontsize',16,'foregroundcolor','r','fontname','黑体');
uicontrol('string','关闭','units','pixels','position',[160 30 70 40],...
    'fontsize',16,'fontweight','bold','foregroundcolor','b','callback',...
    'delete(gcf);'); 
% 退出菜单
function exit_Callback(hObject, eventdata, handles)
selection = questdlg(['关闭 ' get(handles.gaotiepaiduixitong,'Name') '?'],...
    ['关闭 ' get(handles.gaotiepaiduixitong,'Name') '...'],...
    ' 是 ',' 否 ',' 是 ');
if strcmp(selection,' 否 ')
    return;
end
 
% delete(handles.gaotiepaiduixitong)
close(gcf);
 
%——————————————————————————————以下正文
 
%顾客平均等待时间编辑框
function wq_Callback(hObject, eventdata, handles)
 
function wq_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end
 
 
%服务员繁忙程度编辑框
function ps_Callback(hObject, eventdata, handles)
 
function ps_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end
 
 
%顾客平均排队长度按钮
function ls_Callback(hObject, eventdata, handles)
 
function ls_CreateFcn(hObject, eventdata, handles)
 
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end
 
%设备配置弹出框
function fwts_Callback(hObject, eventdata, handles)
global tai
h = get(hObject,'value');
tai = h;
 
function fwts_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end
 
 
%顾客平均到达强度编辑框
function ddl_Callback(hObject, eventdata, handles)
 
function ddl_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end
 
 
%服务强度编辑框
function fwl_Callback(hObject, eventdata, handles)
 
function fwl_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end
 
 
% 运行按钮
function calc_Callback(hObject, eventdata, handles)
global Lambda  %顾客到达强度
global Lamda  %顾客购物强度
global Minu    %柜台服务强度
global tai     %柜台数
 
handles=guihandles;
guidata(hObject,handles);%更新数据
%读取到达强度,转换为数字
lambda = str2double(get(handles.ddl,'string'));
%读取服务强度,转换为数字
minu = str2double(get(handles.fwl,'string'));
 
 
%判断仿真类型,服务台个数为1时,即是单服务台;大于1时,便是多服务台
ru = lambda/(minu*tai); %服务机构的平均利用率
 if (ru > 0)&&(ru < 1) &&(lambda>0) && (minu>0) && (tai>0)
    P0=0; %计算初始转移概率
    for i=0:tai-1
        P0=P0+(ru*tai)^i/factorial(i);
    end
    P0=P0+((ru*tai)^tai)/(tai*(1-ru)*factorial(tai));
    P0=1/P0; %初始转移概率
     Lq = ((tai*ru)^tai)*ru*P0/(factorial(tai)*(1-ru)^2);  %平均排队长
    Ls = Lq + lambda/minu;   %平均队长
    Wq = Lq/lambda;  %平均等待时间
Ps = 1-P0;  %服务利用率
p=lambda/((minu)*(tai));  %服务员繁忙程度
else
    errordlg('请仔细检查,重新输入','错误');
    return;
end
%显示顾客平均等待时间,顾客排队长度,服务员繁忙程度
set(handles.wq,'string',num2str(Wq));
set(handles.ls,'string',num2str(Ls));
set(handles.ps,'string',num2str(p));
clear P0,clear Lq %删除变量,释放内存
 
 
% 重置按钮
function reset_Callback(hObject, eventdata, handles)
set(handles.ddl,'String',0);
set(handles.fwl,'String',0);
 
 
set(handles.wq,'String','0');
set(handles.ls,'String','0');
set(handles.p,'String','0');
guidata(hObject, handles);
 
 
% --- Executes on button press in fangzhen.
function fangzhen_Callback(hObject, eventdata, handles)
global Lambda  %顾客到达强度
global Lamda  %顾客购物过强度
global Minu    %服务员服务强度
global tai     %柜台数
 
load halton
%% 生成随机到达时间间隔、购物时间及每个柜台结账服务时间
Arrin = -1/Lambda.*log(halton(1:1000,1)); 		%生成到达时间间隔
Carral = cumsum(Arrin); %到达时刻
Ncus = max(find(Carral<180));  %% 3个小时内到达的总顾客数
Shopping = -1/Lamda.*log(halton(1:1000,2));   %生成购物时间间隔
Service = -1/Minu.*log(halton(1:1000,3));    %生成服务时间间隔
ArriGui = Carral+ Shopping;    %所有顾客到达服务台的到达时刻及顺序,记为ArrGui
 
 %% 初始化每个柜台的状态1
for g = 1:N 
Gui(g).Qu = [0,0]; % 按事件时间记录柜台g的排队,0时刻排队为0
Gui(g).Bu = [0,0];% 0表示空闲,1表示繁忙,0时刻空闲
Gui(g).Arrivaltime = []; %选择柜台g的顾客到达柜台的时间
Gui(g).startser=[];    %选择柜台g的顾客开始接受服务的时间
Gui(g).wait=[];        %选择柜台g的顾客排队等待的时间
Gui(g).servetime=[];   %选择柜台g的顾客接受服务的时间
Gui(g).Leavetime = [];   %选择柜台g的顾客离开柜台的时间
Gui(g).cusnu = []; % 选择柜台g的顾客代码
Gui(g).staytime = []; %选择柜台g的顾客在服务台停留的时间
end
 
 
 

在这里插入图片描述
注:完整代码或者代写添加QQ2449341593
往期回顾>>>>>>
【Matlab 035期】【数学建模1】基于元胞自动机的人口疏散仿真matlab
【Matlab 036期】【数学建模2】粒子群优化ELM网络预测
【Matlab 037期】【数学建模3】时变参数随机波动率向量自回归模型(TVP-VAR)
【Matlab 038期】【数据建模4】模糊二元决策树matlab源码
【Matlab 039期】【数学建模5】基于元胞自动机的四车道交通流
【Matlab 040期】【数学建模6】Matlab实现红细胞
【Matlab 041期】【数学建模7】Matlab 电力预测预测之灰度预测组合预测指数平滑回归分析
【Matlab 042期】【数学建模8】地铁运行仿真之重庆三号线
【Matlab 043期】【数学建模9】基于多种预测模型进行公路流量预测matlab
【Matlab 044期】【数学建模10】基于元胞自动机的人口疏散仿真matlab
【数学建模11】matlab求解洪水大坝模型【Matlab 045期】
【数学建模12】Matlab实现SEIR模型【Matlab 115期】

猜你喜欢

转载自blog.csdn.net/TIQCmatlab/article/details/112758638