数学建模排队论模型及MATLAB实现含GUI界面
Posted MatlabQQ1575304183
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数学建模排队论模型及MATLAB实现含GUI界面相关的知识,希望对你有一定的参考价值。
文章目录
1. 按
生活中需要排队的地方很多,本模型用于分析和仿真现实生活中的排队现象。
排队论发源于上世纪初。当时美国贝尔电话公司发明了自动电话,以适应日益繁忙的工商业电话通讯需要。这个新发明带来了一个新问题,即通话线路与电话用户呼叫的数量关系应如何妥善解决,这个问题久久未能解决。
1909年,丹麦的哥本哈根电话公司A.K.埃尔浪(Erlang)在热力学统计平衡概念的启发下解决了这个问题。1917 年,爱尔朗发表了他的著名的文章—“自动电话交换中的概率理 论的几个问题的解决”。排队论已广泛应用于解决军事、运输、维修、生产、服务、库 存、医疗卫生、教育、水利灌溉之类的排队系统的问题,显示了强大的生命力。
2. 排队现象
排队是在日常生活中经常遇到的现象,如顾客到商店购买物品、病人到医院看病常 常要排队。此时要求服务的数量超过服务机构(服务台、服务员等)的容量。也就是说, 到达的顾客不能立即得到服务,因而出现了排队现象。这种现象不仅在个人日常生活中 出现,电话局的占线问题,车站、码头等交通枢纽的车船堵塞和疏导,故障机器的停机 待修,水库的存贮调节等都是有形或无形的排队现象。由于顾客到达和服务时间的随机性。可以说排队现象几乎是不可避免的。
到达顾客 | 服务内容 | 服务机构 |
---|---|---|
病人 | 诊断/手术 | 医生/手术台 |
进港的货船 | 装货/卸货 | 码头泊位 |
到港的飞机 | 降落 | 机场跑道 |
电话拨号 | 通话 | 交换台 |
故障机器 | 修理 | 修理技工 |
修理技工 | 领取修配零件 | 仓库管理员 |
上游河水 | 入库 | 水闸管理员 |
3. 模型介绍
(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
完整代码或者代写添加QQ1575304183
以上是关于数学建模排队论模型及MATLAB实现含GUI界面的主要内容,如果未能解决你的问题,请参考以下文章
数学建模基于matlab GUI排队系统仿真含Matlab源码 1253期
数学建模基于matlab GUI理发店排队模拟系统含Matlab源码 1116期
图像识别基于BP神经网络的手写字体识别matlab源码含GUI界面