Моделирование характеристик системы массового обслуживания типа G/G/1/n в Matlab/Simulink
Целью данного проекта является конструирование и моделирование системы массового обслуживания, а также получение характеристик и средних значений системы массового обслуживания с определенными распределениями поступления заявок, ожидания и обслуживания.
Результаты полученных характеристик и средних значений реализуются в виде графического интерфейса (GUI).
Задание
Выполнить в Matlab/Simulink моделирование характеристик системы массового обслуживания типа G/G/1/n. Законы распределений: на входе – гамма, время обслуживания – показательное, время ожидания – Вейбулла. Длина очереди n=8, интервал симуляции T=200 c. Получить характеристики: количество поступивших заявок от времени, количество обслуженных заявок от времени, количество потерянных заявок от времени, количество заявок в СМО от времени, вероятность k заявок в СМО от k. Средние значения: среднее число заявок в системе и в очереди, коэффициент загрузки системы, среднее время ожидания заявкой обслуживания, среднее время пребывания заявки в системе.
Разработка модели
На рисунке 1 представлена схема заданной СМО.
Рисунок 1 – Схема СМО Г/М/1/8
Схема состоит из следующих блоков:
Ø из трех блоков формирования временных интервалов, используемых в качестве интервалов поступления, ожидания и обслуживания заявок (Event-Based Random Number);
Ø из блока формирования распределенных во времени сигналов, имитирующих последовательность поступающих на вход системы запросов на обслуживание (Time-Based Entity Generator);
Ø из блока, вводящего ожидание для каждой заявки (Schedule Timeout);
Ø из блока, реализующего дисциплину обслуживания заявок (FIFO Queue);
Ø из обслуживающего прибора (Single Server);
Ø из приемника обслуженных заявок (Entity Sink);
Ø из 4 осцилографов (Scope);
Ø из 4 блоков, отправляющих данные в рабочую область matlab.
Графический интерфейс
Графический интерфейс состоит из двух окон: основного и дополнительного. Главное окно содержит переход к дополнительному, ввод заданных значений (длины очереди n и времени симуляции T), вывод средних значений СМО и выход из программы. Дополнительное окно отображает характеристики – требуемые графики, а также содержит кнопку очищения и скрытия отображаемого графика и кнопку закрытия окна. Ниже приведен листинг функций, соответствующих данным окнам интерфейса.
Листинг функции главного окна
function varargout = smo_gui(varargin)
% SMO_GUI MATLAB code for smo_gui.fig
% SMO_GUI, by itself, creates a new SMO_GUI or raises the existing
% singleton*.
%
% H = SMO_GUI returns the handle to a new SMO_GUI or the handle to
% the existing singleton*.
%
% SMO_GUI('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in SMO_GUI.M with the given input arguments.
%
% SMO_GUI('Property','Value',...) creates a new SMO_GUI or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before smo_gui_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to smo_gui_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 smo_gui
% Last Modified by GUIDE v2.5 27-Nov-2014 00:35:09
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @smo_gui_OpeningFcn, ...
'gui_OutputFcn', @smo_gui_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 smo_gui is made visible.
function smo_gui_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 smo_gui (see VARARGIN)
% Choose default command line output for smo_gui
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% UIWAIT makes smo_gui wait for user response (see UIRESUME)
% uiwait(handles.figure1);
sim('smo');
n = str2num(get(handles.edit1, 'String'));
n1 = num2str(n-1);
set_param([gcs '/FIFO Queue'],'Capacity',n1);
T = get(handles.edit2, 'String');
set_param([gcs '/'],'StopTime',T);
% --- Outputs from this function are returned to the command line.
function varargout = smo_gui_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)
close(handles.output);
% --- 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)
graph;
% --- Executes on button press in pushbutton14.
function pushbutton14_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton14 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
sim('smo');
h=uicontrol(handles.text10);
s1=sprintf('%2.4f',Lq(length(Lq))+ro(length(ro)));
set(h,'String',s1);
set(handles.text5,'visible','on');
set(handles.text10,'visible','on');
h=uicontrol(handles.text11);
s2=sprintf('%2.4f',Lq(length(Lq)));
set(h,'String',s2);
set(handles.text6,'visible','on');
set(handles.text11,'visible','on');
h=uicontrol(handles.text12);
s3=sprintf('%2.4f',ro(length(ro)));
set(h,'String',s3);
set(handles.text7,'visible','on');
set(handles.text12,'visible','on');
h=uicontrol(handles.text13);
s4=sprintf('%2.4f',Toch(length(Toch)));
set(h,'String',s4);
set(handles.text8,'visible','on');
set(handles.text13,'visible','on');
h=uicontrol(handles.text14);
s5=sprintf('%2.4f',Tsys(length(Tsys))+Toch(length(Toch)));
set(h,'String',s5);
set(handles.text9,'visible','on');
set(handles.text14,'visible','on');
function edit1_Callback(hObject, eventdata, handles)
% hObject handle to edit1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
n = str2num(get(handles.edit1, 'String'));
n1 = num2str(n-1);
set_param([gcs '/FIFO Queue'],'Capacity',n1);
% Hints: get(hObject,'String') returns contents of edit1 as text
% str2double(get(hObject,'String')) returns contents of edit1 as a double
% --- Executes during object creation, after setting all properties.
function edit1_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function edit2_Callback(hObject, eventdata, handles)
% hObject handle to edit2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
T = get(handles.edit2, 'String');
set_param([gcs '/'],'StopTime',T);
% Hints: get(hObject,'String') returns contents of edit2 as text
% str2double(get(hObject,'String')) returns contents of edit2 as a double
% --- Executes during object creation, after setting all properties.
function edit2_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
Листинг функции дополнительного окна
function varargout = graph(varargin)
% GRAPH MATLAB code for graph.fig
% GRAPH, by itself, creates a new GRAPH or raises the existing
% singleton*.
%
% H = GRAPH returns the handle to a new GRAPH or the handle to
% the existing singleton*.
%
% GRAPH('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in GRAPH.M with the given input arguments.
%
% GRAPH('Property','Value',...) creates a new GRAPH or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before graph_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to graph_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 graph
% Last Modified by GUIDE v2.5 26-Nov-2014 01:16:27
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @graph_OpeningFcn, ...
'gui_OutputFcn', @graph_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 graph is made visible.
function graph_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 graph (see VARARGIN)
% Choose default command line output for graph
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% UIWAIT makes graph wait for user response (see UIRESUME)
% uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line.
function varargout = graph_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)
sim('smo');
plot(ScopeData.time,ScopeData.signals.values,'r');
grid on;
title('Количество поступивших заявок от времени','FontSize',12);
xlabel('Время, c','FontSize',12);
ylabel('Заявки','FontSize',12);
% --- Executes on button press in pushbutton3.
function pushbutton3_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
sim('smo');
plot(ScopeData3.time,ScopeData3.signals.values,'r');
grid on;
title('Количество потерянных заявок от времени','FontSize',12);
xlabel('Время, c','FontSize',12);
ylabel('Заявки','FontSize',12);
% --- Executes on button press in pushbutton4.
function pushbutton4_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton4 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
sim('smo');
plot(ScopeData2.time,ScopeData2.signals.values,'r');
grid on;
title('Количество обслуженных заявок от времени','FontSize',12);
xlabel('Время, c','FontSize',12);
ylabel('Заявки','FontSize',12);
% --- Executes on button press in pushbutton5.
function pushbutton5_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton5 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
sim('smo');
stairs(ScopeData4.time,ScopeData4.signals.values,'r');
grid on;
title('Количество заявок в СМО от времени','FontSize',12);
xlabel('Время, c','FontSize',12);
ylabel('Заявки','FontSize',12);
% --- Executes on button press in pushbutton6.
function pushbutton6_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton6 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
cla reset;
set(handles.axes1,'visible','off');
% --- Executes on button press in pushbutton7.
function pushbutton7_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton7 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
sim('smo');
N1=get_param([gcs '/FIFO Queue'],'Capacity');
N=str2num(N1)+1;
p(1)=(1-ro(length(ro)))/(1-(ro(length(ro)))^(N+1));
k1=2:N+1;
p(k1)=((ro(length(ro))).^k1)*p(1);
k=0:N;
stem(k,p(k+1),'r*');
grid on;
title('Вероятность k заявок в СМО от k','FontSize',12);
xlabel('Заявки','FontSize',12);
ylabel('Вероятность','FontSize',12);
% --- Executes on button press in pushbutton8.
function pushbutton8_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton8 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
close(handles.output);
Результаты моделирования
Рисунок 2 – Вид главного окна (исходные данные уже введены)
Рисунок 3 – Средние значения СМО
Рисунок 4 – Количество поступивших заявок от времени
Рисунок 5 – Количество потерянных заявок от времени
Рисунок 6 – Количество обслуженных заявок от времени
Рисунок 7 – Количество заявок в СМО от времени
Рисунок 8 – Вероятность k заявок в СМО от k
Рисунок 9 – Результат работы кнопки «Очистить»
Заключение
При выполнении проекта была сконструирована заданная СМО в среде SimEvents пакета Simulink. Реализован графический интерфейс, который отображает результаты моделирования: количество поступивших заявок от времени, количество обслуженных заявок от времени, количество потерянных заявок от времени, количество заявок в СМО от времени, вероятность k заявок в СМО от k, среднее число заявок в системе и в очереди, коэффициент загрузки системы, среднее время ожидания заявкой обслуживания, среднее время пребывания заявки в системе.
Комментарии
Уважаемый picasso,Преподаватель
Спасибо!
проф. Е.Гаев
Прикрепил файл проекта.
Загрузил. Спасибо!
как получить исходники