КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Моделирование работы системы массового обслуживания
1) Постановка задачи Требуется произвести расчет режимов работы следующей системы: есть касса, кассир продает билет, время обслуживания случайно, клиенты подходят и становятся в очередь, очередь ограничена. Требуется построить имитационную СМО и поиграв параметрами найти зависимости длины средней очереди от среднего времени обслуживания клиентов, определить вероятность простоя кассира, % обслуженных клиентов зависит от интенсивности работы кассира. 2) Посторенние физической модели 1). Генератор Входной поток клиентов простейший. Генератор посылает заявку в очередь, генерирует промежуток времени до следующей заявки. 2). Очередь ремонта Входные сигналы: - от генератора в очередь пришла заявка, тогда состояние очереди увеличится на1; - забрать заявку из очереди при этом состояние очереди уменьшается на 1. Выходные сигналы: - очередь выдает сигнал кассиру, что на очереди есть заявка; - передача заявки в кассу; - очередь перегружена, заявку принять не может. 3). Касса Z=1 – простой Z=2 – работа Кассир простаивает в режиме ожидания, пришел клиент, становится в очередь, очереди нет, следовательно, в очереди 1ая заявка. Кассир генерирует выходной сигнал забрать заявку из очереди. Очередь посылает на обслуживание. В момент обслуживания на сигналы из очереди касса не реагирует. В состоянии обслуживания кассир находится в течение случайного времени. Время обслуживания закончилось, нужно подать автомату сигнал о том, что он освободился. При этом также должны подаваться сигналы из очереди, что там находятся клиенты. 3) Создание математической модели Касса Входные сигналы: - 1 – закончить работу СМО; - 2 – из очереди пришла информация, что в ней появилась заявка; - 3 - из очереди на обслуживание пришла реальная заявка. Выходные сигналы: - 1 – кассир приступил к работе по обслуживанию заявки; - 2 – запрос у очереди взять заявку; - 3 – заявка обслужена, ушла из системы, и одновременно идет сигнал забрать заявку из очереди. Автоматная таблица состояний:
Очередь Входные сигналы: - 1 – заявка пришла в очередь; - 2 – забрать заявку из очереди. Выходные сигналы: - 1 – очередь сообщает кассиру, что в пустой очереди появился заявка; - 2 – передача заявки из очереди кассиру; - 3 – очередь отказывается ставить клиента, переполнена. Пришла заявка в очередь при 3ёх ситуциях: 1) если очередь пустая, то очередь с состоянием 0 и на выходе 1; 2) если промежуточная, то число заявок увеличилось на 1, на выходе ничего не изменилось; 3) если очередь максимальна, то на выходе = 3. Генератор Входные сигналы: - 1 - сгенерировать заявку; Выходные сигналы: - 1 – отправить заявку на очередь. Модельное время В нашей модели используется принцип изменения модельного времени по особым состояниям. Это состояние – смена состояний под воздействием входных и выходных сигналов. Для организации передачи сигналов используется понятие событие. Событие – это массив из 3ёх чисел Sob=[time, kto, sign] time – время события kto – кто получает сигнал sign – номер входного сигнала Список событий –это матрица вида
Sob[k,:)=[timek, ktok, signk]
Вносим в список событий событие с заданными параметрами: function putsob(time,kto,Sign); global Nsob sob;
Nsob=Nsob+1; % Число записей в списке увеличиваем на 1 sob(Nsob,1:3)=[time,kto,Sign]; % Заносим в последнюю строку списка информацию о событии
Получить очередное событие с наименьшим временем из списка: function z=getsob; global Nsob sob
if Nsob==0 % Если список пуст z=[]; return; else [tmin,k]=min(sob(:,1)); % Ищем индекс "к" у события с минимальным временем z=sob(k,:); % Возвращаем найденное событие (строка с номером к) sob(k,:)=[]; % Вычеркиваем найденную строку из списка Nsob=Nsob-1; % Уменьшаем количество записей в списке end Программа моделирования самой СМО: function model_smo global t Tmod init; % Инициализация исходных данных
while t < Tmod; % Цикл по времени до конца моделирования sob=getsob; % Получение очередного события с наименьшим временем sob=[t,kto,Sign]
t=sob(1); % Коррекция модельного времени kto=sob(2); % Кто получает текущий сигнал sign=sob(3); % Номер сигнала
switch kto
case {1} % Работа генератора заявок generator(sign);
case {2} % Работа накопителя ochered(sign);
case {3} % Работа канала обслуживания kassa(sign);
end % end switch end % end while
pprint; % Вывод результатов
Инициализация исходных данных: function init; global t Kas Tmod Och otk lambda mju obsl Nsob sob
t=0; % Текущее модельное время Tmod=1000; % Время окончания моделирования otk=0; % Количество заявок, которым отказано в обслуживании obsl=0; % Количество обслуженных заявок
mju=1; % Интенсивность обслуживания каналом заявок lambda=1; % Интенсивность появления заявок
Nsob=1; % Количество событий в списке sob(Nsob,1:3)=[0,1,1]; % Инициализация первого события
Kas=struct(... % Структура с данными канала обслуживания 'Z',1,... % Номер текущего состояния 'Tvh',0,... % Время входа в текущее состояние 'nZ',[0,0],... % Счетчики состояний 'tZ',[0,0],... % Счетчики продолжительности состояний 'mZ',0,... % Подсчет среднего состояния 'TabZ',[1,1,2; 1,2,0],... % Автоматная таблица состояний 'TabVs',[0,2,1; 3,0,0]); % Таблица выходных сигналов
Och=struct(... % Структура с данными очереди 'N',0,... % Число заявок в очереди 'n0',0,... % Счетчик числа нулевых состояний очереди 'tn0',0,... % Счетчик времени нулевого состояния 'nNmax',0,... % Счетчик числа максимальных состояний 'tnNmax',0,... % Счетчик времени максимального состояния 'mN',0,... % Подсчет среднего состояния 'tvh',0,... % Время входа в текущее состояние 'Nmax',8); % Максимальное число заявок в очереди
Моделирование работы кассы: function kassa(s); global t obsl mju Kas
[vhd,Kas]=avtwork(Kas,s); switch vhd case {0}; % Нет выходного сигнала
case {1} % Опрелеление времени окончания обслуживания putsob(t+pokdat(mju),3,1); case {2} % Взять заявку из очереди на обслуживание putsob(t,2,2); case {3} % Заявка обслужена, забираем следующую из очереди putsob(t,2,2); obsl=obsl+1; % Подсчет обслуженных заявок end
Моделирование работы накопителя: function [vhd,nak]=nakwork(nak,s); global t
n=nak.N; % Число заявок в очереди (номер состояния) nst=n; % Старое количество заявок в очереди dT=t-nak.tvh; % Время от смены посл. состояния
if nst==0 % Если очередь пуста
switch s % Входной сигнал
case {1} % Пришла заявка n=n+1; % Число заявок увеличилось на 1 nak.n0=nak.n0+1; % Число нулевых состояний увеличилось на 1 nak.tn0=nak.tn0+dT; % Общее время нулевого состояния vhd=1; % Выходной сигнал - пришла заявка
case {2} % Взяли заявку vhd=0; % Пустой сигнал, т.к. в очереди не было заявок end end
if (0 < nst)&(nst < nak.Nmax) % Очередь промежуточная
switch s % Сигнал
case {1} % Пришла заявка n=n+1; % Число заявок увеличилось на 1 vhd=0; % Пустой сигнал, т.к. об этом сообщать не надо
case {2} % Взяли заявку n=n-1; % Число заявок уменьшилось на 1 vhd=2; % Выходной сигнал - пошла заявка на обслуживание end end
if nst == nak.Nmax % Максимальная очередь
switch s % Сигнал case {1} % Пришла заявка vhd=3; % Заявка не обслуживается - выходной сигнал case {2} % Взяли заявку n=n-1; % Число заявок уменьшилось на 1 nak.nNmax=nak.nNmax+1; % Счетчик числа максимальных состояний очереди nak.tnNmax=nak.tnNmax+dT; % Счетчик общего времени максимального состояния vhd=2; % Выходной сигнал - пошла заявка на обслуживание end end
if n ~= nst % Состояние изменилось
nak.mN=nak.mN+dT*nst; % Подсчет средней длины очереди nak.tvh=t; % Запоминаем время входа в новое состояние nak.N=n; % Новое состояние делаем текущим end
Моделирование работы очереди: function ochered(s); global otk t Och
[vhd,Och]=nakwork(Och,s); %
switch vhd case {0}; % Нет выходного сигнала
case {1} % Сообщение каналу о пришедшей заявке putsob(t,3,2); case {2} % Передача заявки в канал для обслуживания putsob(t,3,3); case {3} % Очередь переполнена otk=otk+1; % Подсчет заявок, которым отказано в обслуживании end
Генератор потока заявок: function generator(s); global t lambda
putsob(t+pokdat(lambda),1,1); % Определение времени следующей заявки putsob(t,2,1); % Помещение события в список событий
Вывод результатов моделирования: function pprint; global Tmod Kas Och obsl otk
obsl % Число обслуженных заявок otk % Число отказов в обслуживании
procOtk=otk/(otk+obsl)*100 % Процент отказанных заявок Nz=sum(Kas.nZ); % Суммируем число всех наблюдаемых состояний procZ=Kas.nZ/Nz % Процент количества каждого состояния среди всех sredT=Kas.tZ./Kas.nZ % Среднее время нахождения в каждом состоянии verZ=Kas.tZ./Tmod % Вероятность каждого состояния Mz=Kas.mZ/Tmod % Мат. ожидание (среднее состояние)
sredN=Och.mN/Tmod % Средняя длина очереди
if Och.n0 > 0 % Если есть нулевые (пустые) состояния очереди sredT_0=Och.tn0/Och.n0 % Среднее время нахождения в нулевом состоянии else sredT_0=0 end ver_0=Och.tn0/Tmod % Вероятность нулевого состояния
if Och.nNmax > 0 % Если есть максимальные состояния очереди (очередь заполнена) sredT_max=Och.tnNmax/Och.nNmax % Среднее время нахождения в максимальном состоянии else sredT_max=0 end ver_max=Och.tnNmax/Tmod % Вероятность максимального состояния
Дата добавления: 2014-01-04; Просмотров: 258; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |