Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие Моделирование.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
843.26 Кб
Скачать

7.6 Моделирование смо как Марковского процесса

Вероятности состояний марковского процесса можно получить не только при помощи рассмотренного выше аналитического расчета, но и в результате моделирования. Рассматриваемый далее алгоритм может применяться для любых марковских процессов с дискретными состояниями и непрерывным временем, однако неприменимым, если распределение времени до перехода из состояния в состояние не является экспоненциальным. Впрочем, тогда это будет уже не процесс Маркова. Также следует помнить, что предлагаемый алгоритм моделирует на самом деле не исходную СМО, а марковский процесс, являющийся ее моделью, поэтому с модели можно снять характеристики марковского процесса (вероятности состояний), а характеристики СМО снять напрямую затруднительно и их следует рассчитывать аналитически на основании вероятностей состояний марковского процесса.

Граф марковского процесса должен быть описан в виде матрицы интенсивностей переходов размерностью mm, где m — количество состояний. Для нашего случая (вариант 1) можно построить следующую матрицу интенсивностей переходов:

Будем для определенности считать, что строки и столбцы матрицы нумеруются с 0. Тогда ij — интенсивность перехода в состояние j при условии, что система находится в состоянии i. Логично задать начальное состояние системы i=0 (нет заявок). Тогда, если i — номер текущего состояния, алгоритм моделирования строится следующим образом:

1. Установить текущее состояние i=0, обнулить счетчик модельного времени T и счетчики времени пребывания в k-том состоянии Tk, k=0..m1, а также счетчик обслуженных заявок N.

2. Для каждого j=0..m1 генерируется случайная величина — время до перехода в состояние j из текущего состояния i:

,

где u — случайная величина ррсч(0,1). Данная формула соответствует генерации экспоненциально распределенной СВ с интенсивностью ij методом обратной функции. Для нулевых интенсивностей нужно задаться каким-нибудь конечным очень большим значением.

3. Среди m полученных времен находим минимальное, т.е. находим индекс jm такой, что .

Найденное время — это время пребывания системы в текущем состоянии i, после чего произойдет переход в состояние jm.

4. Увеличить счетчики модельного времени и времени пребывания в состоянии i на величину :

T := T + ; Ti := Ti + ;

5. Если jm<i, то увеличить счетчик обслуженных заявок N.

6. Если N меньше заданного количества обслуженных заявок, то сменить текущее состояние на jm :

i := jm

и перейти к п.2, иначе — стоп.

На первый взгляд, выполняемые действия выглядят странно: допустим, система перешла в состояние 1 (один канал работает), и при розыгрыше времен до перехода в другие состояния определено, что t12=2.0 и t10=1.0. Это должно было бы означать, что через 1 единицу модельного времени придет очередная заявка, а через 2 единицы освободится работающий сейчас канал. Однако алгоритм "забывает" о более позднем событии и розыгрыш времени до освобождения канала и прихода заявки в состоянии 2 производится заново. На самом деле это допустимо, так при экспоненциальном распределении времени между событиями вероятность наступления события в течение интервала dt не зависит от предыстории, т.е. от времени, которое уже прошло в ожидании события до начала интервала dt. Поэтому время "доожидания" освобождения канала в состоянии 2 при условии, что уже прошла 1 единица модельного времени, распределено точно так же, как безусловное время ожидания его освобождения "с самого начала", поэтому его можно сгенерировать "заново", забыв о предыстории. Для других распределений времени обслуживания и времени между приходами заявок данный алгоритм моделирования применять нельзя, так как в этом случае "забывать" предысторию недопустимо.

Вероятности состояний рассчитываются как отношение времени, в течение которого система находилась в данном состоянии, к общему времени моделирования, т.е.

Для случаев с конечным количеством состояний m накапливать модельное время необязательно — ведь T равно сумме всех Ti.

Для случая с бесконечной очередью при реализации этого алгоритма возникает ряд трудностей, а именно: как описать матрицу бесконечной размерности и подсчитать статистику по бесконечному количеству состояний.

Решение 1. Ввести искусственные ограничения на длину очереди и решить конечную задачу, задав достаточно большую (например 40 или 100) максимально допустимую длину очереди. Желательно, чтобы в процессе моделирования крайнее состояние, соответствующее заполнению всей отведенной очереди, не достигалось, тогда полученный результат будет эквивалентен моделированию "бесконечного" случая.

Решение 2. а) Описать матрицу функцией языка программирования. Действительно — ведь значения стоят вдоль главной диагонали, т.е. когда |ij|=1, в остальных случаях получаются нули. Если j=i+1, то интенсивность равна , несложно построить условие и для чисел под главной диагональю.

б) Разыгрывать время перехода только в соседние состояния, т.е. i+1 и i1, так как интенсивности перехода в остальные состояния — нулевые.

в) Подсчитывать статистику по времени пребывания для ограниченного количества состояний (только для состояний, для которых вероятности рассчитывались аналитически). При этом обязательно надо подсчитывать модельное время для всех состояний.