• Регистрация
picasso
picasso 0.00
н/д

Моделирование характеристик системы массового обслуживания типа G/G/1/n в Matlab/Simulink

29.10.2019

Целью данного проекта является конструирование и моделирование системы массового обслуживания, а также получение характеристик и средних значений системы массового обслуживания с определенными распределениями поступления заявок, ожидания и обслуживания.

Результаты полученных характеристик и средних значений реализуются в виде графического интерфейса (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, среднее число заявок в системе и в очереди, коэффициент загрузки системы, среднее время ожидания заявкой обслуживания, среднее время пребывания заявки в системе.

Теги

    29.10.2019

    Комментарии

    • Ye_Gayev
      Ye_Gayev+4.24
      4.11.2019 17:24

      Уважаемый picasso,Преподаватель

      • Ваша публикация меня заинтересовала. Я сам делаю что-то подобное.
      •  
      •  Прошу прислать мне Ваш текст на Ye_Gayev@i.ua, т.к. не знаю, как скачать этот. Желательно в такой форме, чтобы я мог цитировать с указанием автора.

      Спасибо!

      проф. Е.Гаев

      • picasso
        picasso0.00
        5.11.2019 13:55

        Прикрепил файл проекта.

        • Ye_Gayev
          Ye_Gayev+4.24
          5.11.2019 19:03

          Загрузил. Спасибо!

        • Ainur23
          Ainur230.00
          4.12.2023 03:11

          как получить исходники