【数学建模】排队论模型及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. 例3
- 5. 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 ```
?
總結
以上是生活随笔為你收集整理的【数学建模】排队论模型及MATLAB实现含GUI界面的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【YOLOV5-5.x 源码讲解】整体项
- 下一篇: java并发编程电子书