900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 【数学建模】排队论模型及MATLAB实现含GUI界面

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

时间:2018-10-24 06:11:35

相关推荐

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

文章目录

1. 按2. 排队现象3. 模型介绍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模型4. 模型举例4.1. 例1(MM1)4.2. 例2(MMS)4.3. 例35. matlab实现5.1. 无绘图版5.2. 绘图版5.2.1. 测试一5.2.2. 测试二

5.2.3. 测试三

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) guiSingleton = 1; guiState = struct('guiName', mfilename, ... 'guiSingleton', guiSingleton, ... 'guiOpeningFcn', @ChaoShiXiTongOpeningFcn, ... 'guiOutputFcn', @ChaoShiXiTongOutputFcn, ... 'guiLayoutFcn', [] , ... 'guiCallback', []); if nargin && ischar(varargin{1}) guiState.gui_Callback = str2func(varargin{1}); end

if nargout [varargout{1:nargout}] = guimainfcn(guiState, varargin{:}); else guimainfcn(guiState, 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 guideCallback(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 exitCallback(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/(minutai); %服务机构的平均利用率 if (ru > 0)&&(ru < 1) &&(lambda>0) && (minu>0) && (tai>0) P0=0; %计算初始转移概率 for i=0:tai-1 P0=P0+(rutai)^i/factorial(i); end P0=P0+((rutai)^tai)/(tai(1-ru)factorial(tai)); P0=1/P0; %初始转移概率 Lq = ((tairu)^tai)ruP0/(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 ```

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。