
- •Аннотация
- •1.Основные понятия теории моделирования
- •1.2 Определение абстрактной системы по р. Калману
- •Где –упорядоченное по возрастанию множество моментов времени,
- •1.3 Классификация систем по типу поведения
- •1.4 Принципы моделирования
- •2. Основы технологии имитационного моделирования
- •1.2 Аналитическое и имитационное моделирование
- •2.2 Понятие статистического эксперимента
- •2 .3 Область применения имитационных моделей
- •2.4 Управление модельным временем
- •2.5 Оценка качества имитационной модели
- •3. Типовые математические схемы моделей систем
- •3.1.2. Системы разностных уравнений.
- •3.1.3. Примеры систем, описываемых в классе d – схем
- •3.2 Дискретно-детерминированная модель. Конечные автоматы
- •3.3 Дискретно-стохастическая модель. Вероятностный автомат
- •3.4 Марковский процесс с дискретным временем перехода. Уравнения для вероятностей состояний.
- •3.5 Непрерывно-стохастическая модель. Потоки случайных событий.
- •3.6. Марковские процессы с непрерывным временем. Дифференциальные уравнения относительно вероятностей состояний.
- •3.5. Процессы в системах массового обслуживания как непрерывные
- •3.6, Непрерывно-стохастическая модель. Системы массового обслуживания.
- •3.7 Обобщенные модели
- •4. Описание программных средств визуального моделирования системы matlab
- •4.1 Некоторые сведения о пакете matlab
- •4.2 Краткая характеристика расширения matlab – simulink.
- •4.3 Описание программного средства stateflow.
- •5. Разработка моделей средствами simulink-stateflow
- •5.1 Вероятностный автомат
- •5.2 Моделирование процессов функционирования систем массового обслуживания как марковских процессов.
- •5.2.1 Смо замкнутого типа
- •5.2.2 Смо циклического типа с ветвлением переходов
- •5.2.3 Смо смешанного типа
- •5.2.4 Смо смешанного типа с различными характеристиками каналов
- •5.3 Общая схема моделирования смо.
- •Заключение
5.2.4 Смо смешанного типа с различными характеристиками каналов
В большинстве задач моделирования СМО в исходной постановке процесс функционирования не может рассматриваться как марковский процесс, если в качестве состояния принимать количество заявок в системе. К таким системам можно отнести многофазные СМО, СМО с потоками событий, отличающимися от простейших, многоканальные СМО с различными характеристиками каналов и др. Однако во многих случаях процессы в этих системах можно свести к марковским, используя прием расширения пространства состояний.
Рассмотрим
далее в качестве примера СМО с двумя
каналами обслуживания и одним местом
в очереди. Каждый канал имеет свои
характеристики – интенсивности
обслуживания
и
,
– интенсивность потока заявок.
Очевидно, что количество заявок в системе как состояние не описывается марковским процессом, т.к. очередное состояние (т.е. количество заявок) не определяется только количеством заявок в системе на предыдущем шаге, а зависит также и от того, какой именно из каналов мог быть занят (или освобожден) на предыдущем шаге.
Процесс может быть сведен к марковскому, если характеристику канала ввести в состояние. Например, для данной задачи ввести следующие состояния:
St0_0_0 – заявок в системе нет;
St1_0_0
– в системе одна заявка, занят канал с
интенсивностью освобождения
St0_1_0
–в системе одна заявка, занят канал с
интенсивностью освобождения
St1_1_0 – в системе две заявки, заняты оба канала;
St1_1_1 – в системе три заявки, оба канала и место в очереди заняты.
Поскольку каналы неравноценны, следует ввести правила занятия каналов:
При наличии очереди занимается освободившийся канал.
При занятом одном канале занимается свободный канал.
При отсутствии заявок в системе при появлении заявки занимается либо:
Какой-то определенный канал, например, канал K1 (или K2);
Занимается канал, освободившийся раньше;
Занимается канал, время функционирования которого меньше.
Граф переходов можно представить в виде, изображенном на рисунке 5.20
Рис. 5.20 Граф переходов для СМО смешанного типа с различными
характеристиками каналов
SF-диаграмма представлена на рисунке 5.21
Рис. 5.21 СМО смешанного типа с различными характеристиками каналов
Примем правило занятия свободных каналов в соответствии с пунктом 3.б.
SIMULINK-схема приведена на рисунке 5.22. Здесь X – код состояния, m1 – число заявок, обработанных первым каналом, m2 – число заявок, обработанных вторым каналом, r – число заявок, получивших отказ, n – число заявок, t – время перехода, S000,S100,S010,S110,S111 – время пребывания в соответствующем состоянии, t1,t2 – время освобождения первого и второго каналов соответственно.
Рис. 5.22 Simulink-схема для СМО смешанного типа
Настройки данной системы выглядят следующим образом (рис. 5.23):
Рис. 5.23 Настройки системы
5.3 Общая схема моделирования смо.
Рассмотрим возможности использования Q-схем для формального описания процесса функционирования некоторой системы S. Характерная ситуация в работе таких систем – появление заявок (требований) на обслуживание и завершение обслуживания в случайные моменты времени, т.е. стохастический характер процесса их функционирования. В общем случае моменты поступления заявок в систему из внешней среды образуют входящий поток, а моменты окончания обслуживания образуют выходящий поток обслуженных заявок.
Формализуя какую-либо реальную систему с помощью Q-схемы, необходимо построить структуру такой схемы. В качестве элементов структуры Q-схем будем рассматривать элементы трех типов: И – источники, Н – накопители, К – каналы обслуживания заявок.
Известно,
что существует два основных принципа
построения моделирующих алгоритмов:
«принцип
»
и «принцип
».
При построении моделирующего алгоритмаQ-схемы
по «принципу
»,
т.е. алгоритма с детерминированным
шагом, необходимо для построения
адекватной модели определить минимальный
интервал времени между соседними
событиями (во входящих потоках и потоках
обслуживания) и принять, что шаг
моделирования равен этому «минимальному
интервалу». В моделирующих алгоритмах,
построенных по «принципу
»,
т.е. в алгоритмах со случайным шагом,
элементыQ-схемы
просматриваются при моделировании
только в моменты особых состояний (в
моменты появления заявок из И или
изменения состояний К).
В
данной главе будут рассматриваться
возможности реализации алгоритма по
«принципу
»
с помощью программных средств системыMATLAB
и при помощи средства визуального
моделирования STATEFLOW.
Выбор принципа построения моделирующего
алгоритма обусловлен тем, что в STATEFLOW
заложен механизм системного времени
–по некоторым тактам, задаваемым в
параметрах запуска системы. Остановимся
более подробно на детерминированном
моделирующем алгоритме.
Рассмотрим простую систему, структура которой представлена на рисунке 5.24.
Рис. 5.24 Структура системы
Эта система представляет собой однофазную систему массового обслуживания с двумя каналами (К1 и К2) и накопителем с конечной емкостью (Н). Заявки, поступающие в систему, имеют бесконечное время ожидания. N1 – поток потерянных заявок, N2 – поток обслуженных заявок.
Заявка, выходящая из источника, попадает либо сразу на обслуживание в канал (если хотя бы один из обслуживающих каналов свободен), либо в накопитель (если там есть место). Если оба канала заняты и накопитель полон, то заявка считается потерянной. Заявки, вышедшие из каналов, считаются обслуженными.
Схема детерминированного моделирующего алгоритма Q-схемы представлена на рисунке 5.25.
Рис. 5.25 Блок-схема детерминированного моделирующего алгоритма
Блок
6 служит для отсчетов системного времени,
т.е. для вычислений
,
где
-постоянный
шаг,
-текущий
момент времени,
-следующий
момент времени.
Работа вспомогательных блоков – ввода, исходных данных 1, установки начальных условий 2, обработки 7 и вывода результатов моделирования 8 – не представляет для нас особого интереса, т.к. данные блоки аналогичны во всех алгоритмах.
Остановимся более подробно на рассмотрении функционирования блоков 4, 5, работа которых отражает специфику детерминированного подхода.
Для удобства детализации алгоритма введем следующие обозначения:
t – текущий момент системного времени;
ti – время прихода очередной заявки;
R=2 – число каналов;
K(j) – каналы системы, j=1,2;
z(j)
– состояние канала K(j),
;
tvk(j) – время окончания обслуживания очередной заявки каналом K(j);
WORK(K(j)) – процедура обслуживания заявок каналами K(j); позволяет обратиться к генератору случайных чисел с соответствующим данному каналу законом распределения, генерирующему длительность интервала обслуживания очередной заявки.
D(ti) – процедура генерации заявок источником определяет момент поступления очередной
заявки в систему;
l
Рис.
5.26 Блок-схема алгоритма моделирующего
окончание обслуживания заявки
k – количество заявок в накопителе
M – емкость накопителя.
Окончание
обслуживания заявки в некотором каналеK(j)
в момент времени t
может вызвать процесс распространения
изменений состояний элементов («особых
состояний») системы в направлении,
противоположном движению заявок в
системе, поэтому при м
оделировании
все элементы системы должны просматриваться
начиная с обслуживающего канала последней
фазы по направлению к накопителю 1-ой
фазы. Данный принцип не обязательно
использовать в случае однофазных СМО,
но он важен при моделировании работы
более сложных систем – систем обслуживания
с двумя и более фазами.
П
Рисунок
5.18 Рис.
5.27 Блок-схема алгоритма моделирующий
приход заявки в систему и обслуживание
Затем имитируется взаимодействие в процессе обслуживания заявок в накопителе и каналах. Проверяется необходимость и возможность обслуживания каналами K(j), j=1,2 заявок из накопителя Н. Если в Н имеются заявки и один из K(j) свободен, то имитируется обслуживание заявки, фиксируется занятость конкретного канала и освобождение одного места в Н (рис. 5.27).
Далее имитируется взаимодействие источника (И) и накопителя Н с учетом занятости каналов этой фазы. Если в текущий момент времени t поступила заявка из И, то она, при наличии свободного канала, может быть обслужена K(j), либо, при наличии мест в накопителе, поставлена в очередь, либо, при занятости каналов и отсутствии свободных мест в накопителе, утеряна. После этого определяется время поступления в Q-схему очередной заявки из источника и управление передается блоку 6, который определяет момент очередного шага.
Затем управление снова передается блоку 3, который при наборе необходимой статистики проводит обработку и выдачу результатов моделирования, а затем остановку моделирования.
Данный алгоритм легко реализуется при помощи языка программирования MATLAB.
queuedt2.m
% Однофазная система массового обслуживания по принципу dt
function queuedt2
tm=100; % время окончания функционирования системы
k=0; % количество заявок в очереди
M=2; % емкость очереди
otk=0; % количество потерянных заявок
tpn=0; % время поступления заявки в накопитель
vpn=[]; % массив времен поступления заявок в накопитель первой фазы
tpk=[0,0]; % время начала обработки заявки в каналах первой фазы
tvk=[0,0]; % время начала обработки заявки в каналах первой фазы
vvk=[,]; % массив времен поступления заявок в каналы первой фазы
ti=0; % время поступления заявки в систему;
vti=[0]; % массив времен поступления заявок;
dt=0.1; % постоянный шаг
t0=dt; % начальный момент времени
N=5; % параметр источника
m=[10,7]; % параметры каналов первой фазы
z=[0,0]; % параметры, характеризующие состояние каналов
num=0; % количество сгенерированных заявок
R=2; % количество каналов
l=[0,0]; % количество заявок, обработанных каналами
srO=0;
km=0; % количество заявок, сразу поступивших на обслуживание в канал
for t=t0:dt:tm
ql=0;
for j=1:R
if tvk(j)<=t && z(j)==1 % если канал первой фазы освободился
z(j)=0;
l(j)=l(j)+1;
if k>0 % если в накопителе есть заявки
p=exprnd(m(j));
tpk(j)=t; % заявка из накопителя идет на обслуживание в канал
tvk(j)=tpk(j)+p;
z(j)=1; % канал становится занят
k=k-1; % число заявок в очереди уменьшается на единицу
end
end
end
if ti<t % источник сгенерировал заявку
q=exprnd(N);
ti=ti+q;
vti=[vti,ti];
num=num+1;
for j=1:R
if ql==0 % если заявка еще не ушла на обслуживание
if z(j)==0 % и если канал первой фазы свободен и
p=exprnd(m(j)); % заявка идет на обслуживание в канал
tpk(j)=t;
tvk(j)=tpk(j)+p;
z(j)=1;
km=km+1;
ql=1;
end
end
end
if ql==0 % если заявка еще не обслуживается
if k<M % если в очереди есть место
tpn=ti; % заявка становится в очередь
k=k+1;
vpn=[vpn,tpn];
else
if k==M % если мест в очереди нет
otk=otk+1; % заявка считается потерянной
end
end
end
srO=srO+k;
end
sol1=[t,ti,tvk(1),z(1),tvk(2),z(2),k,otk,num];
end
not_end=0;
for j=1:R
if z(j)==1
not_end=not_end+1;
end
end
n=size(find(vti<tm),2); % количество поступивших заявок
finish=0;
for j=1:R
finish=finish+l(j); % количество обслуженных заявок
end
sr=srO/n; % средняя длина очереди
p=otk/(finish+otk); % вероятность потери заявки
pkm=km/finish; % вероятность немедленного обслуживания заявки
disp(' n K1 K2 k otk not_end')
sol=[n,l(1),l(2),k,otk,not_end];
disp(' ')
disp(sol)
sprintf('Вероятность потери заявок= %g',p)
sprintf('Средняя длина очереди= %g',sr)
sprintf('Вероятность немедленного обслуживания заявки= %g', pkm)
Результат работы данной программы:
n K1 K2 k otk not_end
18 10 5 0 2 1
Вероятность потери заявок= 0.117647
Средняя длина очереди= 0.5
Вероятность немедленного обслуживания заявки= 0.8
Рассмотрим реализацию данной системы при использовании средства визуального моделирования MATLAB – STATEFLOW. Краткая характеристика этого расширения была дана в главе 4, поэтому сейчас остановимся более подробно на тех возможностях STATEFLOW, которые нам понадобятся для реализации этого примера.
Для начала сформулируем постановку задачи: требуется промоделировать работу системы массового обслуживания с двумя каналами, обрабатывающими поступающие из источника заявки, при занятости обоих каналов рассмотреть возможность ожидания обслуживания заявок, т.е. постановку заявок в конечную очередь, и отказ при отсутствии свободных мест в очереди, т.е. потерю заявок.
Требуется построить SF-диаграмму, реализующую работу данной системы.
Разработаем модель по принципу нисходящего проектирования. Наша модель будет состоять из четырех блоков (рис. 5.28), функционирующих параллельно, каждый из которых впоследствии будет представлен своей SF-диаграммой.
Рис. 5.28 Структура модели
Блок 1 должен в определенные моменты времени генерировать поступление новой заявки в систему. Моменты появления заявок в системе носят стохастический, т.е. случайный, характер. Когда в системе появляется новая заявка она должна либо поступить на обработку в канал (блоки 3 и 4), если хотя бы один из каналов свободен, либо, если оба канала заняты, проследовать на обработку в блок 2, который, в свою очередь, либо поставит заявку в очередь, либо, при отсутствии мест в очереди, «потеряет» ее.
Структура
блоков 3 и 4 не имеет принципиальных
отличий, поэтому рассмотрим реализацию
некоторого блока, который назовемCanal,
работа которого будет аналогична работе
блоков 3 и 4.
Блок Canal может находиться в двух состояниях: «канал свободен» и «канал занят». Между этими состояниями возможны переходы, которые характеризуются следующими событиями: приходом заявки на обработку, т.е. канал из состояния «свободен» переходит в состояние «занят», и окончанием обработки заявки каналом, т.е. канал из состояния «занят» переходит в состояние «свободен». Структура данного блока изображена на рисунке 5.29. Примем, что по умолчанию в начальный момент времени блок Canal находится в состоянии «свободен».
После определения общей структуры блока требуется описать «характеристики» состояний (данные, идентифицирующие нахождение в данном состоянии; действия, происходящие во время нахождения в состоянии, во время выхода из состояния и прочее) и события, определяющие переходы. Очевидно, что данные события будут зависеть от функционирования параллельно работающих блока 1 – блока поступления заявок в систему и блока 2 – блока, регулирующего работу очереди.
Общая структура блока 1 представлена на рисунке 5.30
Рис.
5.30 Структура генератора заявок
Когда системное время совпадает со временем прихода следующей заявки (или становится больше), то в данном блоке происходит имитация прихода заявки в систему и данная заявка распределяется, в зависимости от дальнейшего «обслуживания», т.е. заявка либо сразу следует на обработку в свободный канал, либо ожидает своей очереди в накопителе, либо теряется.
SF-диаграмма для системы представлена на рисунке 5.32, а SIMULINK-схема системы, после запуска процесса функционирования системы – на рисунке 5.31
Рис. 5.31 Simulink-схема системы после окончания процесса функционирования системы
Рис. 5.32 SF-диаграмма системы
Рассмотрим
более сложнуюQ-схему,
структура которой представлена на
рисунке 5.33. Эта структура представляет
собой двухфазную систему массового
обслуживания с двумя каналами и
накопителем первой фазы и каналом и
накопителем второй фазы.
Рис. 5.33 Структура Q-схемы
Кроме связей, отражающих движение заявок в Q-схеме (сплошные линии), можно говорить о различных управляющих связях. Примером таких связей являются различные блокировки обслуживающих каналов (по входу и по выходу): блокировки изображены в виде треугольников, а управляющие связи – пунктирными линиями. Блокировка канала по входу означает, что этот канал отключается от входящего потока заявок, а блокировка канала по выходу указывает, что заявка уже обслуженная блокированным каналом, остается в этом канале до момента снятия блокировки. В этом случае, если перед накопителем не используется блокировка канала, то при переполнении будут иметь место потери заявок.
Рассмотрим блокировку каналов первой фазы по выходу, т.е. в случае, когда канал второй фазы занят, а накопитель переполнен будет иметь место блокировка каналов.
Как уже упоминалось, процесс распространения изменений состояний происходит в направлении, противоположном движению заявок в системе, поэтому при моделировании все элементы системы просматриваются начиная с обслуживающего канала второй фазы по направлению к накопителю первой фазы.
Схема детерминированного моделирующего алгоритма Q-схемы представлена на рисунке 5.34
Рис. 5.34 Схема моделирующего алгоритма
Не будем повторно останавливаться на блок-схемах алгоритма, они строятся по аналогии с предыдущим случаем. Данный алгоритм легко реализуется на языке MATLAB.
quered2_1.m
% Двухфазная система массового обслуживания
function queue2_1
tm=15; % время окончания функционирования системы;
R=2; % число каналов первой фазы
k1=0; % количество заявок в очереди первой фазы;
k2=0; % количество заявок в очереди второй фазы;
M1=2; % емкость первого накопителя;
M2=5; % емкость второго накопителя;
vvk=[]; % массив времен окончания обработки заявок;
otk=0; % количество потерянных заявок;
tpn1=0; % время поступления заявки в накопитель первой фазы;
vpn1=[]; % массив времен поступления заявок в накопитель первой фазы;
tpn2=0; % время поступления заявки в накопитель второй фазы;
vpn2=[]; % массив времен поступления заявок в накопитель второй фазы;
tpk1=[0,0]; % время начала обработки заявки в каналах первой фазы;
tvk1=[0,0]; % время начала обработки заявки в каналах первой фазы;
vvk1=[,]; % массив времен поступления заявок в каналы первой фазы;
tpk2=0; % время начала обработки заявки в канале второй фазы;
tvk2=0; % время окончания обработки заявки в канале второй фазы;
vvk2=[]; % массив времен поступления заявок в канал второй фазы;
ti=0; % время поступления заявки в систему;
vti=[0]; % массив времен поступления заявок;
N=1; % параметр источника
m=[1,2]; % параметры каналов первой фазы
m2=3; % параметр канала второй фазы
z=[0,0]; % параметры, характеризующие состояние каналов
z2=0; % 0-свободен, 1-занят
block=0; % 0-нет блокировки каналов первой фазы, 1-есть
l=[0,0];
dt=0.1; % постоянный шаг
t0=dt; % начальный момент времени
num=0; % количество сгенерированных заявок
for t=t0:dt:tm
% сначала просмотр изменений состояний в системе
q2=0;
if tvk2<t && z2==1
z2=0; % если канал второй фазы освободился
if k2>0 % и в очереди есть заявки,
p2=exprnd(m2); % то заявка из накопителя идет на обслуживание в канал
tpk2=tvk2;
tvk2=tpk2+p2;
k2=k2-1; % количество зявок в очереди уменьшается на одну
z2=1; % канал становится занят
q2=1;
end
% vvk2=[vvk2,tvk2]; % массив времен окончания обслуживания заявок каналом второй фазы
end
if k2==M2 && z2==1 % если канал второй фазы занят и накопитель полон, то
block=1; % устанавливается блокировка каналов первой фазы
else % иначе
block=0; % блокировки нет
end
for j=1:R
if tvk1(j)<t && z(j)==1 && block==0 % если канал первой фазы освободился
z(j)=0;
l(j)=l(j)+1;
if k2==0 && z2==0 % в накопителе второй фазы нет заявок и канал второй фазы свободен
p2=exprnd(m2); % заявка из канала первой фазы
tpk2=tvk1(j); % переходит в канал второй фазы
tvk2=tpk2+p2;
q2=1;
% vvk2=[vvk2,tvk2];
z2=1; % канал второй фазы становится занят
else % канал второй фазы занят или есть очередь
tpn2=tvk1(j); % заявка становится в очередь
k2=k2+1;
vpn2=[vpn2,tpn2];
end
if k2==M2 && z2==1 % если канал второй фазы занят и накопитель полон, то
block=1; % устанавливается блокировка каналов первой фазы
end
end
if z(j)==0 % если канал первой фазы свободен
if k1>0 % есть очередь в накопителе первой фазы
p=exprnd(m(j));
tpk1(j)=t; % заявка из накопителя идет на бслуживание в канал
tvk1(j)=tpk1(j)+p;
z(j)=1; % канал становится занят
k1=k1-1; % число заявок в очереди уменьшается на единицу
end
end
end
% на момент времени t все состояния системы изменились,
% теперь рассмотрим приход новой заявки
if q2==1
vvk2=[vvk2,tvk2];
end
ql=0;
if ti<t % источник сгенерировал заявку
q=exprnd(N);
ti=ti+q;
vti=[vti,ti];
num=num+1;
for j=1:R
if z(j)==0 && ql==0 % если канал первой фазы свободен и заявка еще не ушла на обслуживание
p=exprnd(m(j)); % заявка идет на обслуживание в канал
tpk1(j)=ti-q;
tvk1(j)=tpk1(j)+p;
z(j)=1;
ql=1;
end
end
if k1<M1 && ql==0 % если в очереди есть место и заявка еще не обслуживается
tpn1=ti-q;
k1=k1+1;
vpn1=[vpn1,tpn2];
else
if k1==M1 && ql==0 % все каналы первой фазы заняты и мест в очереди нет
otk=otk+1; % потеря заявки
end
end
end
sol=[t,ti,tvk1(1),z(1),tvk1(2),z(2),k1,otk,tvk2,z2,k2,block]
end
vvk2
n=size(find(vti<tm),2); % количество поступивших заявок;
n1=size(find(vvk2<tm),2); % количество обслуженных заявок на выходе из системы;
disp(' n k1 k2 otk K1 K2 K3 1 2 3')
sol1=[n,k1,k2,otk,l(1),l(2),n1,z(1),z(2),z2]
По аналогии с алгоритмом моделирования системы на языке MATLAB строится SF-диаграмма данной СМО.